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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验三进程调度蔡凤武.docx

1、实验三进程调度蔡凤武实验三 进程调度实验目的 1、 理解有关进程控制块、进程队列的概念。2、 掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。 实验内容与基本要求 1、 设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。2、 建立进程就绪队列。3、 编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。 实验报告内容 一优先权调度算法和时间片轮转调度算法原理。对于优先权调度算法,其关键是在于是采用静态优先权还是动态优先权,以及如何确定进程的优先权。静态优先权是在创建进程是确定的,并且规定它在进程的整个运行期间保持不变。动态优先权要配合抢占调度方式使用,它是指在

2、创建进程时所赋予的优先权,可以随着进程的推进而发生改变,以便获得更好的调度性能。在就绪队列中等待调度的进程,可以随着等待时间的增加,其优先权也以某个速率增加。因此,对于优先权初值很低的进程,在等待足够时间后,其优先权也可能升为最高,从而获得调度,占用处理器并执行。对已时间片轮转调度算法,系统将所有的就绪进程按进路就绪队列的先后次序排列。每次调度时把CPU分配给队首进程,让其执行一个时间片,当时间片用完,由计时器发出时钟中断,调度程序则暂停改程序的执行,使其退出处理器,并将它送人就绪队的末尾,等待下一轮调度执行。然后,把 cpu分配给就绪队列中新的队首进程,同时让它执行一个时间片。二 程序流程图

3、。三 程序及注释。#include #include #include #include #include #include #define P_NUM 5#define P_TIME 50 enum st ready, execute, block, finish;/状态定义进程/struct pcb char name4;/进程名字/ int priority;/进程优先权/ int cputime;/CPU运行时间/ int needtime;/进程运行需要的时间/ int count;/进程执行次数/ int round;/时间片轮转轮次/ st process;/进程状态/ pcb

4、*next;/定义进程/pcb *get_process() pcb *q; pcb *t; pcb *p; int i=0; coutinput name and timeendl; while(iq-name; cinq-needtime; q-cputime=0; q-priority=P_TIME-q-needtime; q-process=ready; q-next=NULL; if(i=0) p=q; t=q; else t-next=q; t=q; i+; return p;/输入模拟测试的进程名和执行所需的时间,初始设置可模拟5个进程的调度/void display (pcb

5、*p) coutname cputime needtime priority stendl; while(p) coutname; cout ; coutcputime; cout ; coutneedtime; cout ; coutpriority; coutprocess) case ready:coutreadyendl;break; case execute:coutexecuteendl;break; case block:coutblockendl;break; case finish:coutfinishnext; /显示模拟结果,包含进程名,cpu的时间。运行所需时间以及优先

6、级/int process_finish(pcb * q) int bl=1; while(bl&q) bl=bl&q-needtime=0; q=q-next; return bl;/结束进程,即将队列中各进程的所需时间设置为零/void cpuexe(pcb * q) pcb*t=q; int tp=0; while(q) if(q-process!=finish) q-process=ready; if(q-needtime=0) q-process=finish; if(tppriority&q-process!=finish) tp=q-priority; t=q; q=q-next

7、; if(t-needtime!=0) t-priority-=3; t-needtime-; t-process=execute; t-cputime+; /选择某一个进程,给它分配cpu/计算进程优先级/void priority_cal() pcb*p; system(cls); p=get_process(); int cpu=0; system(cls); while(!process_finish(p) cpu+; coutcputime:cpuendl; cpuexe(p); display(p); Sleep(2); printf(All processes have fini

8、shed,press any key to exit); getch();void display_menu() coutCHOOSE THE ALGORITHM:endl; cout1 PRIORITYendl; cout2 ROUNDROBINendl; cout3 EXItendl;/显示调度算法菜单,可供用户选择优先权调度算法和时间片轮转调度算法/pcb *get_process_round() pcb*q; pcb*t; pcb*p; int i=0; coutinput name and timeendl; while(iq-name; cinq-needtime; q-cputi

9、me=0; q-round=0; q-count=0; q-process=ready; q-next=NULL; if(i=0) p=q; t=q; else t-next=q; t=q; i+; return p;/时间片轮转调度算法创建就绪进程队列/void cpu_round(pcb*q) q-cputime+=2; q-needtime-=2; if(q-needtimeneedtime=0; q-count+; q-round+; q-process=execute;pcb*get_next(pcb*k,pcb*head) pcb*t; t=k; do t=t-next; whil

10、e(t&t-process=finish); if(t=NULL) t=head; while(t-next!=k&t-process=finish) t=t-next; return t;void set_state(pcb*p) while(p) if(p-needtime=0) p-process=finish; if(p-process=execute) p-process=ready; p=p-next; /设置队列中进程的执行状态/void display_round(pcb*p) coutNAME cputime NEEDTIME count ROUND STATEendl; w

11、hile(p) coutname; cout ; coutcputime; cout ; coutneedtime; cout ; coutcount; cout ; coutround; coutprocess) case ready:coutreadyendl;break; case execute:coutexecuteendl;break; case finish:coutfinishnext; /时间片轮转调度算法输出调度信息/void round_cal() pcb*p; pcb*r; system(cls); p=get_process_round(); int cpu=0; s

12、ystem(cls); r=p; while(!process_finish(p) cpu+=2; cpu_round(r); r=get_next(r,p); coutcpucpuendl; display_round(p); set_state(p); Sleep(5); void main() display_menu(); int k; scanf(%d,&k); switch(k) case 1:priority_cal();break; case 2:round_cal();break; case 3:break; display_menu(); scanf(%d,&k); 四 结

13、果分析本程序用两种方法对五个进程进行调度,每个进程可有三种状态,并假设初始状态为就绪状态。为了便于处理,程序中的某进程运行时间以时间片为单位计算。实验界面如下:选择了PRIORITY,结果如下:输入进程名字,时间,优先权,结果如下:执行完一个时间片,进程一优先级数减3,此时四优先级最高,则四获取CPU,开始执行:以此类推。 若选择了ROUNDROBIN,则进一步显示:。时间片轮转调度算法输出大致与上大致相同,但要将PRIORITY项换位COUNT项。分析:在优先权调度算法中,优先级可以先取值为50,进程每次执行一次,优先级数减3,CPU时间片数加1,进程还需要时间片数减1.在时间片轮转调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为以执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并将应该进程排列到就绪队列调度尾上。五 与实验体会:通过本实验,在理论上我理解优先权限调度算法和时间片轮转调度算法的基本思想和原理;加深了对操作系统进程调度操作功能和进程调度算法的理解,对操作系统开发有了一定的兴趣。在实验过程中,也遇到了很多的困难,很感谢同学的帮助。

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

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