进程调度算法操作系统课程设计_第1页
进程调度算法操作系统课程设计_第2页
进程调度算法操作系统课程设计_第3页
进程调度算法操作系统课程设计_第4页
进程调度算法操作系统课程设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

计算机科学与应用系2操作系统课程设计一、实验目的通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过3、、、、、、、<3操作系统课程设计4=:^^_ready=:^^_ready-queue是否为NT1TY1YN更新新进程就绪队列进程优先数,优先数加1Y创建新进程并加入到ready_queue中N5HLLtineCPUtineHLLtineCPUtineStatereadyreadyreadyrecitlySreadyreadyreadyready(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queuezz*Di\process\Dtsibug\pEocess-eieleascsclcctanHLn'1ThisThisJisaexampleForpi'iorit^pprocess:ingInputthenumbei*oFPCBtobestart■3IDIDpr*TL«ii*i1tyCPUt7xnieALLlrinteStzalzeDDpriorityIBi323碉Dpriority6操作系统课程设计1143t^unnxnsrTheprocessno1ifconpletedt销昱殳』running->Destsrory期度开始变迁1=ready->l^unnin^rrunnxngiheprocess:nu3ifcumplet-edf:Funitiriigf-->Destriory*ircad.^™>mnninsfThepracessno2iscomplelbedlfTheidleD^ocessidrunningT^iil:peadj/—>running变迁1=ready->l^unnin^3htsprocessnu4ifcumplet-edf乍肖艮殳:,本次调度结束。leascselcctamLE=runningrunniinsf—>DeEti*oyrunningFunniiriigfDestriOiry27g"D:\process\Debug\process口1DpriorityCPUtime0QIDppio^ityg"D:\process\Debug\process口1DpriorityCPUtime0QIDppio^ityk>0GFULjLi0ne0heidlepeocessIdmnnIng变迁3L=^eadyrunnjmgheprocessnolisbluckedf32heprocessno2ifcompleted?变迁i=ready->runmipffhep护曲te:生雪nu1~F1=readyiwigZ.exeHLLtime032ALLtineIFunning—>blockedFunffiiFanning-running—>Destrory销毁土runningf■〉Dest^oi*^3If变迁running—>blockedblocked5487584574389574fgffffgfgf变迁1二readjy->runnioggfg389S43?89543758943?8954375(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queueStateStateStatereadyrenadyreadypenady(变迁丄二(变迁丄二™ady">running3322corniplei^edfcorniplei^edfheheidlepeocessidr-imning!+1::peadv一〉running异re^djy->ruvuniiogheprocessnu4IsblockedT21hepFoiCB&sno6ifCDimpleitKdfiruinnmg*runnIng'Desti^OFy8操作系统课程设计9操作系统课程设计材中介绍的算法做了哪些简单化处理优先权模拟时优先权是随机产生,在实际的系统中,系统进程的优先权高于一列,每次调度时,把CPU分配给首进程,并令其用完时,发出中断请求,调度程序便据此信号来停止该进程的执行,并将其送到就绪队列的末尾,如此反复,就可以保证就绪队列中的所有进程在一个给定的时间最高优先权调度算法,常用于批处理系统中,作为作业调度算法,也作为多种高的作业,装入内存,当用于进程调度算法时,该算法是把处理及分配给就绪队列//process.cpp:Define//#include"stdafx.h"#include"stdio.h"#include"stdlib.h"操作系统课程设计intALLtime;intState;PCB*next;voidprint(PCB*pcb);/*输出进程属性信息*/voidinsert();/*生成进程属性信息,插入进程就绪队列*/voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/voidwakeup();/*唤醒进程,插入就绪队列*/voidproc_priority();/*优先权调度算法模拟*/voidproc_loop();/*轮转法调度算法模拟*/voidupdate(PCB*pcb);/*更新进程信息*/voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变操作系统课程设计while(1)cout<<"\\**********PROCESS**********/"while(i){{}elseif(i==2){cout<<("\nThisisaexampleforroundrobinproces}{}}}}{cout<<("\nlDpriorityCPUtimeALLtimeState");while(temp!=NULL){cout<<"\n"<<temp_>ID<<""<<temp->CPUtime<<""<<temp->ALLtime;elseif(temp->State==1)cout<<("running");操作系统课程设计temp=temp->next;}}///////输出进程属性信息voidprint(PCB*pcb){temp=pcb;{cout<<"\n"<<temp_>ID<<""<<temp->CPUtime<<""<<temp->ALLtime;elseif(temp->State==1)cout<<("running");}}///////将item插入到队列中,使得插入后,队列中按照优先级从voidinsert_queue(PCB*queue,PCB*item){q=queue;p=q_>next;while(p!=0&&p->priority>=item->priority){}{}{}操作系统课程设计}voidpushback_queue(PCB*queue,PCB*item){q=queue,p=q_>next;while(p!=0){}}///////对queue中的结点进行排序,按照优先级从大到小voidsort_queue(PCB*&queue){while(queue->next){insert_queue(temp,p);}queue->next=temp->next;}///////生成进程属性信息,插入进程就绪队列,显示进程信息voidinsert(){PCB*newp=0;操作系统课程设计}////////生成n个进程属性信息,插入进程就绪voidinsert(intn){insert();}{idleprocess=(PCB*)malloc(sizeof(PCB));idleprocess->ID=0;idleprocess->next=ready_queue->next;//ready_queue->next=idl//也可以假定初始时系统中只有一个idle进程//输入初始进程的个数{}cout<<("\nIDpriorityCPUtimeALLtimeState'n");insert();cout<<"*就绪队列初始化成功"<<endl;}///////调用destroy()将进程插入阻塞队列{操作系统课程设计{}cout<<"\nTheprocessnprint(pcb);pcb->next=block_queue->next;block_queue->ne}///////{///////{PCB*temp=pcb->next;while{temp_>priority++;temp=temp->next;}}//////////////{wakeup()if(block_queue->next==0)/*此时while(true){while(p&&rand()%20!=1){}{}}print(p);insert_queue(ready_queue,p);操作系统课程设计}...运行进程,随机阻塞进程、产生新进程,插入就绪队列{{insert_queue(ready_queue,pcb);print(pcb);}{pcb->priority=pcb->priorityprint(pcb);if(rand()%3==1)/*PCB不是闲逛进程,满足条件侧阻塞此进程{if(pcb->CPUtime-2<pcb->Aelse/*已执行完毕,应该销毁进程{cout<<"Theprocessno"<<pcb->ID<<"iscompleted!销毁}}如果执行完,则释放,否则再次放入就绪队列操作系统课程设计{if(pcb->CPUtime>=pcb->ALLtime)/*释放*/{cout<<"Theprocessno"<<pcb->ID<<"}{}}}更新就绪队列的优先级数更新就绪队列的优先级数*/if(rand()%5==1){insert(3);}if(rand()%7==1)wakeup();}///////运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程{{insert_queue(ready_queue,pcb);print(pcb);}{pcb->CPUtime=pcb->ALLprint(pcb);不是闲逛进程,满足条件侧阻塞此进程*/if(rand不是闲逛进程,满足条件侧阻塞此进程*/{_state=1;操作系统课程设计{cout<<"Theprocessno"<<pc}}if(rand()%5==1){insert(3);}if(rand()%7==1)wakeup();}///////优先权调度算法模拟voidproc_priority(){sort_queue(ready_queue);PCB*temp=0,*running=0;cout<<"*调度前:";for(;times<5;times++){running=ready_queue->next;ready_queue->next=running-cout<<"*调度开始"<<endl;Run_priority(running);}cout<<"\n*本次调度结束。"<<endl;}///////轮转调度算法模拟voidproc_loop(){PCB*temp=0,*running=0;cout<<"*调度前:";while(1){running=ready_queue->next;操作系统课程设计ready_queue->next=running-{times=times-running->ALLtime;〃每次运行一个进程减去ALLtime;{Run」oop(running);}elseif(_state)//如果运行时被阻塞,则运行2个时间单位{times=times+2;_state=0;cout<<"5487584574389574gfgfg38954378954375894378954375";}pushback_queue(block_queue,running);〃}{cout<<"\n*本次调度时间片到!";}}cout<<"\n*本次调度结束。"<<endl;}操作系统课程设计Linux进程管理一、实验目的析进程争用资源的现象,学习解决进程互斥的方法,了C++compiler宿写,是C/C++语言的编译器。因其后来可以多种语TASK_INTERRUPTIBLE可中断阻塞):Linux将阻塞态划分成TASK_UNINTERRUPTIBLETASK_STOPPEDTTASK_UNINTERRUPTIBL不可中断唤醒):处于该状态的进程只有当资源有效时被唤#include<stdio.h>{while(p1=fork()==-1);//操作系统课程设计{while((p2==fork())==-1);〃创建子进程if(p2==0)}}#include<stdio.h>{while(p仁fork()==-1);〃printf("daugheter%d\n",i);{while((p2==fork())==-1);〃创建子进程printf("son%d\n",i);printf("parent%d\n",i);}}#include<stdio.h>#include<unistd.h>#include<sys/wait.h>#include<sys/stat.h>#include<sys/types.h>#include<fcntl.h>voidmain(){charstr[80];fd=open("myfile",O_RDWR|O_CR{}{操作系统课程设计}printf("Iamaparentprocess,mypidis%d\n",getid());printf("Pleaseinputastring:\n");write(fd,str,sizeof(str));{}{{}{}printf("\nIamaparentprocess,mypidis%d\n",getid());printf("Pleaseinputastring:\n");printf("%s\n",str);}}}父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程用系统调#include<stdio.h>#in

温馨提示

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

评论

0/150

提交评论