操作系统实验四(进程控制)

上传人:第*** 文档编号:33537140 上传时间:2018-02-15 格式:DOCX 页数:11 大小:68.07KB
返回 下载 相关 举报
操作系统实验四(进程控制)_第1页
第1页 / 共11页
操作系统实验四(进程控制)_第2页
第2页 / 共11页
操作系统实验四(进程控制)_第3页
第3页 / 共11页
操作系统实验四(进程控制)_第4页
第4页 / 共11页
操作系统实验四(进程控制)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《操作系统实验四(进程控制)》由会员分享,可在线阅读,更多相关《操作系统实验四(进程控制)(11页珍藏版)》请在金锄头文库上搜索。

1、暨南大学本科实验报告专用纸课程名称 操作系统原理实验 成绩评定 实验项目名称 进程控制 指导教师 戴红 实验项目编号 0806002904 实验项目类型 综合型实验地点 学生姓名 岑江斌 学号 2008051584 学院 电气信息学院 系 计算机科学系 专业 软件工程 实验时间 年 月 日 下午 温度 湿度 一, 实验目的。通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。二, 实验内容。(1) 用 C 语言来实现对 N 个进程采用动态优先权优先算法的进程调度。(2) 每个用来标识进程的进程控制块 PCB 用结构来描述,包括以下字段:进程标识数 ID;进程优先数 PRIORITY,并

2、规定优先数越大的进程,其优先权越高;进程已占用的 CPU 时间 CPUTIME;进程还需占用的 CPU 时间 ALLTIME。当进程运行完毕时,ALLTIME 变为0;进程的阻塞时间 STARTBLOCK,表示当进程再运行 STARTBLOCK 个时间片后,进程将进入阻塞状态;进程被阻塞的时间 BLOCKTIME,表示已阻塞的进程再等待 BLOCKTIME 个时间片后,进程将转换成就绪状态;进程状态 STATE;队列指针 NEXT,用来将 PCB 排成队列。(3) 优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加 1;进程每运行一个时间片,优先数减 3。(4) 假设在调度前,系统中有

3、 5 个进程,它们的初始状态如下:ID 0 1 2 3 4PRIORITY 9 38 30 29 0CPUTIME 0 0 0 0 0ALLTIME 3 3 6 3 4STARTBLOCK 2 -1 -1 -1 -1BLOCKTIME 3 0 0 0 0STATE READY READY READY READY READY(5) 为了清楚地观察进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下: RUNNING PROG: iREADY_QUEUE:-id1-id2BLOCK_QUEUE:-id3-id4=ID 0 1 2 3 4PRIORITY P0 P1 P2 P

4、3 P4CPUTIME C0 C1 C2 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4STATE S0 S1 S2 S3 S4三,实验源代码。#include#include / EOF(=Z 或 F6),NULL#include / atoi()#include / cout,cin#include#define READY 1 /进程就绪#define WORK 2 /进程运行#define BLOCK -1 /进程阻塞#define FINISH -2 /进程完成#define

5、ListHeade -3 /ListHeade 队列头节点struct PCBint ID; / 进程标识数 ID;int PRIORITY; / 进程优先数 PRIORITY,并规定优先数越大的进程,其 优先权越高;int CPUTIME; / 进程已占用的 CPU 时间 CPUTIME;int ALLTIME; / 进程还需占用的 CPU 时间 ALLTIME。当进程运行完毕时,ALLTIME 变为 0;int STARTBLOCK; / 进程的阻塞时间 STARTBLOCK,表示当进程再运行 STARTBLOCK 个时间片后,进程将进入阻塞状态;int BLOCKTIME; / 进程被阻

