文档详情

操作系统课程设计时间片轮转.doc

发布:2018-09-22约9.68千字共20页下载文档
文本预览下载声明
目 录 TOC \o 1-3 \h \z HYPERLINK \l _To一、设计目的 PAGEREF _To\h 1 HYPERLINK \l _To二、设计内容 PAGEREF _To\h 1 HYPERLINK \l _To三、设计原理 PAGEREF _To\h 1 HYPERLINK \l _To四、算法实现 PAGEREF _To\h 1 HYPERLINK \l _To五、流程图 PAGEREF _To\h 1 HYPERLINK \l _To六、源程序 PAGEREF _To\h 2 HYPERLINK \l _To七、运行示例及结果分析 PAGEREF _To\h 2 HYPERLINK \l _To八、心得体会 PAGEREF _To\h 2 HYPERLINK \l _To九、参考资料 PAGEREF _To\h 2 时间片轮转法进行CPU调度 设计目的 处理机调度是操作系统中非常重要的部分。为深入理解进程管理部分的功能,设计调度算法,模拟实现处理机的调度。本课程设计是用时间片轮转算法模拟单处理机调度。 二、设计内容 (1)创建进程,每个进程包括三组数据:进程名,进程到达时间,服务时间。 (2)自定义模拟的进程数目。在进程数目之内,手动输入进程(进程名、到达时间和服务时间)。自定义时间片大小。 (3)定义一个时间轴,为参考。 (4)初始化时间轴,根据先到先服务的原则,将已到达的进程插入到执行队列。 (5)分配给执行队列的队首一个时间片,开始运行时间片减1,时间轴则向前推进1,。时间轴每推进一秒,检索是否有新的进程到达,若有则将到达的进程插入到执行队列的队尾。 (6)进程每运行1秒,服务时间减1,同时判断该进程是否运行完(服务时间是否为零)。运行完则退出执行队列。若没有则等待下一次运行。 (7)当一个时间片用完时,判断所有进程是否都运行完,若有,该模拟实验结束。 (8)当一个时间片用完时,判断该队首是否运行过一个完整的时间片,没有则保持该执行队列顺序不变。有,则将该进程插入到队尾。分配新的时间片给队首。 三、设计原理 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾:然后,再把处理机分配给就绪队列中的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。 四、算法实现 (1)创建进程;使用单链表的方法,单链表中的每个结点相当于一个进程。 typedef struct{ char name[5]; int arrtime; int worktime; }DataType; typedef struct node{ DataType data; struct node *next; }ListNode;进程名:name,到达时间:arrtime,服务时间:worktime。 (2)自定义所需进程数目 int flag;cinflag。 (3)创建一个进程单链表,作为进程队列, LinkList head; p=(ListNode*)malloc(sizeof(ListNode)); head=p; p-next=NULL; 在进程数目之内,手动输入进程,p=(ListNode*)malloc(sizeof(ListNode)); cinp-; cinp-data.arrtime; cinp-data.worktime。每输入一个进程都插进进程队列,并按arrtime从小到大排序。 (4)自定义时间片大小,int RR;cinRR。 (5)创建执行队列, LinkList H; ListNode *rear; p=(ListNode*)malloc(sizeof(ListNode)); p=NULL; H=p。并且定义一个参考变量flag2!=flag。 (6)定义时间轴,初始化时间轴和执行队列。H=head-next; head-next=head-next-next; rea
显示全部
相似文档