




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告实验一:进程调度算法一、实验目的1利用高级语言实现三种不同及进程调度算法:短作业优先算法、时间片轮转调度算法和优先级调度算法。2通过实验理解有关进程控制块,进程队列等的概念。二、实验原理各调度算法思想:1. 先来先服务算法(FCFS):按照进程进入就绪队列的先后次序来分配CPU,一旦一个进程占有CPU,就一直运行下去,知道该进程完成工作,才释放CPU。2. 时间片轮转算法:系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择队列中的第一个进程执行,且仅能执行一个时间片,在使用完一个时间片后,即使进程并未完成其运行,也必须将CPU交给下一个进程;如果一个时间片未使用完
2、就完成了该进程,则剩下的时间分配给下一个进程。3. 优先权调度算法;在创建进程时就确定优先权,确定之后在整个程序运行期间不再改变,根据优先级排列,系统会把CPU分配给优先权最高的进程。三、 实验步骤、数据记录及处理1、 算法流程抽象数据类型的定义:PCB块结构体类型struct PCBint name;int arrivetime; /到达时间int servicetime; /服务时间/int starttimemax; /开始时间 int finishtime; /完成/结束时间 int turntime; /周转时间 int average_turntime; /带权周转时间int si
3、gn; /标志进程是否完成int remain_time; /剩余时间int priority; /优先级pcbmax;主程序的流程以及各程序模块之间的层次(调用)关系:主程序中从键盘得到进程的数量,创建PCB,调用layout()函数显示选择界面。Layout()函数中选择相应的算法并调用相关函数如:FCFS()、time_segment();、Priority(),这三个函数分别实现先来先服务算法,时间片轮转算法和优先级算法,最后分别打印。程序流程图:2、运行结果分析:先来先服务算法:时间片轮转算法:优先级算法: 西安工业大学实验报告 四、总结与体会经过此次实验,我觉得具体写代码就是对解题
4、步骤的一个细化,也发现了已往课程中学习的不足,以便日后改正。附录:源代码#include#include#define max 50struct PCBint name;int arrivetime; /到达时间int servicetime; /服务时间/int starttimemax; /开始时间 int finishtime; /完成/结束时间 int turntime; /周转时间 int average_turntime; /带权周转时间int sign; /标志进程是否完成int remain_time; /剩余时间int priority; /优先级pcbmax;void in
5、it(int n) /初始化for(int i=0;in;i+)pcbi.arrivetime=0; pcbi.servicetime=0; /pcbi.starttime=0; pcbi.finishtime=0; pcbi.turntime=0; pcbi.average_turntime=0;pcbi.remain_time=0;pcbi.sign=0;pcbi.priority=0;void creat(int n) /创建PCBint i;for(i=1;i=pcb0.arrivetime)pcb0.finishtime=pcb0.servicetime+starttime;else
6、pcb0.finishtime=pcb0.finishtime+pcb0.servicetime;for(int i=1;ipcbi.arrivetime)pcbi.finishtime=pcbi-1.finishtime+pcbi.servicetime;elsepcbi.finishtime=pcbi.arrivetime+pcbi.servicetime;pcbi.turntime=pcbi.finishtime-pcbi.arrivetime;pcbi.average_turntime=pcbi.turntime/pcbi.servicetime;void print_FCFS(int
7、 n)/printf(进程名,到达时间t服务时间t完成时间t周转时间t周转时间:,%st%dt%dt%dt%dt%dt);printf(进程名 到达时间 服务时间 完成时间 周转时间 带权周转时间:n);for(int i=0;in;i+)printf(%d ,%d ,%d ,%d ,%d ,%d , ,pcbi.arrivetime ,pcbi.servicetime ,pcbi.finishtime ,pcbi.turntime ,pcbi.average_turntime);printf(n);void time_segment(int n) /时间片轮转int i,j
8、;int T; /时间片int flag=1; /就绪队列中是否还有进程/int time=pcb0.arrivetime; /当前的时间int time=0;int sum=0; /已经完成的进程数/按各进程的arrivetime进行升序排列for(i=1;i=n;i+)for(j=i+1;j=n;j+) if(pcbj.arrivetimepcbi.arrivetime)pcb0=pcbj;pcbj=pcbi;pcbi=pcb0; /printf(输出排序结果:n);/for(i=1;i=n;i+) /检查排序是否正确 /printf(%dt,);printf(输入时间片
9、:n);scanf(%d,&T);/printf(n运行的进程名 开始运行时间 运行时间 剩余服务时间 结束时间n);while(sumn) flag=0; /当前就绪队列中没有进程for(i=1;i T)flag=1;time=time+T;pcbi.remain_time=pcbi.remain_time-T;/printf(%10d%16d%12d%12d%12dn,,time-T,T,pcbi.remain_time,time);/没有完成的进程需要的时间小于或等于一个时间片else if(pcbi.remain_time = T)flag=1; /加入就绪队列tim
10、e=time+pcbi.remain_time;pcbi.finishtime=time; pcbi.sign=1;/printf(%10d%16d%12d%12d%12dn,,time-pcbi.remain_time,pcbi.servicetime,0,time); pcbi.remain_time=0;if(pcbi.sign=1) sum+;/forif(flag=0&sumn) / 还有没执行的进程,且没进入就就绪队列 for(i=1;i=n;i+)if(pcbi.sign=0) time=pcbi.arrivetime;break;/whilevoid prin
11、t_time(int n)for(int i=0;in;i+)printf(n进程名 服务时间 完成时间n);printf(%6d%10d%10d,pcbi+1.name,pcbi.servicetime,pcbi.finishtime);printf(n);void Priority(int n)int i,j;int time = pcb1.arrivetime;/按各进程的arrivetime进行升序排列,最早到达的进程先执行for(i=1;i=n;i+)for(j=i+1;j=n;j+) if(pcbj.arrivetime pcbi.arrivetime)pcb0=pcbj;pcbj
12、=pcbi;pcbi=pcb0; /printf(输出排序结果:n); /for(i=1;i=n;i+) /检查排序是否正确 /printf(%dt,);printf(n进程名 服务时间 优先级 完成时间n);/先到达的进程第一个执行if(i=1)pcbi.finishtime=pcbi.arrivetime + pcbi.servicetime;time =pcbi.arrivetime + pcbi.servicetime;printf(%6d%10d%10d%10d,,pcbi.servicetime,pcbi.priority,pcbi.finish
13、time);printf(n);/测试第一个进程输出正确/*printf(输出第一个程序的:n);printf(名称 到达时间 完成时间n);printf(%4d%8d%8d,,pcbi.arrivetime,pcbi.finishtime);printf(n); */i+;/按各进程的priority进行降序排列,优先级最高的进程先执行for(i=2;i=n;i+)for(j=i+1;j pcbi.priority)pcb0=pcbj;pcbj=pcbi;pcbi=pcb0;for(i=2;i=n;i+)time = time + pcbi.servicetime;pcbi
14、.finishtime = time;printf(%6d%10d%10d%10d,,pcbi.servicetime,pcbi.priority,pcbi.finishtime);printf(n);/for/voidvoid layout(int n)int ch=0;printf(tt*调度算法*n);printf(tt1.先来先服务n);printf(tt2.时间片轮转n);printf(tt3.优先级n);printf( 选择算法:n);scanf(%10d,&ch);switch(ch)case 1: FCFS(n); print_FCFS(n); break;case 2: time_segment(n); print_time(n); break;case 3: Pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60268-7:2025 CMV EN Sound system equipment - Part 7: Headphones and earphones
- 2024年河北省隆化县人民医院公开招聘护理工作人员试题带答案详解
- 洪洞教编初中数学试卷
- 医院项目管理课件
- 医院课件教学课件
- 《网络综合布线》教案 项目3实训任务 实施工程预算和撰写采购招标文件
- 健康管理中心课件内容
- 中国无线鼠标行业发展监测及投资战略规划研究报告
- 2021-2026年中国风光互补控制器市场竞争格局及投资战略规划报告
- 2025-2030年中国制动鼓行业市场供需态势及发展前景研判报告
- 2023-2024学年深圳市盐田区数学四下期末学业水平测试试题含解析
- 虚拟股权激励方案(模板)
- 2024-2029年中国管道运输行业发展分析及发展前景与投资研究报告
- 泰文租房合同
- 建筑维修与保养方法
- 金华出租车从业资格证模拟考试题
- (完整)中医症候积分量表
- 劳务外包三方协议
- 水果礼盒创业计划书
- 水产养殖行业营销策略方案
- 厂房分布式光伏系统施工进度计划横道图
评论
0/150
提交评论