- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
处理器调度
2013--2014学年 第 三 学期
实验项目名称 处理器调度 实验日期 2014年11月13号 实验成绩 实验类型 设计型
实
验
目
的
与
要
求 目的:在采用多道程序设计的系统中,往往若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定那些进程优先占有处理器。本实习模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作。
要求:
1.理解本实验中调度算法的说明。
2.根据调度算法的说明,画出相应的程序流程图。
3.按照程序流程图,编程并实现。
实
验
原
理
设计一个按时间片轮转法实现处理器调度的程序。
实
验
环
境
C语言设计
实
验
方案设计(2) 每次运行之前,为每个进程任意确定它的“要求运行时间”。
(3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另 用一标志单元记录轮到运行的进程。例如,当前轮到Q2执行,则如下图1.4所示。
标志单元
K2
K1
Q1
K2
Q2
K3
Q3
K4
Q4
K5
Q5
K2
K3
K4
K5
K1
2
3
1
2
4
1
0
0
0
0
R
R
R
R
R
PCB1
PCB2
PCB3
PCB4
PCB5
图1.4 PCB队列
(4)处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位的时间。
(5) 进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间(已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。
(6) 若“就绪”状态的进程队列不为空,则重复上面的(4)和(5) 的步骤,直到所有的进程都成为“结束”状态。
(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进程队列的变化。
(8) 为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中的进程名以及进程控制块的动态变化过程。
调
试
过
程
及
实
验
结
果
总
结 通过本次实验,我对时间片轮转的调度思想有了进一步的了解,通过动手实现其调度算法,更加深刻的理解了时间片轮转调度算法与其他几种算法的不同和优点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。
附
录
#includestdio.h
#includestdlib.h
#includemalloc.h
#includestring.h
typedef struct node
{
char name[2]; //进程名
int roundtime; //轮转时间片
int runnedtime; //已运行时间
int needtime; //还需运行时间
int count; //计数器
char state; //进程状态
struct node *next; //链指针
}PCB;
PCB *ready=NULL; //队头指针(等待调用)
PCB *run=NULL; //记录正在运行的结点的指针
PCB *end=NULL; //记录已经运行完成的结点的指针
PCB *tail=NULL; //队尾指针
int n; /*输出就绪进程队列*/
void show()
{
PCB *p=ready; //p指向头指针
if(ready!=NULL)
printf(进程名 已运行时间 还需时间 计数器 时间片 状态\n);
while(p!=NULL)
{
printf( %s %d
文档评论(0)