计算机操作系统上机

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机操作系统》上机

实验报告

题目

名称

OS进程调度模拟(1.优先级2.时间片轮转)

院系信息学院班级XXX 完成时间2006.10.28 指导老师XXXX 本次实验成绩

组长

联系电话

XXXX 邮件地址XXXX

组长(姓名、学号)XXXX 主要

任务

设计算法,代码实现及实现界面

成员(姓名、学号)XXXX 主要

任务

设计算法,代码实现及实现界面

成员(姓名、学号)主要任务

主要原理及说参考的资料(包括实验内容及条件)

本次实验主要原理是经典操作系统中的静态优先级算法以及时间片轮转法参考书目为《计算机操作系统》(汤子瀛编著)

1.静态优先级原理:在这种方式下,系统一旦把处理机分配给就绪队列中的优先权最高的进程后,该进程便一直执行下去,直至完成。或因为发生某事件使该进程放弃处理机,系统方可再将处理机分配给另一优先级最高的进程。这些事件包括有优先级更高的进程进入,或是因为某些原因该进程被阻塞或被挂起。其中该调度算法的优先级实在进程创建的时候确定的,且在进程运行的整期间保持不变

2.时间片轮转法原理:系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度,把CPU分派给队头进程,并令其执行一个时间片,当时间片用完,将其送回到就绪队列中,在把CPU分配给其他的队头进程,同时也让其执行一个时间片,这样系统能在给顶的时间内响应所有的用户的请求

主要算法及流程图1.优先级算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了两个子线程,一个查询线程(Query()),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Attemper(),该线程来取走该进程,由于该算法可以抢占CPU,所以当该进程进入就绪队列时,则应采取某种策略:若就绪队列为空则该进程p进入就绪队列,成为队头进程,并执行,若队列不为空,即有进程正在执行,则先与队头进程q比较优先级,若新近来的进程p优先级高,则p强占CPU执行,q释放CPU,按优先级顺序重新插回到就绪队列中,若p的优先级低于q,则q继续执行,p按有限级的高低插入到就绪队列中。若进程在执行期间,没有比它有限级高的进程进入,则它一直执行到完成位置,然后出就绪队列,进入完成队列。(这个调度过程也有Attemper线程完成)

时间片轮转算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了三个子线程,一个查询线程(Query()),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Insert

(包括实验步骤)(),该线程来取走该进程,该线程负责按一定的算法将该进程插入到就绪队列中。Attemper()线程负责调度就绪队列中的所有已经就绪的进程。调度策略为:若有新进程p到时间进入就绪队列,由于时间片不能被剥夺,所以正在执行的进程不受其影响,继续执行,p按优先级顺序插入到对头元素之后的某一个位置,这样经过一次调度后,就绪队列按有限级排列,队头正在执行的进程,若时间片用完,却还没有作完,则释放CPU,出就绪队列,下个接点成为队头进程开始执行,p也按有限级顺序插入到队头进程之后的某一位置,在对头进程分配到一个时间片后,若该时间片没有用完,该进程就已经作完,则进程离开就绪队列,进入完成队列,此次分配的时间片剩余的时间作废,不等该时间片结束,立即调度下个进程,为其分配时间片使之执行。

本实验涉及的主要算法细节说明(包括数据结构)1.优先级算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了两个子线程,一个查询线程(Query()),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Attemper(),该线程来取走该进程,由于该算法可以抢占CPU,所以当该进程进入就绪队列时,则应采取某种策略:若就绪队列为空则该进程p进入就绪队列,成为队头进程,并执行,若队列不为空,即有进程正在执行,则先与队头进程q比较优先级,若新近来的进程p优先级高,则p强占CPU执行,q释放CPU,按优先级顺序重新插回到就绪队列中,若p的优先级低于q,则q继续执行,p按有限级的高低插入到就绪队列中。若进程在执行期间,没有比它有限级高的进程进入,则它一直执行到完成位置,然后出就绪队列,进入完成队列。(这个调度过程也有Attemper线程完成)

2.时间片轮转算法:先调度一批作业进后备队列,等待进入就绪队列,接受调度程序除主线程外(WinMain函数部分)另开辟了三个子线程,一个查询线程(Query()),负责一直查询后备队列是否有进程已经到时间,因该进入就绪队列,若有进程到时间,则发一个信号给另一个进程Insert(),该线程来取走该进程,该线程负责按一定的算法将该进程插入到就绪队列中。Attemper()线程负责调度就绪队列中的所有已经就绪的进程。调度策略为:若有新进程p到时间进入就绪队列,由于时间片不能被剥夺,所以正在执行的进程不受其影响,继续执行,p按优先级顺序插入到对头元素之后的某一个位置,这样经过一次调度后,就绪队列按有限级排列,队头正在执行的进程,若时间片用完,却还没有作完,则释放CPU,出就绪队列,下个接点成为队头进程开始执行,p也按有限级顺序插入到队头进程之后的某一位置,在对头进程分配到一个时间片后,若该时间片没有用完,该进程就已经作完,则进程离开就绪队列,进入完成队列,此次分配的时间片剩余的时间作废,不等该时间片结束,立即调度下个进程,为其分配时间片使之执行

3.基本数据结构:

typedef struct Pnode

{

int ID; //进程号

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,每隔一秒

相关文档
最新文档