




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、可抢占调度算法(在VC下编译通过)#include #include #include #include #include #include const int FINISH=0;/完成状态const int RUNNING=1;/运行状态const int READY=2;/就绪状态const int PCBNUM=3;/进程个数typedef struct long pid;char pname10;int pstate;int pneedtime;int ptime;int priority;pcbs;/pcb结构class pcbnode;/队列结点class pcbnodepubli
2、c:pcbs *pcb;pcbnode *link;pcbnode();pcbnode();int run();/运行操作int runend();/运行结束?int insertnode(pcbnode *p,pcbnode *q);/在q后插入结点pint deletenode(pcbnode *p,pcbnode *q);/删除p结点,q为p的前驱int addnode(pcbnode *p);/增加结点;pcbnode:pcbnode()pcb=0;link=0;pcbnode:pcbnode()if(link)delete link;if(pcb)pcb-pstate=FINISH;
3、int pcbnode:run()pcb-pstate=RUNNING;+(pcb-ptime);pcb-priority-;/优先级降低return 0;int pcbnode:runend()return (pcb-pneedtimeptime);int pcbnode:addnode(pcbnode *p)pcbnode *q;q=this;p-pcb-pstate=READY;while(q-link)q=q-link;q-link=p;return 0;int pcbnode:insertnode(pcbnode *p,pcbnode *q)p-link=q-link;q-link=
4、p;return 0;int pcbnode:deletenode(pcbnode *p,pcbnode *q)q-link=p-link;p-link=0;return 0;int randInt( int seed)/随机函数:产生不大于seed的正整数int r;r=rand();while(rseed|rpid=order;strcpy(pcb-pname, proc);_itoa(order,buf,10);strcat(pcb-pname,buf);pcb-pneedtime=randInt(5);/进程需要时间pcb-ptime=0;pcb-priority=randInt(10
5、);/优先度void pprint(pcbs *pcb, int count)/打印进程状态ofstream ofs(result.txt, ios:out|ios:app);coutidtnametstattneedtruntimetpriendl;ofsidtnametstattneedtruntimetpriendl;for(int i=0;icount;i+)coutpcbi.pidt pcbi.pnamet;ofs pcbi.pidt pcbi.pnamet;switch(pcbi.pstate) case RUNNING:coutRU;ofsRU;break;case READY:
6、coutRE;ofsRE;break;case FINISH:coutFI;ofsFI;break;couttpcbi.pneedtime;ofstpcbi.pneedtime;couttpcbi.ptime;ofstpcbi.ptime;couttpcbi.priority;ofstpcbi.priority;coutendl;ofsendl;void priority(pcbs *pcb, int pcbsnum)/可抢占的优先调度/* 从就绪队列中取出最优先的进程送到运行队列* 每运行一次,正在运行的进程优先数减1,等待的进程优先数加1* 如果就绪队列中的最大优先数进程的优先数大于正在运
7、行的优先数,* 则运行的进程让出cpu,排到就绪队列的尾部,将最大优先数的进程送进* 运行队列。*/pcbnode running,ready,blocked;pcbnode *p,*f,*front;pcbnode *q;/*将进程表中的进程加到就绪队列中*/for(int i=0;ipcb=pcb+i;ready.addnode(p);while(ready.link|running.link)/判断将运行队列中的进程是否结束if(running.link)if(running.link-runend() /运行结束?p=running.link;p-pcb-priority=0;runn
8、ing.link=0;delete p;/寻找最大的一个优先级p=ready.link;q=p;f=&ready;front=f;if(p)int maxpri=p-pcb-priority;while(p)if(p-pcb-prioritymaxpri)maxpri=p-pcb-priority;front=f;q=p;f=p;p=p-link;/如果最大优先级大于正在运行的优先级则强占cpu/p=running.link;if(q)if(p)if(p-pcb-prioritypcb-priority)ready.addnode(p);running.deletenode(p, &runni
9、ng);p-pcb-pstate=READY;running.addnode(q);ready.deletenode(q,front);q-pcb-pstate=RUNNING;elserunning.addnode(q);ready.deletenode(q,front);q-pcb-pstate=RUNNING;/* * 运行进程 */p=running.link;q=&running;if(p)int r;r=p-run();/运行进程 /动态计算就绪队列优先级p=ready.link;while(p)(p-pcb-priority)+;p=p-link;/print proc stat
10、epprint(pcb,pcbsnum);void main(int argc, char* argv)pcbs *pcblist;/进程表remove(result.txt);pcblist=new pcbsPCBNUM;/为进程表分配空间for(int i=0; iPCBNUM; i+)newpcb(pcblist+i),i);/产生进程pprint(pcblist,PCBNUM);/打印进程priority(pcblist,PCBNUM);/可强占优先法delete pcblist;/释放进程空间用C语言编写如下:实验(一)一, 实验内容: 三,实验内容(任选一个)1、按优先权调度算法实
11、现处理机调度的程序; PCB内容:要求进程名/PID;要求运行时间(单位时间);优先权;l例如:5状态:登记进程当前状态(就绪、执行、阻塞)PCB指针;指向本进程队列中下个进程的PCB1、可随时输入若干进程,并按优先权排序;2、从就绪队首选进程运行:优先权-1,要求运行时间-1,要求运行时间=0时,撤销该进程3、重新排序,进行下轮调度;4、每次调度后,显示各进程状态。七,源程序清单:#include #include #include #include #define NULL 0#define FINISH 1#define RUNNING 2#define READY 3struct pc
12、bsint pid;int pstate;int pneedtime;int ptime;int priority;struct pcbs *link;pcbs;struct pcbs *running,*ready;struct pcbs *pcblist;int PCBNUM;FILE *fp;void run(struct pcbs *p)p-pstate=RUNNING;p-ptime=p-ptime+1;if(PCBNUM!=1)p-priority=p-priority-1;int runend(struct pcbs *p)if(p-ptime=p-pneedtime)p-pst
13、ate=FINISH;p-priority=NULL;return 1;elsereturn NULL;struct pcbs *deletenode(struct pcbs *p,struct pcbs *q)struct pcbs *f,*g;f=p;g=q;if(p=q)f=f-link;if(p-link) p-link=NULL;return f;else while(f-link!=g) f=f-link; f-link=g-link; if(g-link) g-link=NULL; return p;struct pcbs *addnode(struct pcbs *q,stru
14、ct pcbs *p)struct pcbs *g,*f,*d;f=q;d=p;if(f=NULL)f=d;d-pstate=READY;return f;elseg=q;while(q-link) q=q-link;d-pstate=READY;q-link=d;return g;int randInt(int seed)int r;r=rand();while(rseed|rpid); fprintf(fp,%dt,f-pid); switch(f-pstate) case RUNNING: printf(RUt); fprintf(fp,%st,RU); break; case READ
15、Y: printf(REt); fprintf(fp,%st,RE); break; case FINISH: fprintf(fp,%st,FI); printf(FIt); break; default: printf( t); fprintf(fp,%st, ); printf(%dt,f-pneedtime); fprintf(fp,%dt,f-pneedtime); printf(%dt,f-ptime); fprintf(fp,%dt,f-ptime); printf(%dn,f-priority); fprintf(fp,%dn,f-priority); printf(n); f
16、=f-link; i+;if(i=PCBNUM|i=1)fprintf(fp,%sn,=);void priority()struct pcbs *addnode();void pprint();void run();struct pcbs *deletenode();int runend();int i=0;int maxpri;struct pcbs *p,*q;struct pcbs *f;if(PCBNUM=1) running=pcblist; while(!runend(running) run(running); pprint(running); pprint(pcblist);
17、else while(ipriority=0; ready=addnode(ready,f); f-pstate=FINISH; running=deletenode(running,f); i+; q=ready; p=ready; maxpri=p-priority; while(p) if(p-priority)maxpri) maxpri=p-priority; f=p; q=p; p=p-link; p=running; if(p&q&(p-priority)priority) p-pstate=READY; q-pstate=RUNNING; ready=addnode(ready
18、,p); running=deletenode(running,p); running=addnode(running,q); ready=deletenode(ready,q); else if(!runend(q)&running=NULL) q-pstate=RUNNING; running=addnode(running,q); ready=deletenode(ready,q); p=ready; while(p) if(p-pstate!=FINISH)&(p-pstate!=RUNNING)(p-priority)+; p=p-link; if(running|ready) if
19、(ready) pprint(ready); if(running)run(running);pprint(running);p=ready; main( )int i,j=0;struct pcbs *p=NULL,*q=NULL;void priority();void pprint();struct pcbs *addnode();int randInt();if(fp=fopen(result1.txt,a)=NULL)printf(cannot open file!n);exit(1);printf(nenter pcbnum(ensure pcbnum0):);scanf(%d,&
20、PCBNUM);while(PCBNUM0) /*可随时加入进程*/for(i=0;ilink=NULL; p-pid=i+j; p-pneedtime=randInt(10); p-ptime=0; p-priority=randInt(10); if (q=NULL) pcblist=q=p; p=NULL; else q-link=p;q=q-link;p=NULL;running=NULL;pprint(pcblist);q=pcblist;while(q) ready=addnode(ready,q); /*将进程加入后备队列*/ q=deletenode(q,q);pprint(r
21、eady);priority();for(i=0;ilink; free(p); j=j+PCBNUM;printf(nenter pcbnum:);scanf(%d,&PCBNUM);fclose(fp); 实验(二) 一, 实验内容:实现主存储器的分配和回收。二, 实验题目:在可变分区管理方式下,用最先适应算法实现主存空间的分配和回收。注:提示及要求: 1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目)2、结合实验一,PCB增加为: PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针3、采用最先适应算法分配主
22、存空间;4、进程完成后,回收主存,并与相邻空闲分区合并。三, 实验原理:目前的内存分区管理办法分为两种类型:连续分配方式和离散分配方式,其中连续分配方式又存在两种形式:静态分区分配和动态分区分配。这次实验采用的是连续分配算法中的动态分区分配算法中的最佳适应算法:其原理如下:每次为作业分配内存时,总是把能满足要求,又是最小的空闲分区分配给作业,实现对分配空间的合理利用。三、 程序清单:#include #include #include #include #define NULL 0#define FINISH 1#define RUNNING 2#define READY 3#define N
23、UM 50struct pcbsint pid;int pstate;int pneedtime;int ptime;int priority;int needsize;int startaddress;struct pcbs *link;pcbs;struct pcbs *running,*ready;struct pcbs *pcblist;int PCBNUM;FILE *fp;struct wordint flag;int size;int address;struct word *next,*llink;struct pcbs *space;word;void run(struct
24、pcbs *p) /*运行进程*/p-pstate=RUNNING;p-ptime=p-ptime+1;if(PCBNUM!=1)p-priority=p-priority-1;int runend(struct pcbs *p) /*判断进程是否运行完毕*/if(p-ptime=p-pneedtime)p-pstate=FINISH;p-priority=NULL;return 1;elsereturn NULL;struct pcbs *deletenode(struct pcbs *p,struct pcbs *q) /*删除节点*/struct pcbs *f,*g;f=p;g=q;i
25、f(p=q) /*要删除节点是头节点*/f=f-link;if(p-link) p-link=NULL;return f;else /*要删除节点不是头节点*/ while(f-link!=g) f=f-link; f-link=g-link; if(g-link) g-link=NULL; return p;struct pcbs *addnode(struct pcbs *q,struct pcbs *p) /*增加节点*/struct pcbs *g,*f,*d;f=q;d=p;if(f=NULL) /*把节点增加到队列的队首*/f=d;d-pstate=READY;return f;e
26、lseg=q;while(q-link) q=q-link;d-pstate=READY;q-link=d;return g;int randInt(int seed) /*产生不大于seed的随机数*/int r;r=rand();while(rseed|rpid); fprintf(fp,%dt,f-pid); switch(f-pstate) case RUNNING: printf(RUt); fprintf(fp,%st,RU); break; case READY: printf(REt); fprintf(fp,%st,RE); break; case FINISH: fprin
27、tf(fp,%st,FI); printf(FIt); break; default: printf( t); fprintf(fp,%st, ); printf(%dt,f-pneedtime); fprintf(fp,%dt,f-pneedtime); printf(%dt,f-ptime); fprintf(fp,%dt,f-ptime); printf(%dt,f-priority); fprintf(fp,%dt,f-priority); printf(%dtt,f-needsize); fprintf(fp,%dtt,f-needsize); printf(%dn,f-starta
28、ddress); fprintf(fp,%dn,f-startaddress); fprintf(fp,n); printf(n); f=f-link; i+;if(i=PCBNUM|(i=1&p!=ready)fprintf(fp,%sn,-);printf(-);void priority() /*可抢占优先调度算法*/struct pcbs *addnode();void pprint();void run();struct pcbs *deletenode();int runend();int i=0;int maxpri;struct pcbs *p,*q;struct pcbs *
29、f;if(PCBNUM=1) running=pcblist; while(!runend(running) run(running); pprint(running); pprint(pcblist);else while(ipriority=0; ready=addnode(ready,f); f-pstate=FINISH; running=deletenode(running,f); i+; q=ready; p=ready; maxpri=p-priority; while(p) /*动态寻找最大的一个优先级*/ if(p-priority)maxpri&p-pstate!=FINI
30、SH) maxpri=p-priority; f=p; q=p; p=p-link; p=running; if(p&q&(p-priority)priority) /*如果最大优先级大于正在运行的优先级则强占cpu*/ p-pstate=READY; q-pstate=RUNNING; ready=addnode(ready,p); running=deletenode(running,p); running=addnode(running,q); ready=deletenode(ready,q); else if(!runend(q)&running=NULL) q-pstate=RUN
31、NING; running=addnode(running,q); ready=deletenode(ready,q); p=ready; while(p) if(p-pstate!=FINISH)&(p-pstate!=RUNNING)(p-priority)+; p=p-link; if(running|ready) if(ready) pprint(ready); if(running)run(running); /*运行进程*/pprint(running);p=ready; main( )int i,j,sum=0,k=0;struct pcbs *p=NULL,*q=NULL;st
32、ruct word *pav=NULL,*s=NULL,*f=NULL;void priority();void pprint();struct pcbs *addnode();int randInt();if(fp=fopen(result.txt,w)=NULL)printf(cannot open file!n);exit(1);printf(nenter pcbnum(ensure pcbnum0):);scanf(%d,&PCBNUM);fprintf(fp,nthe pcb number is:%dnn,PCBNUM);for(i=0;ispace=(struct pcbs *)malloc(NUM); /*请求内存*/ if(pav-spa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赠予车辆协议合同书模板
- 设备设施交接协议书范本
- 设计服务广告合同协议
- 贵州营运车买卖合同协议
- 货车微信上订货合同协议
- 购买防雨棚合同协议
- 资产处置协议合同协议
- 试用协议和劳动合同
- 2025年大学物理考试波动现象考察重点试题及答案
- 2025年酒店管理专业毕业考试试题及答案
- 《运算的意义》(教学设计)-2023-2024学年六年级下册数学北师大版
- 广州小学六年级英语下册知识点归纳和习题(全册)
- (正式版)JTT 1482-2023 道路运输安全监督检查规范
- MH-T 5035-2017民用机场高填方工程技术规范
- MOOC 数据挖掘-国防科技大学 中国大学慕课答案
- 2023年中国铁路辽宁沈阳局集团有限公司招聘考试真题
- 失业登记申请表及失业金申领表
- 糖尿病胰岛素治疗专题患教用
- 般现在时和现在进行时练习题附答案
- LY/T 2482.1-2015东北、内蒙古林区森林抚育技术要求第1部分:大兴安岭林区
- FZ/T 91007-2004纺织机械产品涂装工艺
评论
0/150
提交评论