实验一-进程调度——starof(共17页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《实验一-进程调度——starof(共17页).doc》由会员分享,可在线阅读,更多相关《实验一-进程调度——starof(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 实验一 进程调度 一.实验题目: 1、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。二:实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解 三.实验内容: 最高优先级优先调度算法 1)优先级简介动态优先数是指在进程创建时先确定一个初始优先数, 以后在进程运行中随着进程特性的改变不断修改优先数,这样,由于开始优先数很低而得不到CPU的进程,就能因为等待时间的增长而优先数变为最高而得到CPU运行。例如:在进程获得一次CP
2、U后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。 2)详细设计优先权调度算法:1、设定系统中有五个进程,每一个进程用一个进程控制块( PCB)表示,进程队列采用链表数据结构。2、 进程控制块包含如下信息:进程名、优先数、需要运行时间、已用CPU时间、进程状态等等。3、 在每次运行设计的处理调度程序之前,由终端输入五个进程的“优先数”和“要求运行时间”。4、 进程的优先数及需要的运行时间人为地指定.进程的运行时间以时间片为单位进行计算。5、 采用优先权调度算法,将五个进程按给定的优先数从大到小连成就绪队列。用头指针指出队列首进程,队列采用链表结构。6、 处理机调
3、度总是选队列首进程运行。采用动态优先数办法,进程每运行一次优先数减“1”,同时将已运行时间加“1”。7、 进程运行一次后,若要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。8、 “就绪”状态的进程队列不为空,则重复上面6,7步骤,直到所有进程都成为“结束”状态。9、 在设计的程序中有输入语句,输入5个进程的“优先数”和“要求运行时间”,也有显示或打印语句,能显示或打印每次被选中进程的进程名、运行一次后队列的变化,以及结束进程的进程名。10、最后,为五个进程任意确定一组“优先数”和“要求运行时间”,运行并调试所设计的程序,显示或打印出逐次被选中进程的
4、进程名及其进程控制块的动态变化过程。 3)流程图: 图一.最高优先级优先调度算法流程图4)源程序:#include stdio.h#include #include #define getpch(type) (type*)malloc(sizeof(type)#define NULL 0struct pcb /* 定义进程控制块PCB */ char name10; /进程名 char state; /进程状态 int super; /进程优先级 int ntime; /进程需要运行时间 int rtime; /进程已经运行的时间 struct pcb* link;*ready=NULL,*p
5、;typedef struct pcb PCB;void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; 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、进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*/ int i; system(cls); /*清屏*/ printf(n 请输入五个进程信息:n); for(i=0; iname); printf(n 输入进程优先数:); scanf(%d,&p-super); printf(n 输入进程运
7、行时间:); 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);void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name
8、); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n);void check() /* 建立进程查看函数 */ PCB* pr; printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*
9、建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p);void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else (p-super)-; p-state=w; sort(); /*调用sort函数*/ void youxian() / 高优先级优先算法的程序入口 int len,h=0; char ch; system(cls); input(); len=space()
10、; while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.); printf(nn 进程已经完成.n); ch=getchar();void sort2() PCB *q; q=ready; if(ready=NULL) ready=p; else while(q-link!=NULL) q=q-link; q-link
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 进程 调度 starof 17
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内