操作系统课程设计实验报告
2015年1月9日
姓名
沈XX夏XX江XX
学号
专业
计算机科学与技术
任课老师实验序号实验时间
赵伟华
115年10
月
指导老师
实验名称
实验地点
130558051305580713055816课程名称
成绩:
班级
13052314
操作系统课程设计赵伟华
进程调度管理
1教南1楼
一、题目说明
(1)用C语言完成线程的创建和撤消,并按先来先服务方式对多个线程进行调度。
(2)将线程调度算法修改为时间片轮转算法,实现时间片轮转调度。(也可以结合优先权,实现优先权加时间片轮转算法的线程调度。)
(3)改变时间片的大小,观察结果的变化。思考:为什么时间片不能太小或太大。
(4)假设两个线程共用同一软件资源(如某一变量,或某一数据结构),请用记录型信号量来实现对它的互斥访问。
(5)假设有两个线程共享一个可存放5个整数的缓冲,其中一个线程不停地计算1至50的平方,并将结果放入缓冲中,另一个线程不断地从缓冲中取出结果,并将它们打印出来,请用记录型信号量实现这一生产者和消费者的同步问题。
(6)实现消息缓冲通信,并与4、5中的简单通信进行比较。(7)思考:在线程间进行消息缓冲通信时,若对消息队列的访问没有满足互斥要求,情况将会怎样?
二、设计方案(系统框架)
f该程序主要是分5大块内容:1线程的创建和撤销,2线程的调度,3线程的同步与互斥,4线程的阻塞与唤醒,5利用消息缓冲队列的线程间的通信。
由这五大块功能来完成的基于DOS的多任务系统的实现。在这个系统中,首先先由mai
函数进行一些初始化工作,然后直接创建0线程对应于mai
函数,再由0线程调用create创建1,2线程分别对应与函数f1f2,最后将系统的中断服务程序设置为
ew_i
t8,并把控制交给1线程,启动多个线程的并发执行。
0线程是一个比较特殊的线程,它在创建的时候没有使用create来创建,而是在系统初始化后直接创建的,因它对应的程序段为mai
函数中的一段,所以也直接使用整个系统的堆栈,而不再创建时为私有堆栈分配额外的空间;同样,撤销的时也不需要释放私有堆栈的空间,所以也没有over函数而是直接撤销,从这方面来看,它是一个系统线程。
此外,在启动多个线程并发执行过程后,0线程将系统控制权转交出去,直至系统中其他进程都不具备执行条件时,它才有可能重新得到CPU,从这方面看,0线程相当于是一个空转线程,最后,0线程还担负着一个特别的使命:等待系统中所有其他的线程的完成,此时,它将直接撤销自己并r