ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:350.47KB ,
资源ID:9421827      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9421827.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(处理机调度实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

处理机调度实验报告.docx

1、处理机调度实验报告深 圳 大 学 实 验 报 告 课程名称: 操作系统 试验项目名称: 处理机调度 学院: 计算机与软件学院 专业: 软件工程 指导老师: 汇报人: 学号: 班级: 试验时间: 5 月 7 日 试验汇报提交时间: 5 月 22 日 教务处制一、 试验目与要求: 试验目: 模拟在单处理器多进程操作系统CPU调度。帮助学生掌握多个CPU调度算法知识原理和运作机制。本试验为模拟试验, 不要求实现真正进程创建与进程调度。关键实现多种调度算法。试验要求:1、阅读了解例程, 掌握例程运作步骤。运行例程, 了解先来先服务算法调度原理和运行结果。2、参考先来先服务算法, 尝试实现其她四种调度算

2、法: 短作业优先、 高响应比、 时间片轮转、 多级反馈队列。要求最少实现一个算法。a)除了多级反馈队列, 其她算法采取非抢占调度b)短作业优先算法使用例题一数据或程序内置数据, 要求运行结果给出调度次序、 完成时间、 周转时间、 带权周转时间c)高响应比算法使用例题二数据, 要求运行结果给出调度次序、 完成时间、 周转时间、 带权周转时间d)时间片轮转算法能够使用程序内置数据, 要求运行结果给出每个时间片是被哪个进程使用, 每个进程完成时, 要修改状态并输出提醒。e)多级反馈队列算法使用例题三数据, 要求运行结果给出正确进程调度次序和过程描述。二、 方法、 步骤: (说明程序相关算法原理或知识

3、内容, 程序设计思绪和方法, 能够用步骤图表述, 程序关键数据结构设计、 关键函数之间调用关系等)先来先服务算法: 按抵达时间前后, 选择最先来作业最先实施实现思想: 对作业抵达时间按大小进行排序, 然后按次序实施短作业优先算法: 在后备队列中, 选择服务时间最短作业最先实施实现思想: 对作业按抵达时间排序, 接着对抵达作业, 即后备队列中作业按服务时间排序, 取服务时间最小作业最先实施高响应比算法: 对作业优先权(响应时间/要求服务时间)进行计算, 对优先权最高最先实施实现实现: 计算后备队列中作业优先权, 并排序, 优先权最高最先实施时间片轮转算法: 将全部就绪进程按先来先服务排成队列,

4、把CPU分配给队首进程, 进程只实施一个时间片, 时间片用完后, 将已使用时间片进程送往就绪队列末尾, 分配处理机给就绪队列中下一进程实现思想: 将作业按抵达时间排序, 在后备队列中选择第一个作业, 把CPU分配给它, 实施一个时间片, 时间片用完后, 将作业送往后备队列末尾, 把CPU分配给下一个作业, 直到全部作业完成多级反馈队列调度算法: 设置多个就绪队列, 各个队列优先级逐一降低, 各个队列时间片逐一增加, 优先级越高队列实施时间片就越短, 通常时间片按倍增规则, 每个新进程首优异入第一个队列, 遵照FCFS, 在目前队列时间片内, 进程若能完成, 退出, 进程若未完成, 降级到第二个

5、队列, 一样遵照FCFS依次类推, 若在第二个队列时间片内仍未完成, 再降级到第三个队列实现思想: 设置多个就绪队列, 各个队列优先级逐一降低, 各个队列时间片逐一增加, 优先级越高队列实施时间片就越短, 通常时间片按倍增规则, 比如, 第二队列时间片要比第一个队列时间片长一倍, , 第i+1个队列时间片要比第i个队列时间片长一倍, 整合了时间片、 FCFS、 优先级三种机制。三试验过程及内容: (对程序代码进行说明和分析, 越具体越好, 代码排版要整齐, 可读性要高)#include stdio.h#include/#include#include#include/#define NULL

6、0#define getpch(type)(type*)malloc(sizeof(type)typedef struct pcb PCB;struct pcb /定义进程控制块PCB int id; /标示符 char name10; /名称 int time_start; /抵达时间 int time_need; /服务时间 int time_left; /剩下运行时间 int time_used; /已使用时间 char state; /进程状态;/*系统函数void _sleep(int n) clock_t goal; goal=(clock_t)n*CLOCKS_PER_SEC+c

