使用动态优先权的进程调度算法的模拟

上传人:人*** 文档编号:468996919 上传时间:2022-12-19 格式:DOC 页数:20 大小:120KB
返回 下载 相关 举报
使用动态优先权的进程调度算法的模拟_第1页
第1页 / 共20页
使用动态优先权的进程调度算法的模拟_第2页
第2页 / 共20页
使用动态优先权的进程调度算法的模拟_第3页
第3页 / 共20页
使用动态优先权的进程调度算法的模拟_第4页
第4页 / 共20页
使用动态优先权的进程调度算法的模拟_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

1、实验三 使用动态优先权的进程调度算法的模拟http:/ 进程标识符idl 进程优先数priority,并规定优先数越大的进程,其优先权越高;l 进程已占用的CPU时间cputime;l 进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;l 进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;l 进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态l 进程状态state;l 队列指针next,用来将PCB排成队列(3)优先数改变的原则:l 进程在就绪队列中呆一个时间

2、片,优先数增加1l 进程每运行一个时间片,优先数减3。(4)假设在调度前,系统中有5个进程,它们的初始状态如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:RUNNING PROG: iREADY_QUEUE:-id1-id2BLOCK_QUEUE:-id3-id4=ID 01234PRIORITY P0P1P2P3P4C

3、PUTIME C0C1C2C3C4ALLTIME A0A1A2A3A4STARTBLOCK T0T1T2T3T4BLOCKTIME B0B1B2B3B4STATE S0S1S2S3S43、思考题(1)在实际的调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?队列实现:#include#include/#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 *maxnod

4、e=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; 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

5、; 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-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)

6、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-at=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=N

7、ULL; 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.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 q

8、ueue 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 pcbM; 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; p

9、run-next=NULL; pblock-next=NULL; printf(please input the number of pcb :n); scanf(%d,&L); pready-ne #include#include/#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; p

10、2=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; 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;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

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