设计一个按时间片轮转法实现处理器调度.docx
- 文档编号:9175837
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:9
- 大小:266.69KB
设计一个按时间片轮转法实现处理器调度.docx
《设计一个按时间片轮转法实现处理器调度.docx》由会员分享,可在线阅读,更多相关《设计一个按时间片轮转法实现处理器调度.docx(9页珍藏版)》请在冰豆网上搜索。
设计一个按时间片轮转法实现处理器调度
实验报告
2010 ~2011 学年第1 学期
课程
操作系统原理
实验名称
设计一个按时间片轮转法
实现处理机调度的程序
学生姓名
丁洋洋汪祝炉
程义军张康康
专业班级
08计本
(一)班
指导教师
屠菁
2010 年 11 月
1.实验目的
理解基于时间片轮转的处理机调度算法,更好的掌握算法的思想,结合实验理解算法更直观,深刻具体。
通过对时间片轮转法处理机的调度算法的模拟实验可以清楚的了解处理机是如何调度的,以及加深对进程的执行的过程的了解。
2.实验内容
系统中有若干个进程,实现对时间片轮转法处理机调度算法的模拟,本程序只对进程的运行模拟不实际启动,而是将其运行时间加一,判断要求运行时间与已运行时间是否相等,若相等则表示进程结束,进程退出调度,释放资源。
因只需了解其算法故,本实验只模拟进程的时间片轮转算法不实际运行进程。
3.实验步骤
(1)任务分析
(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。
进程控制块的格式为:
进程名
指针
要求运行时间
已运行时间
状态
其中,进程名——作为进程的标识,假设五个进程的进程名分别为Q1,Q2,Q3,Q4,Q5。
指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。
要求运行时间——假设进程需要运行的单位时间数。
已运行时间——假设进程已经运行的单位时间数,初始值为“0”。
状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。
当一个进程运行结束后,它的状态为“结束”,用“E”表示。
(2)每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。
(3)把五个进程按顺序排成循环队列,用指针指出队列连接情况。
另用一标志单元记录轮到运行的进程。
例如,当前轮到P2执行,则有:
标志单元
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
(4)处理器调度总是选择标志单元指示的进程运行。
由于本实习是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位的时间。
当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片
(5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。
同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。
若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。
此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。
(6)若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为“结束”状态。
(7)在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进程队列的变化。
(8)为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中的进程名以及进程控制块的动态变化过程。
(2)概要设计
本程序主要是实现对时间片轮转法调度算法的模拟,假定系统有五个进程
将五个进程按顺序拍成循环队列,处理器按顺序选择进程执行,当执行后若没有结束则进程的优先级变为最低下论循环时再运行,若结束则退出队列。
程序先用voidInitPCB(Proc&H)函数从键盘输入读取进程需要运行的时间和初始化队列及进程控制块PCB,调用时间片轮转函数voidSJP_Simulator(Proc&H)模拟执行时间片处理机对进程的调度,然后调用voidDispInfo(ProcH)函数输出每次执行的结果。
流程图
时间片轮转算法流程图
(3)详细设计
进程的数据结构如下:
typedefstructPNode{//PCB
structPNode*next;//定义指向下一个节点的指针
charname[10]; //定义进程名,并分配空间
intAll_Time; //定义总运行时间
intRuned_Time; //定义已运行时间
charstate; //定义进程状态Ready/End
}*Proc;//指向该PCB的指针
intProcNum;//总进程个数
主函数main()调用各个子函数实现本程序的功能如:
数据初始化InitPCB(H);,输出此刻的进程状态DispInfo(H),时间片轮转法,SJP_Simulator(H)。
子函数的说明如下:
初始化就绪队列
voidInitPCB(Proc&H){
cout<<"请输入总进程个数:
";
cin>>ProcNum;//进程总个数
intNum=ProcNum;
H=(Proc)malloc(sizeof(PNode));//建立头节点
H->next=NULL;
Procp=H; //定义一个指针
cout<<"总进程个数为"< while(Num--){ p=p->next=(Proc)malloc(sizeof(PNode)); cout<<"进程名总运行时间已运行时间: "; cin>>p->name>>p->All_Time>>p->Runed_Time; p->state='R'; p->next=NULL; } p->next=H->next; } 输出运行中的进程信息 voidDispInfo(ProcH){ Procp=H->next; do{ if(p->state! ='E') //如果该进程的状态不是End的话 { cout<<"进程名: "< "< <<"\t已运行时间: "< <<"\t状态: "< p=p->next; } elsep=p->next; }while(p! =H->next);//整个进程链条始终完整,只是状态位有差异 } 时间片轮转法 voidSJP_Simulator(Proc&H){ cout< intflag=ProcNum;//记录剩余进程数 intround=0;//记录轮转数 Procp=H->next; while(p->All_Time>p->Runed_Time){ //即未结束的进程 round++; cout< p->Runed_Time++; //更改正在运行的进程的已运行时间 DispInfo(H); //输出此时为就绪状态的进程的信息 if(p->All_Time==p->Runed_Time){ //并判断该进程是否结束 p->state='E'; flag--; cout< \n"; } p=p->next; while(flag&&p->All_Time==p->Runed_Time) p=p->next;//跳过先前已结束的进程 } cout< } (4)调试分析: 本次试验主要是实现处理器按照时间片轮转法实现调度,按照设计思想是在设定的时间片内某一进程在时间片内运行,当时间片到后,进入下一个进程再次按照时间片轮转法调度,就按照这个循环一直运行下去,如果某一个进程时间结束就跳出队列,跳向下一个进程,直到所有的进程都结束,本程序结束。 运行程序后,实现了上述所有的功能,虽然只是简单的实现,但是也符合了本次课程设计的基本要求。 在时间片上,进程是按照这个实行调度的,直到所有进程都结束了,那么本程序就结束。 (5)测试结果 (6)使用说明: 程序中数据的输入格式为: 1)输入进程总数 2)输入各进程信息 进程信息的输入格式为: 进程名总运行时间已运行时间 3)输入结束回车运行 4、结果分析与实验体会 时间片轮转算法中,系统将所有的就绪程序按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。 当执行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 一个 按时 轮转 实现 处理器 调度