版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.实验2.1 进程调度一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、 实验要求1 设计进程调度算法,进程数不定2 包含几种调度算法,并加以实现3 输出进程的调度过程进程的状态、链表等。三、 参考例1 题目优先权法、轮转法简化假设1) 进程为计算型的(无I/O)2) 进程状态:ready、running、finish3) 进程需要的CPU时间以时间片为单位确定2 算法描述1) 优先权法动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2)
2、 轮转法开始键盘输入进程数n,和调度方法的选择优先权法?轮转法产生n个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小,把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到,进程所需的CPU时间减1,优先权减3,输出个进程的运行情况所需的CPU时间=0?撤销进程就绪队列为空?结束将进程插入就绪队列NYNYYBN四、 实验流程图产生n个进程,对每个进程用随机数产生进程的轮转时间片数及进程所需的时间片数,已占用CPU的时间片数置为0按进程产生的先后次序拉成就绪队列链链首进程投入运行时间片到,进程所需时间片数减1,已占用CPU时间片数加1
3、输出各进程的运行情况进程所需时间片数=0?撤销该进程就绪队列为空吗?占用CPU的时间片数=轮转时间片数?占用CPU的时间片数置为0把该进程插入就绪队列尾BNYNYY结束N注意:1 产生的各种随机数的取值范围加以限制,如所需的CPU时间限制在120之间。2 进程数n不要太大通常取48个3 使用动态数据结构4 独立编程5 至少三种调度算法6 若有可能请在图形方式下,将PCB的调度用图形成动画显示。五实验过程:(1)输入:进程流文件(1.txt),其中存储的是一系列要执行的进程, 每个作业包括四个数据项:进程名 进程状态(1就绪 2等待 3运行) 所需时间 优先数(0级最高)进程0 1 50 2进程
4、1 2 10 4进程2 1 15 0进程3 3 28 5 进程4 2 19 1进程5 3 8 7输出: 进程执行流等待时间,平均等待时间本程序包括:FIFO算法,优先数调度算法,时间片轮转调度算法(2)程序代码#include #include #includeconst int block_time=10; /定义时间片的长度为10秒 const int MAXPCB=100; /定义最大进程数/定义进程结构体 typedef struct nodechar name20; int status;int time; int privilege;int finished; int wait_t
5、ime; pcb;pcb pcbsMAXPCB; int quantity;/初始化函数 void initial() int i;for(i=0;iMAXPCB;i+) strcpy(,); pcbsi.status=0; pcbsi.time=0;pcbsi.privilege=0;pcbsi.finished=0; pcbsi.wait_time=0; quantity=0;/读数据函数 int readData() FILE *fp; char fname20; int i;coutfname; if(fp=fopen(fname,r)=NULL) cout错误,文
6、件打不开,请检查文件名endl; else while(!feof(fp) fscanf(fp,%s %d %d %d,,&pcbsquantity.status,&pcbsquantity.time,&pcbsquantity.privilege); quantity+; /输出所读入的数据 cout输出所读入的数据endl; cout进程名 进程状态 所需时间 优先数endl; for(i=0;iquantity;i+) cout pcbsi.status pcbsi.time pcbsi.privilegeendl; return(
7、1); return(0);/重置数据,以供另一个算法使用 void init() int i;for(i=0;iMAXPCB;i+)pcbsi.finished=0; pcbsi.wait_time=0; /先进先出算法 void FIFO() int i,j; int total;/输出FIFO算法执行流 coutendl*endl; coutFIFO算法执行流:endl; cout进程名 等待时间endl; for(i=0;iquantity;i+) cout pcbsi.wait_timeendl; for(j=i+1;jquantity;j+) pcbsj.wa
8、it_time+=pcbsi.time; total=0; for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout总等待时间:total 平均等待时间:total/quantityendl;/优先数调度算法 void privilege() int i,j,p; int passed_time=0; int total;int queueMAXPCB; int current_privilege=1000;for(i=0;iquantity;i+) current_privilege=1000; for(j=0;jquantity;j+) if(p
9、cbsj.finished=0)&(pcbsj.privilegecurrent_privilege) p=j; current_privilege=pcbsj.privilege; queuei=p;pcbsp.finished=1; pcbsp.wait_time+=passed_time; passed_time+=pcbsp.time; /输出优先数调度执行流 coutendl*endl; cout优先数调度执行流:endl; cout进程名 等待时间endl; for(i=0;iquantity;i+) cout pcbsqueuei.wait_tim
10、eendl; total=0; for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout总等待时间:total 平均等待时间:total/quantityendl;/时间片轮转调度算法 void timer() int i,j,number,flag=1; int passed_time=0; int max_time=0; int round=0; int queue1000; int total=0;while(flag=1) flag=0; number=0;for(i=0;i1)for(i=0;iquantity;i+) if(pcbsi.finished=0) flag=1; queuetotal=i; total+; if(pcbsi.time=block_time*(round+1) pcbsi.finished=1; round+; if(queuetotal-1=queuetotal-2) total-; coutendl*endl; cout时间片轮转调度执行流:endl; for(i=0;itotal;i+) ;coutendl;/显示void version() cout /* 进程调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年虚拟现实内容制作授权合同
- 2025版锅炉工职业技能鉴定合同3篇
- 2025年度民间融资合同范本:家庭间融资合作框架6篇
- 2025年度木材买卖合同范本汇编2篇
- 2025年度版权许可合同:音乐作品使用权授予3篇
- 2025用工双方签订劳动合同决不可“等闲视之”
- 2024年绿色能源知识产权共享与保护合作协议3篇
- 2025出兑协议书合同
- 2025年度水泥工程环保项目投资合同规范文本3篇
- 2024版建筑合伙人协议书范本
- 《古兰》中文译文版
- 小学英语不规则动词表
- VIC模型PPT课件
- AQL2.5抽检标准
- 宣传广告彩页制作合同
- 除湿机说明书
- 征信知识测试题及答案
- 理想系列一体化速印机故障代码
- 现代电路技术——故障检测D算法
- 检验科各专业组上岗轮岗培训考核制度全6页
- 钣金与成型 其它典型成形
评论
0/150
提交评论