2022年操作系统实验课指导 .pdf
《2022年操作系统实验课指导 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验课指导 .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统实验指导Page 1 of 18 实验一、进程调度实验一、目的要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二、例题:设计一个有N 个进程并发的进程调度程序。进程调度算法:采用最高优先级优先的调度算法(即把处理机分配给优先级最高的进程)和先来先服务算法。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先级、到达时间、需要运行时间、已用CPU 时间、进程状态等等。进程的优先级及需要的运行时间可以事先人为地指定(也可以由随机数产生),进程的到达时间为进程输入的时间,进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就
2、绪 W(Wait )、运行 R(Run)、或完成F(Finish )三种状态之一(这是编程用到的三个模拟状态,并非进程的三基态)。就绪进程获得 CPU后都只能运行一个时间片,用已占用 CPU时间加 1 来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间, 则撤消该进程, 如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先级减1(即降低一级),然后把它插入就绪队列等待CPU 。每进行一次调度程序都打印一次运行进程、就绪队列、 以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的
3、流程图如下 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 2 of 18 进程调度源程序如下:jingchendiaodu.cpp #include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char na
4、me10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 3 of 18 char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0;
5、 if(ready=NULL)|(p-super)(ready-super) /*优先级最大者 , 插入队首 */ p-link=ready; ready=p; else /* 进程比较优先级, 插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入进程比当前进程优先级大,*/ /*插入到当前进程前面*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
6、 3 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 4 of 18 p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先级最低, 则插入到队尾 */ first=first-link; second=second-link; if(insert=0) first-link=p; input() /* 建立进程控制块函数*/ int i,num; system(cls); /*清屏 clrscr()*/ printf(n 请输入进程号 ?); scanf(%d,&num); for(
7、i=0;iname); printf(n 输入进程优先级:); scanf(%d,&p-super); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用 sort函数 */ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); disp(PCB * pr) /*建立进程显示函数, 用于显示当前进程*/ 名师资料总结 - - -精品资料欢迎下载
8、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 6 of 18 printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); check() /* 建
9、立进程查看函数 */ PCB* pr; printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; destroy() /*建立进程撤消函数( 进程运行结束 , 撤消进程 )*/ printf(n 进程 %s 已完成 .n,p-name); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
10、- - - - - 第 6 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 7 of 18 free(p); running() /* 建立进程就绪函数( 进程运行时间到, 置就绪状态 */ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用 destroy函数 */ else (p-super)-; p-state=w; sort(); /*调用 sort 函数 */ main() /*主函数 */ int len,h=0; char ch; input(); len=space(); while(len!=0)&
11、(ready!=NULL) ch=getchar(); h+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 操作系统实验指导Page 8 of 18 printf(n The execute number:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续 .); ch=getchar();
12、printf(nn 进程已经完成 .n); ch=getchar(); 三实验题:编写并调试一个模拟的进程调度程序,采用“最高优先级优先”调度算法对五个进程进行调度。“最高优先级优先”调度算法的基本思想是把CPU分配给就绪队列中优先级最高的进程。静态优先级是在创建进程时确定的,并在整个进程运行期间不再改变。动态优先级是指进程的优先级在创建进程时可以给定一个初始值,并且可以按一定原则修改优先级。例如:在进程获得一次CPU后就将其优先级减少1,或者,进程等待的时间超过某一时限时增加其优先级的值,等等。编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。轮转法可以是简单轮转法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验课指导 2022 操作系统 实验 指导
限制150内