6、塞的时间 BLOCKTIME,表示已阻塞的进程再等待 BLOCKTIME 个时间片后,进程将转换成就绪状态;int STATE; / 进程状态 STATE;PCB *next; / 队列指针 NEXT,用来将 PCB 排成队列。;typedef PCB * PCBlist;PCBlist readylist; / 就绪队列PCBlist blocklist; / 阻塞队列PCBlist run; / 被执行的进程PCBlist finishlist; / 完成队列void InitQueue()readylist=(PCBlist)malloc(sizeof(PCB);readylist-ne

7、xt=NULL;/*/=65535,65535,0,0,0,0,-3,NULL;blocklist=(PCBlist)malloc(sizeof(PCB);blocklist-next=NULL;/*/=65535,65535,0,0,0,0,-3,NULL;finishlist=(PCBlist)malloc(sizeof(PCB);finishlist-next=NULL;/*/=65535,65535,0,0,0,0,-3,NULL;void Insert(PCBlist list,PCB &a) / 将 PCB a 插入队列 listPCBlist p,q;p=list;q=list-

8、next;while(q!=NULL&(q-PRIORITY)(a.PRIORITY) / 查找插入的位置是对列按p=q; / PCB 的优先权由大到小排列q=q-next;a.next=q;p-next=void CreatePS(int id,int priority,int CPUtime,int alltime,int startblock,int blocktime)PCBlist p; / 创建 PCBp=(PCBlist)malloc(sizeof(PCB);p-ID=id; /初始化 PCBp-PRIORITY=priority;p-CPUTIME=CPUtime;p-ALLT

9、IME=alltime;p-STARTBLOCK=startblock;p-BLOCKTIME=blocktime;p-STATE=READY;p-next=NULL;Insert (readylist,*p); /将其插入就绪队列void GetPriority ()run=readylist-next;if(run)readylist-next=run-next;run-next=NULL;else readylist-next=NULL;void KillPS ()Insert(finishlist,*run);run-STATE=FINISH;run=NULL;void ResetPr

10、iority()run-PRIORITY=(run-PRIORITY)-3);if(run-PRIORITY)PRIORITY=0;PCB *p;p=(readylist-next);while(p!=NULL)(p-PRIORITY)+;p=(p-next);void ResetBlockList()PCBlist q1,q2;q2=blocklist;q1=(blocklist-next);while(q1!=NULL)q1-BLOCKTIME-;if(q1-BLOCKTIME=0)q2-next=q1-next;Insert(readylist,*q1); q1-STATE=READY;

11、q1=q2-next;else q1=q1-next;void ExcutePS ()(run-CPUTIME)+;(run-ALLTIME)-;void print()if(run)coutIDnext;while(r!=NULL)coutID;r=r-next;coutnext;while(r!=NULL)coutID;r=r-next;coutID)case 0: P0=r;break;case 1: P1=r;break;case 2: P2=r;break; case 3: P3=r;break;case 4: P4=r;break;r=r-next;r=readylist-next

12、;while(r!=NULL)switch(r-ID)case 0: P0=r;break;case 1: P1=r;break;case 2: P2=r;break;case 3: P3=r;break;case 4: P4=r;break;r=r-next;r=blocklist-next;while(r!=NULL)switch(r-ID)case 0: P0=r;break;case 1: P1=r;break;case 2: P2=r;break;case 3: P3=r;break;case 4: P4=r;break;r=r-next;r=finishlist-next;whil

13、e(r!=NULL)switch(r-ID)case 0: P0=r;break;case 1: P1=r;break;case 2: P2=r;break;case 3: P3=r;break;case 4: P4=r;break;r=r-next; coutIDIDIDIDIDPRIORITYPRIORITYPRIORITYPRIORITYPRIORITYCPUTIMECPUTIMECPUTIMECPUTIMECPUTIMEALLTIMEALLTIMEALLTIMEALLTIMEALLTIMESTARTBLOCKSTARTBLOCKSTARTBLOCKSTARTBLOCKSTARTBLOC

14、KBLOCKTIMEBLOCKTIMEBLOCKTIMEBLOCKTIMEBLOCKTIMESTATE)case READY: coutSTATE)case READY: coutSTATE)case READY: coutSTATE)case READY: coutSTATE)case READY: coutSTATE=WORK;print();while(run!=NULL)ExcutePS();ResetPriority(); /重置优先级,本回合唤醒的阻塞进程优先权不加一(不参与重置)if(run-ALLTIME=0) KillPS();if(runif(blocklist-next)

15、!=NULL) ResetBlockList();if(run&run-STARTBLOCK=0)Insert(blocklist,*run);run-STATE=BLOCK;elseif(run)Insert(readylist,*run);run-STATE=READY;print();GetPriority();print();int main()InitQueue();CreatePS(0,9,0,3,2,3);CreatePS(1,38,0,3,-1,0);CreatePS(2,30,0,6,-1,0);CreatePS(3,29,0,3,-1,0);CreatePS(4,0,0,4,-1,0);RunPS();return 0;四, 实验结果分析。部分截图:最后程序运行结束:当两个进程的优先级相同时,按

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

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号