操作系统实验二

上传人:壹****1 文档编号:561672153 上传时间:2022-09-10 格式:DOCX 页数:7 大小:244.52KB
返回 下载 相关 举报
操作系统实验二_第1页
第1页 / 共7页
操作系统实验二_第2页
第2页 / 共7页
操作系统实验二_第3页
第3页 / 共7页
操作系统实验二_第4页
第4页 / 共7页
操作系统实验二_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《操作系统实验二》由会员分享,可在线阅读,更多相关《操作系统实验二(7页珍藏版)》请在金锄头文库上搜索。

1、实验报告【实验名称】进程调度(二)实验目的】进一步巩固和加深处理机调度的概念与实现方法实验原理】在分时系统中,最简单也是最常用的是基于时间片的轮转(round roobjrRR) 调度算法。该算法采用了非常公平的处理机分配方式,即让就绪队列上的每个进 程每次仅运行一个时间片。如果就绪队列上有n个进程,则每个进程每次大约都 可以获得1/n的处理机时间。实验内容】设计按时间片轮转调度算法。数据结构与符号说明:struct PCB/进程名/到达时间/服务时间/完成时间/是否完成的标志 /剩余服务时间 /周转时间char name20; int arrivetime; int servicetime;

2、 int finishtime; int sign;int servicetime1; float turnaroundtime;float weightedturnaroundtime/带权周转时间processN;int n; /全局变量,进程个数 int t ime全局变量,当前时间 int RR; /全局变量,时间片流程图:源程序(附注释)/* 操作系统实验 进程调度(二)时间片轮转调度算法*/#define N 20 #include struct PCB/进程名/到达时间/服务时间/完成时间/是否完成的标志 /剩余服务时间 /周转时间char name20; int arrivet

3、ime; int servicetime; int finishtime; int sign;int servicetime1; float turnaroundtime;float weightedturnaroundtime/带权周转时间 processN;int n; /全局变量,进程个数 int t ime全局变量,当前时间 int RR; /全局变量,时间片 void SJP()时间片轮转调度法 int i,j;printf总进程数:);scanf(%d,&n);printf时间片:);scanf(%d,&RR);printf(=n);for(i = 1;i = n;i+) /收集进

4、程信息printf (输入进程的信息进程名到达时间服务时间)n);scanf(%st%dt%d,& processi.name,& processi.arrive time,& processi.se输ice ti me);/ 入进程名、到达时间、服务时间processi.service timel=processi.serv 剩余服务时/间=总服务时间 processi.sign=0;/标志为0,该进程未完成processi. turnaround time = 0;/殳置周转时间初始为 0processi.weightedturnaroundtime = 0; /设置带权周转时间初始为0f

5、or(i = 1;i = n; i+)for(j = i + 1;j = n; /按照各进程到达的时间升序对进程排序int flag=1;int finishcount=0;int count = 1;int count2 = 1; while(finishcount n) flag = 0;if(processj.arrive time processi.arriV项小于F)/项则进行交换, process0留空作为交换介质process0=processj; processj=processi;processi=process0;time = processl.arrivet获取第一个进程

6、到达的时间作为初始时刻/记录完成的进程数/记录调度进程的次数/当还有未调度的进程时/标志就绪队列中是否还有进程/时间片轮转调度法 for(i = 1;i = processi.arriveti当e)/ 前未完成的进程还需服务的时间少于等于一个时间片flag = 1; count+;t ime = t ime + processi.service t当前时间加上剩余服务时 间processi.sign =标1记;/该/进程已被处理 processi.finisht=imteime; /标记此刻为该进程的完成时 间printf(%4s%7d%10d%10d%10dn,processi.name,t

7、ime-processi.servicetime1,processi.servi cetime1,0,time);processi.servicetime1 = 0; else if(processi.servicetime1 RR & time = processi.arrivetime)/ 当前未完成的进程还需服务时间至少大于一个时间片flag = 1; count+;t ime = time + RR当前时间加上时间片processi.servicetimel -=剩余服务时间减去时间片,得到新 的剩余服务时间printf(%4s%7d%l0d%l0d%l0dn,processi.nam

8、e,time-RR,RR,processi.servicetimel,time);if(processi.sign = l) finishcount+; /该进程已经处理完毕if(flag = 0 & finishcount /n还有没执行的进程,且没进入就就绪队列 for(i = l;i = n;i+)if(processi.sign =如= 果0)该/进程还未处理time = processi.arrive t当前/时间变更为进程的到达时 间break;printf(进程名到达时间 服务时间完成时间周转时间带权周转时间n);/输出进程处理信息for(i = 1; i = n; i+)pro

9、cessi .tu rnaroundtimprocessi.finishtimeocessi.arrive t 周转时间 = 完成时间-到达时间process i . weightedturnaroundtime = processi.turnaroundtime / processi.serviceti带权周转时间=周转时间/服务时间/输出信息printf(%4s%9d%10d%10d%10.2f%10.2fn,processi.name,processi.arrivetime,processi.serv icetime,processi.finishtime,processi.turnar

10、oundtime,processi.weightedturnaroundtime);int main()prin tf(时间片轮转调度算法n); printf(=n); SJP(); 时/间片轮转调度法 return 0; 运行结果: 初值:扁完成时a5完成时a2ELIW芻詹鬲完成时间A03134JHH4JDH时间完成时间714开始13占齋薯扁卿朦日論完咸时间1114黠霜犒扁覊顋扁完咸时间1015雷葬猪霜需时帶痛聽黑C 151时间完成时间916E寸謙17开:1G元成时可17到达时间Q12报务时间完成时间周转时间带权周转时间415121G91715.00 丄丄.00 14J0013.039_753673_593_aa3.25当RR = 4时,输出结果:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号