1、计算机操作系统上机实验报告题目名称OS进程调度模拟(1.优先级2.时间片轮转)院系 信息学院 班级 XXX 完成时间 20061028指导老师 XXXX 本次实验成绩组长联系电话XXXX 邮件地址 XXXX组长(姓名、学号)XXXX 主要任务设计算法,代码实现及实现界面成员(姓名、学号)XXXX 主要任务设计算法,代码实现及实现界面成员(姓名、学号)主要任务主要原理及说参考的资料(包括实验内容及条件)本次实验主要原理是经典操作系统中的静态优先级算法以及时间片轮转法参考书目为计算机操作系统 (汤子瀛编著)1 静态优先级原理:在这种方式下,系统一旦把处理机分配给就绪队列中的优先权最高的进程后,该进
2、程便一直执行下去,直至完成。或因为发生某事件使该进程放弃处理机,系统方可再将处理机分配给另一优先级最高的进程。这些事件包括有优先级更高的进程进入,或是因为某些原因该进程被阻塞或被挂起。其中该调度算法的优先级实在进程创建的时候确定的,且在进程运行的整 期间保持不变2时间片轮转法原理:系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度,把 CPU分派给队头进程,并令其执行一个时间片,当时间片用完,将其送回到就绪队列中,在把 CPU分配给其他的队头进程,同时也让其执行一个时间片,这样系统能在给顶的时间内响应所有的用户的请求主要算法及流程图(包括实验步骤)1优先级算法:先调度一批作业进后备
3、队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了两个子线程,一个查询线程(Query(),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Attemper () ,该线程来取走该进程,由于该算法可以抢占CPU,所以当该进程进入就绪队列时,则应采取某种策略:若就绪队列为空则该进程p进入就绪队列,成为队头进程,并执行,若队列不为空,即有进程正在执行,则先与队头进程q比较优先级,若新近来的进程p优先级高,则p强占CPU执行,q释放CPU ,按优先级顺序重新插回到就绪队列中,若p的优先级低于q,则q继续执行,p按有限级
4、的高低插入到就绪队列中。若进程在执行期间,没有比它有限级高的进程进入,则它一直执行到完成位置,然后出就绪队列,进入完成队列。(这个调度过程也有 Attemper线程完成)时间片轮转算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了三个子线程,一个查询线程(Query() ,负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Insert() ,该线程来取走该进程,该线程负责按一定的算法将该进程插入到就绪队列中。Attemper() 线程负责调度就绪队列中的所有已经就绪的进程。调度策略为:若有
5、新进程p到时间进入就绪队列,由于时间片不能被剥夺,所以正在执行的进程不受其影响,继续执行,p按优先级顺序插入到对头元素之后的某一个位置,这样经过一次调度后,就绪队列按有限级排列,队头正在执行的进程,若时间片用完,却还没有作完,则释放 CPU,出就绪队列,下个接点成为队头进程开始执行,p也按有限级顺序插入到队头进程之后的某一位置,在对头进程分配到一个时间片后,若该时间片没有用完,该进程就已经作完,则进程离开就绪队列,进入完成队列,此次分配的时间片剩余的时间作废,不等该时间片结束,立即调度下个进程,为其分配时间片使之执行。本实验涉及的主要算法细节说明(包括数据结构)1优先级算法:先调度一批作业进后
6、备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了两个子线程,一个查询线程(Query(),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Attemper () ,该线程来取走该进程,由于该算法可以抢占CPU,所以当该进程进入就绪队列时,则应采取某种策略:若就绪队列为空则该进程p进入就绪队列,成为队头进程,并执行,若队列不为空,即有进程正在执行,则先与队头进程q比较优先级,若新近来的进程p优先级高,则p强占CPU执行,q释放CPU ,按优先级顺序重新插回到就绪队列中,若p的优先级低于q,则q继续执行,p按有限
7、级的高低插入到就绪队列中。若进程在执行期间,没有比它有限级高的进程进入,则它一直执行到完成位置,然后出就绪队列,进入完成队列。(这个调度过程也有 Attemper线程完成)2时间片轮转算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了三个子线程,一个查询线程(Query(),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Insert(),该线程来取走该进程,该线程负责按一定的算法将该进程插入到就绪队列中。Attemper()线程负责调度就绪队列中的所有已经就绪的进程。调度策略为:若有新
8、进程p到时间进入就绪队列,由于时间片不能被剥夺,所以正在执行的进程不受其影响,继续执行,p按优先级顺序插入到对头元素之后的某一个位置,这样经过一次调度后,就绪队列按有限级排列,队头正在执行的进程,若时间片用完,却还没有作完,则释放 CPU,出就绪队列,下个接点成为队头进程开始执行,p也按有限级顺序插入到队头进程之后的某一位置,在对头进程分配到一个时间片后,若该时间片没有用完,该进程就已经作完,则进程离开就绪队列,进入完成队列,此次分配的时间片剩余的时间作废,不等该时间片结束,立即调度下个进程,为其分配时间片使之执行3基本数据结构:typedef struct Pnode int ID; /进程
9、号int Priority; /优先数int State; /状态int InHour; /进入 CPU的小时数int InMinite;int AllTime; /运行需要时间int ExeTime; /已经运行的时间int LeftTime; /完成进程还需的时间int EndHour; /进程结束时间int EndMinuter; struct Pnode *next; /就绪多列指针PCB,*PCBList;4模拟时间:程序在创建窗口是,创建一个Windows 的记时器(SetTimer),记时器的时间间隔为1秒,来模拟进程调度的时间进度,程序运行初始时间为8:00,每隔一秒刷新一次,
10、进程进入就绪队列的时间,完成的时间,时间片的大小,进程所需要的运行时间都有这个记时器模拟。计划:计划在实验布置开始进入策划期,为期一个星期,着一个星期主要用与讨论算法,数据结构和我们所设计的算法的可行性 ,在讨论期间查阅各种资料,书籍及网络资源,第二个星期开始实现算法,主要是代码编写,这期间分模块编写各个模块,及创建新的线程,以及程序的该错,以及修改逻辑错误。第三个星期主要负责界面设计(使用 Windows API 函数编写)以及设计数据带入 EXE 程序进行数据测试本次实践计划、进度安排及完成情况完成情况:按照我们的计划,我们的实验完成的非常顺利,每个星期的任务都及时完成。进度也按照计划非常
11、顺利,并且在10.28好顺利完成我们的实验,完成另外可执行程序,并完成了实验报告几相应的ppt 。主要测试方法及测试数据,包括测试1主要测试方法为:选取不同的进入时间,优先级的进程转载进程序,然后运行程序,进行进程调度,查看起执行过程是否满足我们设计的算法调度,然后换一组数据进行测试,看是否满足要求,经过多组实验数据后,然后确保程序的准确性。2测试人:XXXX结果及测试人本次实验的心得体会(每位同学一段)实验心得:XXx:通过这次实验,我加深了对操作系统的进程调度的理解,使我对OS进程调度的策略有了理性的认识,通过这次实验,使我对进程调度过程中的具体过程有了了解,也使我终于明白进程调度在现代 OS的重要性。通过查阅资料,也使我扩充了OS方面的知识。XXxx:通过这次实验,我熟悉了经典OS中的某些调度策略的具体执行过程,加深了对进程调度的了解,在查阅书脊和上网的过程中,扩充了我的课外知识,也使我了解的OS的发展历史。