使用动态优先权的进程调度算法的模拟实验_第1页
使用动态优先权的进程调度算法的模拟实验_第2页
使用动态优先权的进程调度算法的模拟实验_第3页
使用动态优先权的进程调度算法的模拟实验_第4页
使用动态优先权的进程调度算法的模拟实验_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用动态优先权的进程调度算法的模拟实验 1实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。 2实验内容 (1 )用C语言实现对N个进程采用动态优先权优先算法的进程调度; (2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: 进程标识数; 进程优先数priority,并规定优先数越大的进程,其优先权越高; 进程已占用的CPU时间cputime ; 进程还需占用的 CPU时间alltime,当进程运行完毕时,alltime变为0; 进程的阻塞时间startblock,表示当进程再运行 startblock个时间片后,进程将进入阻塞 状态; 进程被阻塞的时间 b

2、licktime,表示已阻塞的进程再等待blocktime个时间片后,将转换 为就绪态; 进程状态state ; 队列指针next,用来将PCB排成队列。 (3)优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数增加1. 进程每运行一个时间片,优先数减3。 (4)假设在调度前,系统中有 5个进程, 它们得 初始状态如下 ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBLOCK2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE READY READY REA

3、DY READY READY (5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来, 参照的具体格式如下: RUNNING PROG i READY_QUEUE -id1-id2 BLOCK_QUEUE -id3-id4 ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CPUTIME C0 C1 C3 C4 C5 ALLTIME A0 A1 A2 A3 A4 STARTBLOCKT0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S4 4代码 #i nclude #i nclud

4、e #in elude typedef struct node int id; int priority; int cputime; int alltime; int startblock; int blocktime; char state10; struct node *n ext; PCB; /进程标识数 /进程优先数,优先数越大优先级越高 /进程已占用的CPU时间 /进程还需占用的 CPU时间 /进程的阻塞时间 /进程被阻塞的时间 /进程状态 /队列指针 PCB *CreatQueue(int num)/ 创建一个就绪队列 int i;/i为循环计数器 PCB *head, *temp

5、1, *temp2, *temp3;/head 为就绪队列的头指针,temp1 为创 建进程结点的指针,temp2、temp3分别为比较结点的前驱结点和比较结点 for(i=0; iid, if(i=0)/如果创建的是第一个结点 head=temp1; head- next=NULL; con ti nue; if(head-priority priority)/如果创建结点中所保存的数比头结点所 保存的数要大,则直接把该结点插入到头结点之前 temp1- n ext=head; head=temp1; con ti nue; temp2=head; temp2为比较结点的直接前驱结点 tem

6、p3为比较的结点 temp3=temp2-n ext; while(temp3!=NULL temp3=temp2-n ext; temp2-n ext=temp1; temp1- n ext=temp3; retur n head; PCB *ln sertQueue(PCB *head,PCB *run)/ 在就绪队列中插入一个结点 PCB *temp1,*temp2;temp1和temp2分别为比较结点的前驱和比较结点 if(head=NULL)/如果就绪队列为空 head=run; head- next=NULL; else if(head-priority n ext=head; h

7、ead=run; else temp仁head;/tempi为比较结点的直接前驱结点 temp2=temp1-next;temp2 为比较的结点 while(temp2!=NULL temp2=temp1- n ext; tempi- n ext=r un; run-n ext=temp2; retur n head; main () int num; int alltime=0; n um为进程的个数 /用来保存所有进程需要占用的CPU时间 PCB *head;/head为就绪队列的头指针 PCB *run=NULL;/run为执行进程结点的指针 PCB *block=NULL;/block

8、为阻塞进程的结点 PCB *temp; printf(”请输入进程的个数:”); scan f(%d, head=CreatQueue( nu m); getchar(); temp=head; while(temp!=NULL) alltime+=temp-alltime; temp=temp-n ext; while(alltime 0) if(head!=NULL) run=head;/把就绪队列中的第一个进程取出来执行 head=head- next; /就绪队列的头指针指向下一个结点 strcpy(run-state,run);/ 状态改为执行 run- next=NULL; /*显

9、示状态*/ printf(RUNNING PROG:%dn,run-id);/ 显示执行进程 printf(READY_QUEUE:);/ 显示就绪进程 temp=head; while(temp!=NULL) prin tf(-%d,temp-id); temp=temp-n ext; prin tf(n); printf(BLOCK_QUEUE:);/ 显示阻塞进程 if(block!=NULL) prin tf(%d,block-id); prin tf(n); prin tf(”= :=n); prin tf(ID PRIORITY CPUTIME ALLTIMESTARTBLOCKB

10、LOCKTIME STATEn); printf(%d %d %d %d %d %d %sn,ru n-id,ru n-priority,ru n-cputime,ru n-alltime,ru n-startblock,ru n-blocktime,ru n- state); temp=head; while(temp!=NULL) printf(%d%d %d %d %d %d %sn ,temp-id,temp-priority,temp-cputime,temp-alltime,temp-startblock,temp-block time,temp-state); temp=temp

11、-n ext; if(block!=NULL) printf(%d%d %d %d %d %d %s,block-id,block-priority,block-cputime,block-alltime,block-startblock,block-blockti me,block-state); prin tf(n); prin tf(”= =n); /*显示状态*/ /*改变优先数*/ run-priority-=3; temp=head; while(temp!=NULL) temp-priority+=1; temp=temp-n ext; /*改变优先数*/ /*改变执行进程的有关

12、参数 run-cputime+=1; run-alltime-=1; if(run-alltime!=O) /执行进程的优先数减3 /就绪进程的优先数加1 */ /执行进程的已占用 CPU时间加1 II还需要的CPU时间减1 if(run-startblock 0) run-startblock-=1; II如果该进程会被阻塞 II执行完一个时间片后,开始阻塞的时间减 if(run-startblock=0) II如果阻塞的时间到了 1 block=run;II执行转阻塞 strcpy(block-state,b); II 状态转阻塞 alltime-; prin tf(n); con ti

13、nue; strcpy(ru n-state,r);/ 状态转就绪 head=l nsertQueue(head,ru n);/ 执行转就绪 run=NULL; /*改变执行进程的有关参数 */ alltime-; else /*显示状态*/ printf(RUNNING PROG:n”); prin tf(READY_QUEUE:n); prin tf(BLOCK_QUEUE:); if(block!=NULL) prin tf(%d,block-id); /显示执行进程 /显示就绪进程 /显示阻塞进程 prin tf(n); prin tf(”= =n); prin tf(ID PRIOR

14、ITY CPUTIME ALLTIMESTARTBLOCKBLOCKTIME STATEn); if(block!=NULL) printf(%d%d %d %d %d %d %s,block-id,block-priority,block-cputime,block-alltime,block-startblock,block-blockti me,block-state); prin tf(n); prin tf(= 、n); /*显示状态*/ /*改变阻塞进程的有关参数 if(block!=NULL) block-blocktime-=1; */ /如果有阻塞进程 /被阻塞的时间减1 i

15、f(block-blocktime=0) /如果被阻塞的时间到了 strcpy(block-state,r); /状态转就绪 /阻塞转就绪 head=In sertQueue(head,block); block=NULL; /*改变阻塞进程的有关参数*/ getchar(); 5运行结果 输入5个进程,分别是 第二次运行的进程是进程 同时下一个进程(进程 04进程,运行结果可以看到第一次运行进程1,优先数为38。 1,优先数为35, cpu时间占用为1,进程所需时间为2, 1 )的优先数+1。 D:CodeC_C odeXtestXtet, 3.exe .=1 回 輕 RUNNING PRO

16、Gi2 READV.QUEUE1-3-0-4 BLOCK.QUEUE: IDPRIORITY CPUTinE ALLIIME STfiRTBLOCK BLOCKTIME STATE 232 0 6 -1 9 run 132 2 1 -1 & 3* B31 & 3 -1 0 readj? = M11 a 3 2 3 ready 42 6 4 -1 0 re adj? RUNNING PROG:1 REABV_QUEUE:-3-2-0-4 BLOCK.QUEUE: IDPRIORITY CHITIHE ALLIIHE STARTBLOCK BLOCKTIHE STfiTE 133 2 1 -1 f

17、l run 332 0 3 -1 0 readih 229 1 5 -1 0 r 0 12 0 3 2 3 reader 43 0 4 -1 0 re ad if RUNNING PROG:3 REfiDV_QUEUE:-2-0-4 E:LOCK_QUEUE: ID PRIORITY CPUTINE ftLLTIME STARTBLOCK HL0CKT1HE STATE .i 33 Q 3 -1 & run 2 30 1 S -1 0 r 0 13 6 3 2 3 readj 4 4 0 4 -1 0 re adv 第三次运行进程2,优先数32, cpu占用时间将+1,所需时间将-1。 同时下

18、一个进程(进程 1)优先数+1,。 第四次运行进程1,优先数33, cpu占用时间2+1,所需时间将-1。 同时下一个进程(进程 3)优先数+1, 第四次运行进程1完毕,所需时间为 0。进程1运行完毕。 第五次运行进程3,优先数33, cpu占用时间0将+ 1,所需时间3将-1。 同时下一个进程(进程 2)优先数+1。 D: CodeC_Code .test te?t_3.ej3-4 BLOCK.QUEUE: ID PRIOBITV CFUTIHE ALLTIME STfiRTBLOCK BLOCK!IME STATE 2 31 1 5 -1 9 run .1 30 1 2 -1 & 3* 0

19、 14 0 3 2 3 readj? 4 5 甘 4 -1 0 ready RUNNING PROG:3 HEfiMf.QUEUE:-2-0-4 biLOCK.QUEUE: ID PRIORITY CFUTiriE ALLTIME STfiRTBLOCK BLOCKTIME STATE g 31 1 2 -1 Q run 2 29 2 4 -1 fl r 15 0 3 2 3 readih 4 6 0 4 -1 0 ready RUNNING PROGt2 READV_4UEUE:-3- BLOCICQUEUE: ID PRIORITV CFUTIHE ALLTIME SIfiRTBLOCK

20、BLOCKTIME STATE 2 29 2 4 -1 0 run :t 28 2 1 -1 0 r 16 Q 3 2 3 readjyr 4 7 0 4 -1 0 ready 第六次运行进程2,优先数31将-3, cpu占用时间 同时下一个进程(进程 3)优先数+1。 第七次运行进程3,优先数31将-3,cpu占用时间 同时下一个进程(进程 2)优先数+1。 第八次运行进程2,优先数29将-3,cpu占用时间 1将+1,所需时间 1将+1,所需时间 2将+1,所需时间 5 将-1。 2 将-1。 4 将-1 。 同时下一个进程(进程 3)优先数+1。 D: CodeC_Code.ej2-0-

21、4 11 LOCK_QUEUE: 】D PflIORIT CPUT1HE ALLTIME T ARTBLOCK BLOCK!1ME STATE 3 29 2 1 1 0 run 2 26 3 3 -1 0 r 0 17 6 3 2 3 read 4 8 0 4 -1 0 ready RUNNING PROG:2 IreapvEUE:-0-4 Irlock.queue: s s B-4 IbLOCK.QUEUE: ID PRIORITV CPUTJHE ALLIIME STARTBLOCK BLOCKTIME STATE 2 24 4 2 -1 0 run M 19 0 3 2 3 readj

22、4 10 0 4 -1 0 ready 第九次运行进程3,优先数29将-3, cpu占用时间2将+1,所需时间1将-1。 同时下一个进程(进程 2)优先数+1。 第九次运行完毕,进程3的所需时间为0,进程3运行完毕。 第十次运行进程2,优先数27将-3,cpu占用时间3将+1,所需时间3将-1。 同时下一个进程(进程 0)优先数+1。 第十一次运行进程 2,优先数24将-3,cpu占用时间4将+1,所需时间2将-1。 同时下一个进程(进程 0)优先数+1。 D: Co deC_C o de test、. ex e.=| 回 Running prog:2 REmUEUE 冶 BLOCK.QUEU

23、E: IDPRIORITY CPUTIME ALLTIME STfiRTBLOCK BLOCKTIME STATE 2 21 5 1 -1 0 run 0 20 0 m 2 3 ready 411 & 4 -1 & Feady RUNNING PROG:0 RERDV_qUEUE:-4 BL0Ck_4UEUE! IDPRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE 0 21 0 3 2 3 run 412 0 4 -1 0 ready RUNNING PROG:0 REfiDY.QUEUE:-4 E:LOCK_QUEUE: IDPfllOR

24、lTV CPUTIME ALLTIME STARTBLOCK ULOCKT1HE STATE 0 18 1 2 1 3 run 413 0 4 -1 0 ready RUNNING PAOGE4 READV.QUEUE: BLOCK_QUEUE:0 IDPRIORITY CPUTIHE ALLIIME SIARTBLOCK BLOCKT1ME STfiTE 414 0 4 -1 0 run 0IS 2 1 0 3 b 第十二次运行进程 2,优先数21将-3, 同时下一个进程(进程 0)优先数+1。 第十二次运行完毕,进程 第十三次运行进程 0, 同时下一个进程(进程 第十四次运行进程 0, 同

25、时下一个进程(进程 第十五次运行进程 4, 同时下一个进程(进程 cpu占用时间5将+1, 所需时间 1将-1 2所需时间为 优先数21将-3, 4)优先数+1。 优先数18将-3, 4)优先数+1。 优先数14将-3, 0)优先数+1。 0,进程2运行完毕。 0 将+1, cpu cpu cpu 占用时间 占用时间 占用时间 所需时间 3将-1 1 将+1, 0 将+1, 所需时间 所需时间 2将-1 4将-1 RUNNING PROG:4 READV.QUEUE: B;LOCK_QUEUE:0 IDPRIORITY CPUTinE ALLIIME STfiRTBLOCK BLOCKTIME

26、 STfiTE 1 3 -1 9 run B15 2 1 0 2 b RUNNING PROG:4 HiEADY .QUEUE: BLOCK_QUEUE:0 IDPRIORITY CPUTIHE ALLTIME STARTBLOCK BLOCKTIME STATE 48 2 2 -1 & run 015 2 1 0 1 b RUNNING PflOGiE) REfiDV.QUEUE:-4 HILOCK.QUEUE: IDPRIORITY CPUTJHE ALLTIME STfiRTBLOCK BLOCKTIME STATE B15 2 1 0 0 run P 5 3 1 L Q r FANNI

27、NG PROG:4 READVQUEUE: BLOCK-QUEUE: IDPRIORITY CPUTIME ALLTINE UARIBLOCK BLOCKT1ME STATE 46 3 1 -1 Q run - 第十六次运行进程 4,优先数11将-3, cpu占用时间1将+1,所需时间3将-1。 同时下一个进程(进程 0)优先数+1。 第十七次运行进程 4,优先数8将-3,cpu占用时间2将+ 1,所需时间2将-1。 同时下一个进程(进程 0)优先数+1。 第十八次运行进程 0,优先数15将-3,cpu占用时间2将+1,所需时间1将-1。 同时下一个进程(进程 4)优先数+1。 第十八次运行完毕,进程0所需时间为0,进程0运行完毕。 第十九次运行进程 4,优先数6将-3,cpu占用时间3将+ 1,所需时间1将-1。 RUNNING READV.QUEUEi-M BLOCK.QUEUE: IDPRIORITY CPUTJHE A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论