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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

进程调度实验报告.docx

1、进程调度实验报告 操作系统进程调度实验报告 姓名: 何绍金 班级:自动化1202 学号:201203870408 指导教师: 张健 2014年10月10日 一实验题目编写采用简单轮转调度算法模拟进程调度程序。二. 实验内容1.实验要求(1)简单轮转算法的基本思想所有就绪程序进程按FCFS 排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU 的时间片相同。即将CPU 的处理时间划分成一个个相同的时间片,就绪队列的诸进程轮流运行一个时间片。当一个时间片结束时,如果正在运行的进程用完它的时间片后还未完成,就强迫该进程让出CPU,把它送回就绪队列的末尾,等待下一次的调度。同时,进程调度又去选

2、择就绪队列中的队首进程,分配给它一个时间片,以投入运行。直至所有的进程运行完毕。(2)实验分析a.设实验有六个进程,每个进程用一个进程控制块PCB 来代表。b.为每个进程任意确定一个要求运行的时间。c.按照进程输入的先后顺序排列成一个队列。再设一个队首指针指向第一个到达进程的首地址。d.执行处理机调度时,开始选择队首的第一个进程运行。另外,再设一个当前运行进程的指针,指向当前正在运行的进程。e.进程运行一次后,以后的调度则将当前指针下移一个位置,指向下一个进程。同时还应该判断进程的要求运行时间是否等于已运行时间。如果不等,则等待下一轮的运行,否则将该进程的状态置为完成态C,并退出循环队列。f.

3、如果就绪队列不空,则重复上述的d 和e 直到所有的进程都运行完。g.考虑到代码的可重用性,轮转法调度程序和最高优先级优先调度是调用同一个模块进行输出。h.在所设计的调度程序中,包含显示语句,显示每次选中的进程的名称及运行一次后队列的变化情况。i.实现流程图。三.实验流程图 2.程序源代码(C+语言) 按流程图编制的源代码如下所示:#include #include #include #include typedef struct node char name10; int prio; int round; int cputime; int ntime; int count; char stat

4、e; struct node *next; PCB; PCB *finish,*ready,*tail,*run; /队列指针int N; /进程数void firstin() run=ready; /就绪队列头指针赋值给运行头指针 run-state=R; /进程状态变为运行态 ready=ready-next; /就绪队列头指针后移到下一进程 /输出标题函数void prt1(char a) /优先级法 if(toupper(a)=P) cout endl; cout进程名占用CPU时间到完成还要的时间轮转时间片状态 endl; /进程PCB输出void prt2(char a,PCB *

5、q) if(toupper(a)=P) /优先级法的输出 coutname cputime ntime round statenext; p=finish; /输出完成队列的PCB while(p!=NULL) prt2(algo,p); p=p-next; getchar(); /按住任意键继续 void insert(PCB *q) /时间片轮转的插入算法 PCB *p1,*s,*r; s=q; /待插入的PCB指针 p1=ready; /就绪队列头指针 r=p1; /*r做pl的前驱指针 while(p1!=NULL) if(p1-roundround) r=p1; p1=p1-next

6、; if(r!=p1) r-next=s; s-next=p1; else s-next=p1; /否则插入在就绪队列的头 ready=s; void create(char alg) /优先级创建初 PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; cout输入进程名及其需要运行的时间:endl; for(i=1;ina; cintime; strcpy(p-name,na); p-cputime=0; p-ntime=time; p-state=W; p-round=0; if(ready!=NULL) in

7、sert(p); else p-next=ready; ready=p; cout输入进程名及其需要运行的时间:next; run-state=R; void timeslicecycle(char alg) while(run!=NULL) run-cputime=run-cputime+10; run-ntime=run-ntime-10; run-round=run-round+10; if(run-ntimenext=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); else run-state=

8、W; insert(run); firstin(); prt(alg); 1/主函数void main() char algo=P; /算法标记 coutN; /输入进程数 create(algo); /创建进程 timeslicecycle(algo); 3.程序运行结果 运行程序得到如下结果: (1)输入进程数,并分别确定每个进程的要求运行时间。(2)数据输入完成后的初始状态,进程标识为x1的进程首先得到调度,运行10个时间单位。(3)进程标识为x1的进程运行完成,进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行 10个时间单位。(4)进程标识为x2的进程运行完成,从运行

9、态“R”改为完成态“F”;进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行 10个时间单位。(5)进程标识为x3的进程由于还未运行完被置于队末,等待下一次调度,从运行态“R”改为就绪态“W”;进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行 10个时间单位。(6)进程标识为x4的进程运行完成,从运行态“R”改为完成态“F”;进程标识为x5的进程得到调度,从就绪态“W”改为运行态“R”,由于进程x4只用了5个单位时间,所以x5只运5个时间单位。 (7)进程标识为x5的进程被置于队末,进程标识为x6的进程得到调度,从就绪态“W”改为运行态“R”,运行 10个时间

10、单位。(8)进程标识为x6的进程被置于队末,进程标识为x1的进程再次得到调度,从就绪态“W”改为运行态“R”,运行 10个时间单位。(9)进程标识为x1的进程运行完成,进程标识为x3的进程再次得到调度,从就绪态“W”改为运行态“R”,运10个时间单位。(10)进程标识为x3的进程运行完成,进程标识为x5的进程再次得到调度,从就绪态“W”改为运行态“R”,只运5个时间单位。 (11)进程标识为x5的进程运行完成,进程标识为x6的进程再次得到调度,从就绪态“W”改为运行态“R”,运10个时间单位。 (12)进程标识为x6的进程运行完成,所有进程全部运行结束,均处于完成态“F”。3.实验小结 经过本次实验设计,把教材中的理论知识转化为实践,在一定程度上加深了我对时间片轮转调度算法的理解,同时也提高了我的动手编程能力。虽然在编程的过程中,遇到了很多的困难。但同时握了很多东西。更让我明白了操作系统中的一个核心的问题就是进程调度问题。

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

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