实验A.4使用动态优先权的进程调度算法的模拟

上传人:新** 文档编号:486561435 上传时间:2023-11-01 格式:DOC 页数:16 大小:62.50KB
返回 下载 相关 举报
实验A.4使用动态优先权的进程调度算法的模拟_第1页
第1页 / 共16页
实验A.4使用动态优先权的进程调度算法的模拟_第2页
第2页 / 共16页
实验A.4使用动态优先权的进程调度算法的模拟_第3页
第3页 / 共16页
实验A.4使用动态优先权的进程调度算法的模拟_第4页
第4页 / 共16页
实验A.4使用动态优先权的进程调度算法的模拟_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《实验A.4使用动态优先权的进程调度算法的模拟》由会员分享,可在线阅读,更多相关《实验A.4使用动态优先权的进程调度算法的模拟(16页珍藏版)》请在金锄头文库上搜索。

1、. .实验四 使用动态优先权的进程调度算法的模拟hi.baidu./xinghui100/blog/item/c41d5c1b325b40d0ad6e75dc.html1、实验目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2、实验容1用C语言来实现对N个进程采用动态优先算法的进程调度;2每个用来标识进程的进程控制块PCB用构造来描述,包括以下字段:l 进程标识符idl 进程优先数priority,并规定优先数越大的进程,其优先权越高;l 进程已占用的CPU时间cputime;l 进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;l 进程的阻塞时间

2、startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;l 进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态l 进程状态state;l 队列指针next,用来将PCB排成队列3优先数改变的原那么:l 进程在就绪队列中呆一个时间片,优先数增加1l 进程每运行一个时间片,优先数减3。4假设在调度前,系统中有5个进程,它们的初始状态如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREAD

3、YREADYREADYREADYREADY5为了清楚地观察诸进程的调度过程,程序应将每个时间片的进程的情况显示出来,参照的具体格式如下:RUNNING PROG: iREADY_QUEUE:-id1-id2BLOCK_QUEUE:-id3-id4=ID 01234PRIORITY P0P1P2P3P4CPUTIME C0C1C2C3C4ALLTIME A0A1A2A3A4STARTBLOCK T0T1T2T3T4BLOCKTIME B0B1B2B3B4STATE S0S1S2S3S43、思考题1在实际的调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作.队列实现:*include/

4、*define NULL 0*define M 10 typedef struct node int id; int pr; int ct; int at; int bt; int sb; struct node *next; jd;jd *max(jd *p) jd *maxnode=NULL,*p1,*p2,*p3=p; int maxnum; p1=p; p2=p; if(p-next=NULL) return NULL; maxnum=p-next-pr; while(p1-next!=NULL) p2=p1-next; if(maxnum pr) maxnode=p2; p3=p1;

5、 maxnum=p2-pr; p1=p1-next; p3-next=maxnode-next; maxnode-next=NULL; return maxnode; void blocktoready(jd *pblock,jd *pready) jd *p1=pblock,*p3; while(p1-next!=NULL) p3=p1-next; if(p3-bt=0) p1-next=p3-next; p3-next=pready-next; pready-next=p3; p1=p1-next; if(p1=NULL) break;void ready(jd *p) jd *p1=p-

6、next; while(p1!=NULL) p1-pr+; p1=p1-next;void run(jd *p) jd *p1; if(p-next!=NULL) p1=p-next; p1-pr=p1-pr-3; p1-at-; p1-ct+; void block(jd *p) jd *p1=p-next; while(p1!=NULL) p1-bt-; p1=p1-next;void runtoreadyorblock(jd *prun,jd *pready,jd *pblock) jd *p; if(prun-next=NULL) return; p=prun-next; if(p-a

7、t=0) prun-next=NULL; else if(p-ct=p-sb) p-next=pblock-next; pblock-next=p; prun-next=NULL; else p-next=pready-next; pready-next=p; prun-next=NULL; jd *head(jd pcb,int L) int i; for(i=0;iL;i+) printf(input pcd%d informationn,i); printf(PRIORITY:); scanf(%d,&pcbi.pr); printf(ALLTIME:); scanf(%d,&pcbi.

8、at); printf(STARTBLOCK:); scanf(%d,&pcbi.sb); printf(BLOCKTIME:); scanf(%d,&pcbi.bt); pcbi.id=i; pcbi.ct=0; for(i=0;inext=NULL) printf(ttthe queue are emptyn); while(p-next!=NULL) p1=p-next; printf(tt%dt%dt%dt%dt%dt%dn,p1-id,p1-pr,p1-ct,p1-at,p1-sb,p1-bt); p=p-next; if(p=NULL) break;int main() jd pc

9、bM; jd *pready=(jd *)malloc(sizeof(jd); jd *prun=(jd *)malloc(sizeof(jd); jd *pblock=(jd *)malloc(sizeof(jd); int L,i,n=1; pready-next=NULL; prun-next=NULL; pblock-next=NULL; printf(please input the number of pcb :n); scanf(%d,&L); pready-next=head(pcb,L); while(1) prun-next=max(pready); run(prun); ready(pready); block(pblock); printf(running%d every pcb information:n,n); printf(ttidtprtcttattsbtbtn); printf(the ready pcb:n); print(pready); printf(the run pcb:n); print(prun); printf(the block pcb:n); print(pblock); printf(the all pcb:n); for(i=0;inext=NULL & pblock-next=NULL) break;xt=

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

当前位置:首页 > 建筑/环境 > 施工组织

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