实验一、进程调度实验报告

上传人:lis****210 文档编号:193703030 上传时间:2023-03-11 格式:DOCX 页数:19 大小:360.39KB
返回 下载 相关 举报
实验一、进程调度实验报告_第1页
第1页 / 共19页
实验一、进程调度实验报告_第2页
第2页 / 共19页
实验一、进程调度实验报告_第3页
第3页 / 共19页
点击查看更多>>
资源描述
广东技术师范学院实验报告学户计算机科学学专业计算机科学与衲级子院: 院 专业:技术(师范)班级:学号:组别:实验日期:一姓名:_ 实验地点:成绩:组员:指导教师签名:预习情况操作情况考勤情况数据处理情况实验名称: 实验一、进程调度实验一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的 理解二、实验类别综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方 面的知识三、实验内容和步骤1.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进 程进行调度。“最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高 的进程。静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定 原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待 的时间超过某一时限时增加其优先数的值,等等该题根据老师给的代码用Visual C+运行,结果以及分析如下:结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc 最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程 aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪 队列的最后。而此时这两个进程的状态都为就绪态。按任-键继续一.-1 The execute numbep:2,MMMM当前正在运行的进程是,m(jnantestatesuperndt inerun t ime!R!2!&!Q1 *当刖就绪队列状态为:statesuperndtineruntimeliCGiu:2!10!1(jnctne:statesuperndtineruntimelibbiu:1i516-键继续结果分析:当进程cc 了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级 大的进程进入运行状态,则该次进入运行态的是进程aa按照这种方式一直运行下去:bbilJ:5:0按任一键继续The execute number:3*当前正在运行的进程是ndtime !1Bqname state super ice: R:2v-u.n t ine当前就绪队列状态为=qnane bbstateilJsuper:1ndtine :5qname! aastatesuperndtime;6runt ime;1直到:The execute number:Itruntime*当前正在运行的进程是,品 qnane st-a-te supei-n dt inehh !B !-3!5i*当前就绪队列状态为:qnane !aastatesuper-3n dt ime i6 i5runtimeqnane !ccstatesuper -3n dt ime :10runtime进程thh已完成.F一键继续 治音菇i A *结果分析:当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成。则这时进程调度中还有两个进程:进程aa进程ccruntimepuntine结果分析:当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程 aa入运行态。当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行 态,而当前就绪队列将为空。直到:The execute nuinbep:21*当前正在运行的进程是工仁(nane state supeindt imerun t ime!cc :R!-6:10:9一*当前就绪队列状态为;进程tccl已完成-按任一檀批续结果分析:当进程i的CPU占用时间等于所需要的执行时间时,进程cc调度完成, 则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行 调度。轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。简单轮转法的基本思想是:所有就绪进程按FCFS排成一个队列,总是把处理机分 配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为 完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进 程运行完毕。将老师给的源程序修改成简单的时间片轮转法流程图如下:时间片轮转法#include#include#include#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/时间片长度/typedef struct pcb/进程管理块char name10;/ 进程名字char state;/进程状态intqueue;/进程所在的队列intntime;/进程需要运行的时间intrtime;/进程已经运行的时间intetime;/进程在本队列可运行的时间片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) pinsert = 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()/*建立进程控制块函数*/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-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=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 - 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 = ready-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 execute name:%sn,ready -name);ready -state = R;check();running();printf (-n按i键添加新进程.按其他任意键继续运行”); fflush(stdin);ch = getchar();if (ch = i| ch=I) addnew();printf(nn进程已经完成n);getchar();运行结果如下:根据题意输入五个进程按任意键继续C:Use rsp c D es Icto pDebu gjj .exe键添加新进程.-.按其他任意键继续运行. .dThe execute name:bb*当月ij正在运行的进程是:bb人 、namestate queue ntime rt ime 在队列可停留时间!bb!R:1:10:0!2*当刖就绪队列状态为:namestatequeuentimert ime在队列可停留时间!cciu:1:5:0i2namestatequeuentimert ime在队列可停留时间Iddlu:1!71012namestatequeuentimert ime在队列可停留时间:ee:u:1:9:0:2namestatequeuent inert ime在队列可停留时间:aa:u:2:12:2:2按i键添加新进程.按其他任意键继续运行AC:UserspcDesktopDebugjj.exe按i键添加新进程一按其他任意键继续运行-hThe execute name:aa*当 刖正在运行的进程是:aa_、namestate queue ntimert ime 在队列可停留时间:aa:R:1il2ilil11*当刖就绪队列状态为:namestatequeuentimert ime在队列可停留时间:bb:j:1:10:0:2namestatequeuentimert ime在队列可停留时间:cc;u;1:5;0;2namestatequeuentimertime在队列可停留时| 可:dd:j:1i7!0!2namestatequeuentimert ime在队列可停留时间:ee:u:1!9田i2如避谈5哦近呈-L -按其他任意键继续运行按i键添加新进程.按其他任意键继续运行.暮The execute name:cc*当 前正在运行的iS程是:c rt ime在队列可停留时间i2name! ccsta.te:Rqueue !1ntime i5:KNXJC当前就绪队列状态为=namestatequeuentimert ime在队列可停留时间:dd!u!1!712namestatequeuent imert ime在队列可停留时间!ee:u:1:9:0:2namestatequeuent imert ime在队列可停留时间! aa!u:2il2i212namestatequeuent imert ime在队列可停留时间!hb!u!2IIS1212掺避逐i喙进程按其他任意梃继续运行C:UserspcD es kto pDebugjj .ex e胺i键添加新进程按其他任意键继续运行EThe execute name : dd心*当刖正在运行的进程:ddFt ime!0在队列可停留时间!2name !ddstate!Rqueue !1nt ime!7XJC XJC当前就绪队列状态为二namestatequeuent imei*t ime在队列可停留时间! ee!lj!1!9!0:2namestatequeuent imert ime在队列可停留时间! aa!lj:2:12:2:2namestatequeuent imeime在队列可停留时间;bbill!2il0i2:2namestatequeuent imept ime在队列可停留时间!cc! vj!2:5:2:2掺i慝慰唾蜜呈.按其他任意键继续运行四、实验问题及原因(1)本次试验,思路设计不难在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模 拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还 有一个标志位Fend用来表明新插入的队列的位置。(2)在建立优先数就绪队列时主要运用,链表插入模型。但是由于本题是从建立、到完 成一个就绪对列,所以必须分多种情况讨论。五、实验体会和收获(1)本次试验后对优先数调度算法和时间片轮转调度算法实现的过程,有了很清楚的 认识、理解。设计计数器来对进程执行状态的时间分析,使得进程调度这一抽象模型得 到具体化。之后,便是对进程的插入(执行完,插入到完成队列,否则插入到就绪)和 再次调度(当改进程再次满足条件时,从就绪队列调度到执行队列)重复过程。(2)通过设计PCB结构,模拟进程调度,加深了对进程的理解。(3)提高了 C语言编程动手能力
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!