7、lock(); while(goalclock();char _keygo() char c; printf(按任意键继续n); c=getchar(); return c;/*用户函数int time_unit=2;int num=5; /实际进程数量PCB pcbdata10= /例程内置数据 1000,A,0,4,4,0,R, 1001,B,1,3,3,0,R, 1002,C,2,5,5,0,R, 1003,D,3,2,2,0,R, 1004,E,4,4,4,0,R,;int num1=4;PCB pcbdata110= /例题一数据 1000,Job1,1,9,9,0,R, 1001,

8、Job2,1,16,16,0,R, 1002,Job3,1,3,3,0,R, 1003,Job4,1,11,11,0,R,;int num2=4;PCB pcbdata210= /例题二数据 1000,P1,10,8,8,0,R, 1001,P2,12,12,12,0,R, 1002,P3,14,4,4,0,R, 1003,P4,16,6,6,0,R,;int num3=4;PCB pcbdata310= /例程三数据 1000,A,0,7,7,0,R, 1001,B,5,4,4,0,R, 1002,C,7,13,13,0,R, 1003,D,12,9,9,0,R,;int ready10;

9、/就绪队列, 存放进程在pcbdata中位置int order10; /统计排序使用哪个数值作为排序对象void intput() int i; printf(进程总数为: ); scanf(%d,&num); for(i=0;inum;i+) pcbdatai.id=1000+i; printf(输入第%d个进程名: ,i+1); scanf(%s,&pcbdatai.name); printf(输入第%d个进程抵达时间: ,i+1); scanf(%d,&pcbdatai.time_start); printf(输入第%d个进程服务时间: ,i+1); scanf(%d,&pcbdatai

10、.time_need); pcbdatai.time_left=pcbdatai.time_need; printf(n); pcbdatai.time_used=0; pcbdatai.state=R; /*调度函数void FCFS() int i,j,temp; double k; for(i=0;inum;i+) orderi=pcbdatai.time_start; readyi=i; for(i=0;inum;i+) /按抵达时间排序 for(j=i+1;jorderj) temp=orderi; orderi=orderj; orderj=temp; temp=readyi; r

11、eadyi=readyj; readyj=temp; printf(-先来先服务算法调度: 非抢占, 无时间片-n); temp=pcbdataready0.time_start; for(i=0;inum;i+) printf(第%d个进程-%s,i+1,pcbdatareadyi.name); printf(本进程正在运行); _sleep(1); printf(运行完成n); temp+=pcbdatareadyi.time_need; j=temp-pcbdatareadyi.time_start; k=(float)j/pcbdatareadyi.time_need; printf(

12、完成时间-%d,周转时间-%d,带权周转时间-%.1fn,temp,j,k); printf(-全部进程调度完成-n);void SJF() int i,j,temp,l,temp_num; double k; int time=0; for(i=0;inum1;i+) orderi=pcbdata1i.time_start; readyi=i; for(i=0;inum1;i+) /按抵达时间排序 for(j=i+1;jorderj) temp=orderi; orderi=orderj; orderj=temp; temp=readyi; readyi=readyj; readyj=tem

13、p; printf(-短作业算法调度: 非抢占, 无时间片-n); int t_ready10; /就绪队列, 存放进程在pcbdata中位置 int t_order10; /统计排序使用哪个数值作为排序对象 for(i=0;inum1;i+) t_orderi=pcbdata1readyi.time_need;/服务时间作为排序对象 t_readyi=readyi; time=order0; for(l=0;lnum1;l+) /判定抵达进程数, 用temp_num存放 for(i=0;inum&pcbdata1readyi.time_start=time;i+) temp_num=i+1;

14、 /把抵达进程按服务时间大小进行排序 for(i=0;itemp_num;i+) for(j=i+1;jt_orderj&t_orderj!=0|t_orderi=0) temp=t_orderi; t_orderi=t_orderj; t_orderj=temp; temp=t_readyi; t_readyi=t_readyj; t_readyj=temp; printf(第%d个进程-%s,l+1,pcbdata1t_ready0.name); printf(正在运行); _sleep(1); printf(运行完成n); time+=pcbdata1t_ready0.time_need

15、; j=time-pcbdata1t_ready0.time_start; k=(float)j/pcbdata1t_ready0.time_need; t_order0=0; printf(完成时间-%d,周转时间-%d,带权周转时间-%.1fn,time,j,k); printf(-全部进程调度完成-n);void HRF() int i,j,temp,l,temp_num; double k; int time=0; for(i=0;inum2;i+) orderi=pcbdata2i.time_start; readyi=i; for(i=0;inum2;i+) /按抵达时间排序 fo

16、r(j=i+1;jorderj) temp=orderi; orderi=orderj; orderj=temp; temp=readyi; readyi=readyj; readyj=temp; printf(-高响应比算法调度: 非抢占, 无时间片-n); int t_ready10; int t_order10; for(i=0;inum2;i+) t_orderi=1; t_readyi=readyi; time=order0; for(l=0;lnum2;l+) /判定抵达进程数 for(i=0;inum&pcbdata2readyi.time_start=time;i+) temp

17、_num=i+1; for(i=0;itemp_num;i+) /计算已抵达进程优先权 if(t_orderi)t_orderi=(time-pcbdata2t_readyi.time_start+ pcbdata2t_readyi.time_need)/pcbdata2t_readyi.time_need; for(i=0;itemp_num;i+) /按优先权排序 for(j=i+1;jtemp_num;j+) if(t_orderit_orderj) temp=t_orderi; t_orderi=t_orderj; t_orderj=temp; temp=t_readyi; t_rea

18、dyi=t_readyj; t_readyj=temp; printf(第%d个进程-%s,l+1,pcbdata2t_ready0.name); printf(正在运行); _sleep(1); printf(运行完成n); time+=pcbdata2t_ready0.time_need; j=time-pcbdata2t_ready0.time_start; k=(float)j/pcbdata2t_ready0.time_need; t_order0=0; printf(完成时间-%d,周转时间-%d,带权周转时间-%.1fn,time,j,k); printf(-全部进程调度完成-n

19、);void Timeslice() int i,j,temp,l,temp_num; double k; int time=0; int done=0; for(i=0;inum;i+) orderi=pcbdatai.time_start; readyi=i; for(i=0;inum;i+) /按抵达时间排序 for(j=i+1;jorderj) temp=orderi; orderi=orderj; orderj=temp; temp=readyi; readyi=readyj; readyj=temp; printf(-时间片轮转算法调度: 非抢占, 时间片大小为2-n); int

20、t_ready10; for(i=0;inum;i+) t_readyi=readyi; time=order0; for(l=0;donenum;l+) /判定抵达进程数 for(i=0;inum&pcbdatareadyi.time_start=time;i+) temp_num=i+1; if(time!=order0) /将已使用时间片进程, 即第一个移到队列末尾 for(i=1;itemp_num;i+) temp=t_readyi; t_readyi=t_readyi-1; t_readyi-1=temp; if(pcbdatat_ready0.state!=F) printf(第

21、%d个时间片被进程%s使用,l+1,pcbdatat_ready0.name); printf(正在运行n ); _sleep(1); printf(时间片使用完, 所需时间%d,pcbdatat_ready0.time_left); time+=2; pcbdatat_ready0.time_used+=2; pcbdatat_ready0.time_left-=2; printf(使用时间%d,还需时间%d,2,pcbdatat_ready0.time_left); /判定进程是否结束 if(pcbdatat_ready0.time_left=0) printf(进程%s结束n,pcbda

22、tat_ready0.name); done+; pcbdatat_ready0.state=F; else printf(进程%s就绪n,pcbdatat_ready0.name); printf(-全部进程调度完成-n);void MRLA() int i,j,temp,l,temp_num,temp_num2; double k; int time=0; /系统时间 int done=0; /已完成进程 int t_ready10; int queue10; /进程对应队列 int qtime10; /进程对应时间片 for(i=0;inum3;i+) orderi=pcbdata3i.

23、time_start; readyi=i; queuei=1; qtimei=0; for(i=0;inum3;i+) /按抵达时间排序 for(j=i+1;jorderj) temp=orderi; orderi=orderj; orderj=temp; temp=readyi; readyi=readyj; readyj=temp; printf(-多级反馈算法调度: 抢占式, 时间片大小为2-n); for(i=0;inum3;i+) t_readyi=readyi; time=order0; for(l=0;donenum3;l+) /判定抵达进程数 for(i=0;inum3&pcbdata3readyi.time_start=time;i+) temp_num=i+1; if(time!=order0) for(i=0;itemp_num;i+) /按队列优先级排序 for(j=1;jqueuej&pcbdata3t_readyj.state!=F) temp=queuej-1; queuej-1=queuej; queuej=temp; temp=t_readyj-1; t_readyj-1=t_readyj; t_readyj=temp; temp=qtimej-1; qtimej-1=qtimej; qtimej=temp;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1