2022年2022年进程调度模拟实验 .pdf
《2022年2022年进程调度模拟实验 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年进程调度模拟实验 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、进程调度模拟实验1.实验目的通过对进程调度算法的模拟加深对进程概念和进程调度过程的理解。2.实验内容用 C 语言、 Pascal语言或其他开发工具实现对N(N=5)个进程的调度模拟,要求至少采用两种不同的调度算法 (如简单轮转法Round Robin 和优先权高者优先算法Highest Priority First ) , 分别进行模拟调度。每个用来标识进程的进程控制块PCB 用结构(记录)来描述,根据需要,它包括以下字段:进程标识数ID。进程优先数Priority ,并规定优先数越大的进程,其优先权越高。采用简单轮转法时该字段无用。进程已经占用的CPU 时间 CPUTIME (以时间片为单位
2、,下同) 。进程还需占用的CPU 时间 ALLTIME 。当进程运行完毕时,ALLTIME变为 0。进程的阻塞时间STARTBLOCK , 表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已经阻塞的进程再等待BLOCKTIME个时间片后, 将转换成就绪状态。进程状态 STATE。队列指针 NEXT ,用来将 PCB 排成队列。优先数改变的原则(采用简单轮转法时该字段无用):进程在就绪队列中等待一个时间片,优先数增加1;进程每运行一个时间片,优先数减3。假设在进行调度前,系统中有5 个进程,它们的初始状态可以编程输入(更具有灵活性),也
3、可以初始化为如下内容:ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE 0 9 0 3 2 3 READY 1 38 0 3 -1 0 READY 2 30 0 6 -1 0 READY 3 29 0 3 -1 0 READY 4 0 0 4 -1 0 READY 为了清楚地观察诸进程的调度过程,程序应该将每个时间片内各进程的情况显示出来并暂停,参考格式如下:运行 /Running:I 就绪队列 /Ready Queue:Idi,Idj,阻塞队列 /Block Queue:Idk ,Idl ,= 进程号优先数已运行时间需要时间 开始阻
4、塞时间阻塞时间 状态0 P0 C0 A0 T0 B0 S0 1 P1 C1 A1 T1 B1 S1 2 P2 C2 A2 T2 B2 S2 3 P3 C3 A3 T3 B3 S3 4 P4 C4 A4 T4 B4 S4 = 3.实验分析和思考名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 在实际的进程调度中,还有哪些可行的算法,怎样模拟?在实际的进程调度中,除了按算法选择下一个运行的进程之外,操作系统还应该做哪些工作?为什么对进
5、程的优先数可以按上述原则进行修改?有什么好处?4.实验学时安排:6 学时,在调度与死锁内容学习之后进行。/ 模拟操作系统四种进程调度算法(先进先出、短进程优先、高优先权优先、简单时间片轮转)/ 本实验可以模拟任意一种,可以自定义进程个数、自定义初始化他们的。/代码:#include stdafx.h #include using std:cout; using std:cin; using std:cerr; enum Statusrunning,ready,blocked; enum Policyfifo,spf,hpf,rr; typedef class PCB /定义类。public:
6、int id,priority,cputime,alltime,startblock,blocktime; Status state; class PCB *next; PCB() priority=0; PCB,*PCBptr,*PCBpp; char x; PCBpp pp;/两个全局变量void Print(PCBptr head) /打印 head为头指针的链表信息。 PCBptr p; coutnext;p=p-next) if(p-next-state=running) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
7、 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - coutIDnext-id; break; coutnext;p=p-next) if(p-next-state=ready) coutIDnext-id ; coutnext;p=p-next) if(p-next-state=blocked) coutIDnext-id ; coutn-n next;p=p-next) coutnext-id next-priority next-cputimenext-alltimenext-startblocknext-blocktimenext-s
8、tate) case ready:cout就绪 ;break; case running:cout 运行 ;break; case blocked:cout阻塞 ;break; default:exit(0); coutn; cout-n x; void Delete(PCBptr head,PCBptr p) /删除以 head为头指针的链表中p 所指向的结点。 PCBptr q=head; while(q-next!=p) q=q-next; q-next=p-next; delete p; void InsertSort(PCBpp Rdy,PCBpp RdyEd,Policy algt
9、hm) /直接插入排序。 if(*(Rdy+1)/ 队列不为空名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - if(RdyEd-1!=Rdy+1) /Ready+1 队列中不只一个。 switch(algthm) case hpf: if(*(RdyEd-1)-priority(*(RdyEd-2)-priority) PCBpp tt; *Rdy=*(RdyEd-1); *(RdyEd-1)=*(RdyEd-2); for(t
10、t=RdyEd-3;(*Rdy)-priority(*tt)-priority;tt-) *(tt+1)=*tt; *(tt+1)=*Rdy; break; case spf: if(*(RdyEd-1)-alltimealltime) PCBpp tt; *Rdy=*(RdyEd-1); *(RdyEd-1)=*(RdyEd-2); for(tt=RdyEd-3;(*Rdy)-alltimealltime;tt-) *(tt+1)=*tt; *(tt+1)=*Rdy; void RunToBlk(PCBpp Run,PCBpp &BlkEd) /定义运行态转为阻塞态。 (*Run)-stat
11、e=blocked; *BlkEd=*Run; BlkEd+; void RdyToRun(PCBpp &Rdy,PCBpp Run,Policy algthm) /定义就绪态转为运行态。 if(algthm=hpf|algthm=spf) if(*(Rdy+1) (*(Rdy+1)-state=running; *Run=*(Rdy+1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - Rdy+; else if(*Rdy)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年进程调度模拟实验 2022 进程 调度 模拟 实验
限制150内