2022年实验二进程调度程序设计实用 .pdf

上传人:C****o 文档编号:34261490 上传时间:2022-08-15 格式:PDF 页数:9 大小:281.04KB
返回 下载 相关 举报
2022年实验二进程调度程序设计实用 .pdf_第1页
第1页 / 共9页
2022年实验二进程调度程序设计实用 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年实验二进程调度程序设计实用 .pdf》由会员分享,可在线阅读,更多相关《2022年实验二进程调度程序设计实用 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验二进程调度程序设计一、目的和要求(一)目的进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。(二)要求1 设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。2 调度程序应包含23 种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。3系统应能显示或打印各进程状态和参数的变

2、化情况,便于观察。二、实验内容和原理1 题目本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行 R(run) 、就绪 W(wait) 和完成 F(finish)三种状态之一, 并假定起始状态都是就绪状态W 。为了便于处理, 程序中进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。进程控制块结构如表2-1 所示:表 2-1PCB进程标识符链指针优先数 / 轮转时间片数占用 CPU时间片数进程所需时间片数进程状态进程控制块链结构如图2-1 所示: RUN HEAD TAIL 图 2-1 进程控制块链结构1 R3 W

3、5 WW0 2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 其中: RUN 当前运行进程指针;HEAD 进程就绪链链首指针;TAIL进程就绪链链尾指针。2.算法与框图程序框图如图2-2 所示。图 2-2 进程调度框图(1) 优先数法。进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。每过一个时间片, 运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。理由是该进程如果在一个时间片中完成不了,优先级

4、应降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。priority是输入调度算法alog 开始alog=priority/round robin? 生成并按优先数大小排列进程控制块链进程时间片数为 0?从链首取一个进程投入运行生成并按进入次序排列进程控制块链链首进程投入运行时间片到,进程时间片数减 1,优先数减3 运行进程退出,排

5、到进程链尾部撤消该进程链首进程投入运行时间片到,进程时间片数减 1,占用 CPU 时间加 1 优 先 数大 于 链首进程 ? 进程时间片数为 0?撤消该进程运行进程退出,按优先数插入进程链从 链首 取 一 个进程投入运行结束结束进程队列空 ? 进程队列空 ? 是是是否否否否否是round robin占 用 处理 机 时间片到 ? 否是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 进程每次占用处理机的轮转时间按其重要程度登入进程

6、控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。每过一个时间片, 运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。三、系统运行的软硬件环境(硬件配置,软件)笔记本电脑、 visualc+6.0四、程序清单#include #include #define furthest 5 struct process /*PCB STRUCTURE*/ int id; int priority; int cput

7、ime; int alltime; char state; int next; prochainfurthest-1; int procnum; int rand(); int algo; int run,head,tail,j; main() /*MAIN PROGRAM*/ agan: printf(type the algorithm is (1:RR,2:PRIO):); scanf(%d,&algo); if (algo=2) printf(output of priority.n); init(); prisch(); else if (algo=1) printf(output

8、of round robin.n); init(); timesch(); else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - printf(try again,pleasen); goto agan; for (j=1;j=40;j+) printf(=); printf(nn); for (j=1;j=40;j+) printf(=); printf(nn); printf(system finishedn); get

9、ch(); print() /*PRINT THE RUNNING PROCESS,WAITING QUEUE AND PCB SEQUENCE LIST*/ int k,p; for (k=1;k=40;k+) printf(=); printf(nrunning proc. ); printf(%d,prochainrun.id); printf(n waiting queue.); /*printf(n %d ,prochainrun.id);*/ p=head; while(p!=0) printf(%5d,p); p=prochainp.next; printf(n); for (k

10、=1;k=40;k+) printf(=); printf(n); printf( id ); for (k=1;kfurthest+1;k+) printf(%5d,prochaink.id); printf(n); printf(priority ); for (k=1;kfurthest+1;k+) printf(%5d,prochaink.priority); printf(n); printf(cputime ); for (k=1;kfurthest+1;k+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精

11、心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - printf(%5d,prochaink.cputime); printf(n); printf(alltime ); for (k=1;kfurthest+1;k+) printf(%5d,prochaink.alltime); printf(n); printf(state ); for (k=1;kfurthest+1;k+) printf(%5c,prochaink.state); printf(n); printf(next ); for (k=1;kfurthest+1;k+) prin

12、tf(%5d,prochaink.next); printf(n); insert(int q) /*INSERT A PROCESS*/ int p,s; p=head; s=prochainhead.next; while(prochainq.priorityprochains.priority)&(s!=0) p=s; s=prochains.next; prochainp.next=q; prochainq.next=s; insert2() /*PUT A PROCESS ONTO THE TAIL OF THE QUEUE*/ prochaintail.next=run; tail

13、=run; prochainrun.next=0; init() /*CREATE A W AITING QUEUE*/ int i; head=0; if (algo=2) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - for (i=1;ifurthest+1;i+) prochaini.id=i; prochaini.priority=(rand()+11)%41; prochaini.cputime=0; prochai

14、ni.alltime=(rand()+1)%7; prochaini.state=W; prochaini.next=0; if(prochaini.priorityprochainhead.priority)&(head!=0) insert(prochaini.id); else prochaini.next=head; head= prochaini.id; else for (i=1;ifurthest+1;i+) prochaini.id=i; prochaini.priority=(rand()+1)%3+1; prochaini.cputime=0; prochaini.allt

15、ime=(rand()+1)%7; prochaini.state=W; prochaini.next=(i+1)%(furthest+1); head=1; tail=furthest; prochainfurthest.next=0; run=head; prochainrun.state=R; head=prochainhead.next; prochainrun.next=0; print(); prisch() /*THE PROCESS WITH PRIO ALGORITHM */ while(run!=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

16、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - prochainrun.cputime+=1; prochainrun.priority-=3; prochainrun.alltime-=1; if(prochainrun.alltime=0) prochainrun.state=F; prochainrun.next=0; if(head=0) run=head; prochainrun.state=R; head=prochainhead.next; else prochain0.id=proc

17、hainrun.id; run=0; else if(prochainrun.priority prochainhead.priority)&(head!=0) prochainrun.state=W; insert(run); run=head; prochainrun.state=R; head= prochainhead.next; print(); timesch() /*THE PROCESS WITH RR ALRORITHM */ while(run!=0) prochainrun.alltime-=1; prochainrun.cputime+=1; if(prochainru

18、n.alltime=0) prochainrun.state=F; prochainrun.next=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - if(head!=0) run=head; prochainrun.state=R; head=prochainhead.next; else prochain0.id=prochainrun.id; run=0; else if(prochainrun.cputime=pr

19、ochainrun.priority)&(head!=0) prochainrun.state=W; prochainrun.cputime=0; insert2(); run=head; prochainrun.state=R; head=prochainhead.next; print(); 五、实验结果与分析名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 六、讨论、心得本次实验主要是选用优先数法或简单轮转法对五个进程进行调度,重点在于对两个算法的理解, ,简单轮转法是将按进入顺序排列进程。而优先数法是按照进程优先数来排列进程,整个实验过程中, 需要仔细的读懂程序代码的每一步,然后进行修改, 完成实验使自己对所学知识得以实践,加深了对学习的知识的理解。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