下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 进程调度 实验报告

进程调度 实验报告.doc

进程调度 实验报告

就在一念之间失去你
2017-09-30 0人阅读 举报 0 0 暂无简介

简介:本文档为《进程调度 实验报告doc》,可适用于IT/计算机领域

进程调度实验报告多道程序设计中经常是若干个进程同时处于就绪状态必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题加深对进程调度的理解。.优先权法、轮转法简化假设)进程为计算型的(无IO))进程状态:ready、running、finish)进程需要的CPU时间以时间片为单位确定.算法描述)优先权法动态优先权当前运行进程用完时间片后其优先权减去一个常数。)轮转法开始键盘输入进程数n和调度方法的选择N优先权法?轮转法BY产生n个进程对每个进程产生一个PCB并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到进程所需的CPU时间减优先权减输出个进程的运行情况N所需的CPU时间=?将进程插入就绪队列Y撤销进程N就绪队列为空?Y结束B产生n个进程对每个进程用随机数产生进程的轮转时间片数及进程所需的时间片数已占用CPU的时间片数置为按进程产生的先后次序拉成就绪队列链链首进程投入运行时间片到进程所需时间片数减已占用CPU时间片数加输出各进程的运行情况NY进程所需时间片数=?撤销该进程就绪队列为空吗?NYN结束占用CPU的时间片数=轮转时间片数?Y占用CPU的时间片数置为把该进程插入就绪队列尾开始键盘输入进程数n和调度方法的选择N优先权法?轮转法BY产生n个进程对每个进程产生一个PCB并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到进程所需的CPU时间减优先权减输出个进程的运行情况N所需的CPU时间=?将进程插入就绪队列Y撤销进程N就绪队列为空?Y结束.产生的各种随机数的取值范围加以限制如所需的CPU时间限制在~之间。.进程数n不要太大通常取~个.使用动态数据结构.独立编程.至少三种调度算法.若有可能请在图形方式下将PCB的调度用图形成动画显示。Mainc#include<stdioh>#include<windowsh>#include"fcfsh"#include"privilegeh"#include"roundh"voidmain(){intncout<<"输入随机产生的进程数目"<<endlcin>>nintchoice=while(choice!=){cout<<"请输入你的选择"<<endlcout<<":FCFS调度算法n"<<":动态优先权调度算法n"<<":时间片轮转法n"<<":清屏n"<<":退出"<<endlcin>>choiceswitch(choice){case:{structprocess*first=creatlist(n)print(first)fcfs(first)break}case:{structprocess*first=creatlist(n)print(first)privilege(first)break}case:{structprocess*first=creatlist(n)print(first)round(first)break}case:{system("cls")break}case:breakdefault:break}}*}fcfsh#ifndefFCFSH#defineFCFSH#include<stdioh>#include<stdlibh>#include<timeh>#include<iostreamh>#include<iomaniph>#definerandom(x)(rand()x)structprocess{intnum进程号intattime,servtime进程到达时间服务时间process*next}structprocess*creatlist(int)新建一个链表voidinsert(structprocess*first,structprocess*s)插入一个节点(尾插法)voidprint(structprocess*first)打印函数structprocess*creatlist(intn){srand((int)time())structprocess*first=newprocessfirst>next=for(inti=i<ni){structprocess*ss=newprocesss>num=is>attime=is>servtime=random()insert(first,s)}returnfirst}voidinsert(structprocess*first,structprocess*s){structprocess*r=firststructprocess*pwhile(r){p=rr=r>next}p>next=sp=sp>next=}voidprint(structprocess*first)打印函数{structprocess*pp=first>nextcout<<"随机产生的进程的信息如下"<<endlcout<<"进程名"<<"进程到达时间"<<"进程服务时间"<<endlwhile(p){cout<<p>num<<'t'<<p>attime<<setw()<<p>servtime<<endlp=p>next}}voidfcfs(structprocess*first){intstartime=开始执行时间intfinishtime=完成时间intwasttime=周转时间intweighttime=带权周转时间structprocess*p=first>nextstructprocess*rcout<<"**************************************************"<<endlcout<<"FCFS调度算法基本信息n"<<endlcout<<"进程名"<<"到达时间"<<"服务时间"<<"开始执行时间"<<"完成时间"<<"周转时间"<<"带权周转时间"<<endlwhile(p){finishtime=p>servtimestartimewasttime=finishtimep>attimeweighttime=wasttimep>servtimecout<<p>num<<setw()<<p>attime<<setw()<<p>servtime<<setw()<<startime<<setw()<<finishtime<<setw()<<wasttime<<'t'<<weighttime<<endlr=pp=p>nextstartime=r>servtime}}#endifprivilegeh#ifndefPRIVILEGEH#definePRIVILEGEHstructprocess{intpcb进程号PCBintprivilege,cpu进程优先权所需CPU时间process*next}*******************优先权调度算法所需函数声明*****************************************************structprocess*creatlist()新建链表(就绪队列)voidinsert(structprocess*first,structprocess*s)增加一个进程或将一个进程查入到队列中voiddel(structprocess*first,structprocess*s)删除(撤销)一个进程voidprint(structprocess*first)打印函数structprocess*search(structprocess*head,structprocess*s)*******************优先权调度算法所需函数*****************************************************structprocess*creatlist(intn){srand((int)time())structprocess*first=newprocessfirst>next=for(inti=i<ni){structprocess*ss=newprocesss>pcb=is>privilege=random()s>cpu=random()insert(first,s)}returnfirst}voidinsert(structprocess*first,structprocess*s)插入节点{structprocess*p=search(first,s)s>next=p>nextp>next=sreturn}structprocess*search(structprocess*first,structprocess*s)查找第一个到达时间大于等于AT的节点返回其前一个指针{structprocess*p,*qp=firstq=first>nextwhile(q!=q>privilege>=s>privilege){p=qq=q>next}returnp}voiddel(structprocess*first,structprocess*s){structprocess*p,*rp=first>nextr=firstinta=while(a){if(p==s){r>next=p>nextfree(p)a=}else{r=pp=p>next}}}voidprint(structprocess*first)打印函数{structprocess*pp=first>nextcout<<"进程号"<<"进程优先权"<<"进程所需CPU片数"<<endlwhile(p){cout<<p>pcb<<setw()<<p>privilege<<setw()<<p>cpu<<endlp=p>next}}voidprivilege(structprocess*first){structprocess*p,*r=first,*tp=first>nextintb=while(first>next){r=firstp=first>nextcout<<"********************"<<b<<"*****************************"<<endlcout<<"***********进程运行前****************"<<endlprint(r)p>cpu=p>cpup>privilege=p>privilegeif(p>privilege<){p>privilege=}cout<<"***********进程运行后**********************"<<endlprint(r)cout<<"*************************************************n"<<endlif(p>cpu==){del(r,p)}else{t=pdel(r,p)insert(r,p)}b}}#endifroundh#ifndefROUNDH#defineROUNDHstructprocess{intpcb进程号PCBintroundpiece轮转时间片数intneedpiece进程所需时间片数intcpupiece占用CPU时间片数process*next}structprocess*creatlist(int)新建一个链表voidprint(structprocess*first)打印函数voidinsert(structprocess*first,structprocess*s)插入节点voiddel(structprocess*first,structprocess*s)删除一个进程structprocess*creatlist(intn){srand((int)time())structprocess*first=newprocessfirst>next=for(inti=i<ni){structprocess*ss=newprocesss>pcb=is>roundpiece=random()s>needpiece=random()s>cpupiece=insert(first,s)}returnfirst}voidinsert(structprocess*first,structprocess*s){structprocess*r=firststructprocess*pwhile(r){p=rr=r>next}p>next=sp=sp>next=}voiddel(structprocess*first,structprocess*s){structprocess*p,*rp=first>nextr=firstinta=while(a){if(p==s){r>next=p>nextfree(p)a=}else{r=pp=p>next}}}voidprint(structprocess*first)打印函数{structprocess*pp=first>nextcout<<"随机产生的进程的信息如下"<<endlcout<<"进程名"<<"轮转时间片数"<<"所需时间片数"<<"占用时间片数"<<endlwhile(p){cout<<p>pcb<<setw()<<p>roundpiece<<setw()<<p>needpiece<<setw()<<p>cpupiece<<setw()<<endlp=p>next}}voidround(structprocess*first){structprocess*p,*r=firstp=first>nextintb=while(first>next){r=firstp=first>nextcout<<"********************"<<b<<"*****************************"<<endlcout<<"进程运行前"<<endlprint(r)p>needpiece=p>needpiecep>cpupiece=p>cpupiececout<<"进程运行后"<<endlprint(r)cout<<"*************************************************n"<<endlif(p>needpiece<=){del(r,p)}else{if(p>cpupiece==p>roundpiece){p>cpupiece=del(r,p)insert(r,p)}}b}}#endif输入随机产生的进程数目输入选择调度算法输入选择调度算法输入选择调度算法通过次实验模拟在单处理机情况下的处理机调度问题加深了对进程调度的理解。在次试验中由于各个调度算法用到的数据结构不同所以采用了不同的结构体来存放各个调度算法所用的信息。在动态优先权调度算法中当前进程用完时间片后其优先权减去一个常数有可能出现优先权低于的情况在此情况下没有采取其它措施后来经老师提醒改为低于时就将其优先权置为这样就好了。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/19

进程调度 实验报告

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利