




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z.技术师学院实验报告学院:计算机科学学院专业:计算机科学与技术师班级:成绩:*:组别:组员:实验地点:实验日期:指导教师签名:预习情况操作情况考勤情况数据处理情况实验名称:实验一、进程调度实验一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解二、实验类别综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据构造等多方面的知识三、实验容和步骤1编写并调试一个模拟的进程调度程序,采用最高优先数优先调度算法对五个进程进展调度。 最高优先数优先调度算法的根本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创立进程时确定的,并在整个进
2、程运行期间不再改变。 动态优先数是指进程的优先数在创立进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过*一时限时增加其优先数的值,等等该题根据教师给的代码用Visual C+运行,结果以及分析如下:结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比拟高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。结果分析:当进程cc了一个时间片之后而它已占用 CPU
3、时间已到达所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa按照这种方式一直运行下去:直到:结果分析:当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成。则这时进程调度中还有两个进程:进程aa进程cc结果分析:当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程aa入运行态。当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行态,而当前就绪队列将为空。直到:结果分析:当进程i的CPU占用时间等于所需要的执行时间时,进程cc调度完成,则这时进程调度中已经没有需要调度的进程
4、了,则整个进程调度完成。2、编写并调试一个模拟的进程调度程序,采用轮转法调度算法对五个进程进展调度。 轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。 简单轮转法的根本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片一样。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。将教师给的源程序修改成简单的时间片轮转法流程图如下:进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间已到达所需的运行时间把运行进程插入到下一
5、个队列的队尾插入新的进程开场初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度时间片轮转法#include#include#include#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/时间片长度/typedef struct pcb /进程管理块char name10;/进程名字char state;/进程状态int queue;/进程所在的队列int ntime;/进程需要运行的时间int rtime;/进程已经运行的时间int etime;/进程在本队列可运行的时
6、间片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/*就绪队列,进程插入位置的变量*/int geti()/使用户仅能输入整数char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = n)printf(tf输入不能为空.请重新输入n);fflush(stdin);ch = getchar();while(ch != n)if(ch 9 | ch link | (ps- link-queue - ps-queue) 1) pin
7、sert = ps;elsewhile (ps-link & ps -link-queue != (pfend -queue +2)ps = ps-link;pinsert = ps;void insert()/插入进程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready -queue = 1) /第一队列存在p-link = pfend-link;pfend-link = p;pfend = p;findpos();Elsep-link = ready;ready = p;findpos();void input()/*建立进程控制
8、块函数*/int i,num;printf(n请输入进程的个数:);num = geti();for(i=0; i name);printf(n输入进程运行时间:);p -ntime = geti();printf(n);p-rtime=0;p-state=w;p-queue =1;p-etime = TIME;p-link=NULL;insert();/*调用insert函数*/void disp(PCB *pr)/*建立进程现实函数,用于显示当前进程*/printf(nnamet statet queuet ntimet rtimet在队列可停留时间t n);printf(|%st,pr-
9、name);printf( |%ct,pr-state);printf( |%dt,pr-queue);printf( |%dt,pr-ntime);printf( |%dt,pr-rtime);printf( |%dt,pr-etime);printf(n);void check()/*建立进程查看函数*/PCB *pr;printf(n *当前正在运行的进程是:%s,ready-name);/*显示当前运行的进程*/disp(ready);pr= ready -link;printf(n*当前就绪队列状态为:n);/*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr
10、=pr-link;void sort()/调整进程队列if(!ready-link |ready-queue link-queue) return;p = ready -link;ready -link = pinsert -link;pinsert -link = ready;pinsert = ready;ready = p;if (ready & ready - queue = pinsert -queue)findpos();void addnew()/添加新的进程if(ready -queue != 1)(ready - queue)+;ready-etime *= 2;ready
11、- state=w;sort();/*调用sort函数*/input();elseinput();void destroy()/*建立进程撤销函数(进程运行完毕,撤销进程)*/printf(n进程%s已完成.n,ready-name);p = ready;ready = ready-link;free(p);if (ready & ready - queue = pinsert -queue)findpos();void running()/*建立进程就绪函数(进程运行时间到,置就绪状态)*/(ready - rtime)+;ready -etime -;if(ready-rtime = re
12、ady-ntime)destroy();return;else if(ready -etime = 0)int time = 2;(ready - queue)+;for(int i = 2; i != ready-queue; +i)time *= 2;ready-etime = time;ready - state=w;sort();/*调用sort函数*/void main()char ch;input();while(ready != NULL)printf(nThe e*ecute name:%sn,ready -name);ready -state = R;check();runn
13、ing();printf(n按i键添加新进程.按其他任意键继续运行.);fflush(stdin);ch = getchar();if (ch = i| ch=I)addnew();printf(nn 进程已经完成n);getchar();运行结果如下:根据题意输入五个进程按任意键继续四、实验问题及原因(1)本次试验,思路设计不难在这个多级反应的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来说明新插入的队列的位置。(2)在建立优先数就绪队列时主要运用,链表插入模型。但是由于此题是从建立、到完成一个就绪对列,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【英语】阅读理解记叙文知识点总结
- 《我们的日子》:“状元”暖男的家人做对了哪些
- 2025-2030年中国两用清洁刷项目投资可行性研究分析报告
- 环卫车辆项目可行性研究报告(立项备案模板范文)
- 数字化时代“网络教研”共同体构建与教师教研能力自主提升策略
- 2025年中国螺旋埋弧焊管行业市场调查研究及投资战略研究报告
- 浙江智能电子产品项目可行性研究报告
- 挂车车锁行业市场发展及发展趋势与投资战略研究报告
- 2025年USB魔灯项目投资可行性研究分析报告
- 小商品批发市场建设项目可行性研究报告建议书
- 科雷氏骨折史密斯氏骨折培训课件
- 卫生院基本药物采购供应管理制度
- 抽水蓄能辅助洞室施工方案
- 数据结构英文教学课件:chapter7 Searching
- 护理核心制度及重点环节-PPT课件
- 夹套管现场施工方法
- 部编版语文五年级下册形近字组词参考
- 第三章走向混沌的道路
- 化探野外工作方法及要求
- 2006年事业单位工资改革工资标准表及套改表2
- 江苏省特种设备安全条例2021
评论
0/150
提交评论