




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.1.设计构想程序能够完成以下操作: 创建进程:先输入进程的数目,再一次输入每个进程的进程名、 运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法, 并单步执行,每次执行的结果都从屏幕上输出来。12需求分析在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法, 动态地把处理机分配给就绪队列中的一个进程, 使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为
2、操作系统设计的中心问题之一。本次实验在VC+6.0环境下实现先来先服务调度算法,短作业优先调度算法, 高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。13理论依据为了描述和管制进程的运行,系统为每个进程定义了一个数据结构一一进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控 制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的 PCB而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。14课程任务一、用C语言(或C+)编
3、程实现操作模拟操作系统进程调度子系统的基本功能;运用多 种算法实现对进程的模拟调度。短作业优先、多 加深对处理机分配的二、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、 级反馈队列调度算法, 使学生进一步掌握进程调度的概念和算法, 理解。三、实现用户界面的开发1.5.功能模块分析:1、 进程概念:进程是被独立分配资源的最小单位。进程是动态概念, 必须程序运行才有 进程的产生。2、进程的状态模型:(1)运行:进程已获得处理机,当前处于运行状态。(2)就绪:进程已经准备好,一旦有处理器就可运行。3、 处理机调度:在多道程序设计系统中, 内存中有多道程序运行,他们相互争夺处理机 这一
4、重要的资源。处理机调度就是从就绪队列中, 按照一定的算法选择一个进程并将 处理机分配给它运行,以实现进程并发地执行。4、进程调度算法的功能:记录系统中所有进程的执行情况选择占有处理机的进程进行进程的上下文切换5、进程调度的算法:(1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在 就绪队列的后面,那么先来先服务总是把当前处于就绪队列之首的那个进程调 度到运行状态。优先数算法:即进程的执行顺序由高优先级到低优先级。系统或用户按某种原 则为进程指定一个优先级来表示该进程所享有的确调度优先权。该算法核心是 确定进程的优先级。时间片轮转算法:固定时间片,每个进程在执行一个时间片后
5、,轮到下一进程 执行,知道所有的进程执行完毕。处理器同一个时间只能处理一个任务。处理 器在处理多任务的时候,就要看请求的时间顺序,如果时间一致,就要进行预 测。挑到一个任务后,需要若干步骤才能做完,这些步骤中有些需要处理器参 与,有些不需要(如磁盘控制器的存储过程)。不需要处理器处理的时候,这部 分时间就要分配给其他的进程。原来的进程就要处于等待的时间段上。经过周 密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就 是时间片轮换。多级反馈队列法:又称反馈循环队列或多队列策略,主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短
6、的时间片。处理器调度先从高级就绪进程队列中选取可占有处理器的进程, 只有在选不到时,才从较低 级的就绪进程队列中选取。短作业优先法:对短进程优先调度的算法,它是从后备队列中选择一个或者若 干个进程,将处理机分配给它, 使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。二.设计方案2.1 .先来先服务调度2.1.1 .算法思想先来先服务调度算法的思想是按照进程进入就绪队列的先后顺序调度并分配处理机执 行。先来先服务调度算法是一种不可抢占的算法,先进入就绪队列的进程, 先被处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件而不能继续
7、运行时才释放处理机。2.1.2 .算法流程图J 开始结束图1.先来先服务算法流程图2.1.3 .程序代码#i nclude #i nclude #in elude typ edef struct node/*进程名*/*占用cpu时间*/char n ame10;int cpu time;char starttime5; / 进程开始时间/*要求运行时间*/*状态*/*指针*/int n eedtime;char state;struct node *n ext;P CB;PCB *ready, *run, *finish; II 就绪、执行、结束指针int N; 进程数量void prin
8、t()II 输出函数PCB *p;printf(”NAME CPU TIME STARTTIME NEEDTIME STATUSn);if(run != NULL)printf(”-10s%-10d%-10s%-10d %cn,run-n ame, run-cpu time, run-starttime, run-n eedtime, run-state);I*输出执行的进程的信息*Ip=ready;while( p != NULL)printf(”%-10s%-10d%-10s%-10d %cn,p-n ame,p-cpu time,p-starttime,p-n eedtime,p-sta
9、te);I*输出就绪进程的信息*Ip=p-n ext;p=fini sh;while( p != NULL)printf(”%-10s%-10d%-10s%-10d %cn,p-n ame,p-cpu time,/*指针s指向新要插入的进程*/*指针p1指向原来的进程队列的队首*/*使用指针r是指向p1前面的进程*/*/*/ready 指针 */*为新进程开辟空间*/P-starttime, p-n eedtime, p-state);/*输出结束队列的信息*/p=p-n ext;getcharO; /*使用getchar()函数可以让输出时停留画面,等待人按回车继续*/void in ser
10、t( PCB *q)/*插入新进程,把进程按进程到来时间大小排序PCB *p 1,*s,*r;int b;s=q;P 仁ready;r=p 1;b=1;while( p1!=NULL) &b)if(strcm p(p 1-starttime,s-starttime)n ext;/*新进程的开始时间大,则 p1指向下一个进程继续比elseb=0;if(r!=p1)r-n ext=s; s-n ext =p1; /*新进程找到位置,插在r和p1之间*/elses-n ext=p1; ready=s; /*新进程的开始时间按最小,插在队首,并修改就绪队首void create()PCB *p;int
11、 i;ready=NULL;run=NULL;fin ish=NULL;printf(P lease en ter the n ame and time and starttime of P CB:n);*/*输入进程名、运行时间和开始时间for(i=0;in ame); scan f(%d, &p- needtime); sca nf(%s, p-starttime); p-cpu time=0; p-state=W;if (ready!=NULL) insert(p);else/*输入进程名*/*输入进程要求运行时间*/输入进程开始时间/*表示就绪队列中未在队首先执行,但也是就绪状态/*就
12、绪队首不为NULL,插入新进程*/*否则先插在p-n ext=ready; ready=p;NULL 前*/printf(”prin tf(prin t();getchar();run=ready; /*队列排好,run指向就绪队列队首 ready=ready-next;/*ready 指向下一个进程run-state-R; /*队首进程的状态为就绪 */void FCFS()while(ru n != NULL)Disp lay is going to start:*n);rr);*/*/*/run-cpu time=r un-cpu time+r un-n eedtime;run-n ee
13、dtime=0;run-n ext=fi ni sh;finish = run;run-state=E;run = NULL;if(ready != NULL)run = ready;run-state=R; ready=ready-n ext;prin t();void mai n()prin tf( Please en ter the total number of P CB:n); scan f(%d,&N);please enterthe total nunber of PCB:5Pleaseenterthename and tine and stavttime of PCB:A84B
14、11SC53D109E1213首先输入进程个数5个),这里命名为A,B,C,D,E,然后分别输入运行时间和开始时间并都处于等待状态CABE000812348913581110 0R W W WEcreateO;/*模拟创建进程,并输入相关信息*/FCFS();/*先来先服务调度算法*/2.1.4.测试结果及说明NAMECPUTIMESTARTTIMENEEDTIMESTATUSE01312UC335uA048uB0811uD0913uNAMECPUTIMESIAfiTTIMEMEEDTIMESTATUS所有进程都在队列中,所有进程都执行完毕NAMECPUTIMEstarttiheNEEDTIM
15、ESTATUSD10?EB118eEA84eEC530EE12130E2.2 .优先级调度2.2.1 .算法思想进程的执行顺序由高优先级到低优先级,系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。 级。该算法核心是确定进程的优先2.2.2 .算法流程图图2.优先级调度流程图2.2.3 .程序代码#i nclude #i nclude #in elude typ edef struct node char n ame10; /*int prio;int epu time;int n eedtime;char state;/*/*/*/*/*struct node *n
16、ext;P CB;PCB *ready,*ru n,*fin ish;int N;进程名*/优先数*/占用epu时间*/要求运行时间*/状态*/指针*/*就绪执行结束指针*/void prt() /* 输出函数,可以方便看到进程执行的演示*/PCB *p;pnntf( NAME CP UTIME NEEDTIME P RIORITY STATUSn);if(run !=NULL)prin tf( %-10s%-10d%-10d%-10d %cn,ru n-n ame,ru n-cputime,ru n-n eed time,ru n-p rio,ru n-state);/*输出执行的进程的信息
17、*/p=ready;while( p!=NULL)printf( %-10s%-10d%-10d%-10d %cn, p-n ame, p-c putime, p- needtime, p-prio,p-state);/*输出就绪进程的信息*/p=p-n ext; p=fini sh;while( p!=NULL) printf(” %-10s%-10d%-10d%-10d %cn, p-n ame, p-c putime, p- needtim e,p-p rio, p-state);p=p-n ext; getchar(); /*继续*/void in sert( PCB *q) PCB
18、*p 1,*s,*r;int b;s=q; /*p 1=ready; /*r=p1;/*b=1;/*使用/*输出结束队列的信息*/getcharO函数可以让输出时停留画面,等待人按回车插入新进程,把进程按优先数大小排序*/指针s指向新要插入的进程*/指针p1指向原来的进程队列的队首*/ 使用指针r是指向p1前面的进程*/while( p1!=NULL)&b)if(p1-p rio=s-p rio) r=p1; p1=p1-n ext; 小,则p1指向下一个进程继续比*/else b=0;if(r!=p1) r-n ext=s; s-n ext=p 1; /* p1之间*/else s-n ex
19、t=p1; ready=s; /*首,并/*新进程的优先数新进程找到位置,插在 r和新进程的优先数最大,插在队修改就绪队首ready指针*/void create() PCB *p;int i;ready=NULL; run=NULL; fin ish=NULL; printfCP lease en ter the n ame and time and p riority of P CB:n);/*输入进程名、运行时间和优先级*/for(i=0;iname); /*输入进程名 */scanf(%d,&p-needtime); /*输入进程要求运行时间*/scanf(%d,&p-prio); /
20、*输入进程优先数 */p-cpu time=0;p-state-W;/*态*/if*/表示就绪队列中未在队首先执行,但也是就绪状(ready!=NULL) in sert( p); /*就绪队首不为NULL插入新进程否则先插在NULL前*/else p-n ext=ready; ready=p; /*prin tf(Dis play is going to start:n);prin tf(*n);prt();run-ready; /*队列排好,run指向就绪队列队首*/ready-ready-n ext;/*ready指向下一个进程,这样当进程执行时如果优先数小于其他的进程,应该先进行优先数
21、最大的进程*/run-state-R; /*队首进程的状态为就绪*/void P rio() while(ru nLNULL) run-cpu time-r un-cpu time+1; /*run-n eedtime-r un-n eedtime-1;run-p rio-ru n-p rio-1; /*if(run-n eedtimeO) /* run-n ext-fi ni sh;fini sh-r un;run-state-E;run-NULL;if (ready!=NULL)/*/*fin ish/*/*/*/*运行一次cpu占用时间加一 */ 运行一次要求运行时间减一 */ 运行一次
22、优先数减一 */若要求运行时间为0时*/ 退出队列*/为结束进程的队列*/ 修改状态为结束*/释放run指针*/ 创建新就绪队列的头指针*/ run=ready; run-state=R; ready=ready-n ext; elseif(ready!=NULL )&(run-p riop rio)/*队首进程的优先数比它下一个小,且下一个进程不为NULL时执行*/ run -Astate-W;run- next=NULL; in sert(r un); /* run-ready;/*run-state-R; ready-ready-n ext; Prt(); void mai n() pr
23、in tf( PI ease en ter the total number of PCB:n);sca nf(%d,&N);create(); /*模拟创建进程,并输入相关信息*/Prio(); /*优先数调度算法*/*队首进程退出进程队列*/在进程队列中重新插入原来的队首进程*/重新置就绪队列的头指针*/2.2.4 .测试结果及说明优先级调度算法运行情况如图1,图2,图3,图4所示Pleaseenterthetotal number of PCB:图1.输入进程块的数量P le as eenterthetotal nunber of PCB:Pleaseen terthenane and
24、tine andof PCB图2.输入每个进程的名称、时间、优先级Pieaseenterthe total nunber of PCB=Pleaseen terthe nane and tie and pi*ioitv of PCB:图3.输入所有的进程的相关信息QiFlease3PleaseA33Be1c52enter the total nunbei of PCB:enter the name and tifie and priority of PCB:Display is going to start:NAME A C BNAME r* C BCPUIIMEQ30CPUTIME10QNE
25、EDTIME356HEEDTIME256PRIORITY321 PRIORITY221STATUSUUWSTATUSRWU图4.所有进程调度算法完成时间片轮转调度2.3.1 .算法思想所有就绪进程按先来先服务的原则排成一个队列,将新来的进程加到就绪 对列的末尾,每当执行进程调度时,总是把处理机分配给队首的进程, 各进程占 用CPU的时间片相同。也就是说CPU勺处理时间划分成一个个相同的时间片, 绪队列的所有进程轮流运行一个时间片。 当一个时间片结束时,如果运行进程用 完它的时间片后还未完成,就强迫运行进程让出 CPU就把它送回到就绪队列的 末尾,等待下一次调度。同时,进程调度又去选择就绪队列中
26、的队首进程,分配 给它一时间片,以投入运行。直至所有的进程运行完毕。2.3.2 .算法流程图2.3.3 .程序代码#i nclude #in clude #in clude typ edef struct node int count;char name10;/*进程名 */*计数器,判断是否=时间片的大小*/ int cpu time;int n eedtime;char state;struct node *n ext;/*占用cpu时间*/*要求运行时间*/*状态*/*指针*/P CB;PCB *ready,*ru n,*fi ni sh,*tail;int N,ro und;void
27、prt()/*输出函数,可以方便看到进程执行的演示/*就绪执行结束尾指针*/*/PCB *p;STATUS n);printf(” NAME CPU TIME NEEDTIMEif(run !=NULL)printf( %-10s%-10d%-10d %cn,run-name,run-cputime,run-needti me,ru n-state);/*输出执行的进程的信息 */p=ready;while( p!=NULL)prin tf(%-10s%-10d%-10d %cn, p-n ame, p-cputime, p- needtime, p-state);/*输出就绪进程的信息*/p
28、=p-n ext;p=fini sh;while( p!=NULL)prin tf( %-10s%-10d%-10d %cn, p-n ame, p-cputime, p- needtime, p- state);/*输出结束队列的信息*/p=p-n ext;getchar();/*在队尾插入新的进程*/void in sert( PCB *q)PCB *p;p=ready;while( p- next!=NULL) p=ready-n ext;tail=p;tail-n ext=q;q- next=NULL;void create()PCB *p;int i;ready=NULL; run=
29、NULL;fin ish=NULL;prin tf( PI ease en ter the name and time of PCB:n);/* 输入进程名、和*/for(i=0;iname);/* 输入进程名 */scan f(%d, &p- needtime);/*输入进程要求运行时间*/p-cpu time=0;p-state=W;if (ready!=NULL)else/*表示就绪队列中未在队首先执行,但也是就绪状态*/insert(p);/*就绪队首不为NULL,插入新进程*/p-n ext=ready; ready=p; tail=p;printf(” printf(” prt()
30、;Disp lay is going to start:*n);rr);getchar();run=ready; /*队列排好,run指向就绪队列队首 ready=ready-next;/*ready 指向下一个进程run-state-R;/*队首进程的状态为就绪*/void coun t()*/*/队尾*/while(ru n!=NULL)run-cpu time=r un-cpu time+1; run-n eedtime=r un-n eedtime-1; run-co unt=run-co un t+1;if(run-n eedtime=0)/*运行一次cpu占用时间加一 /*运行一次
31、要求运行时间减一/*运行一次计数器加一 */*若要求运行时间为0时*/*/*/ elserun-n ext=fi nish; fini sh=r un;run-state-E; run=NULL;if (ready!=NULL) run=ready;/*退出队列*/*finish为结束进程的队列*/*修改状态为结束*/*释放run指针*/*创建新就绪队列的头指针*/run-state=R;ready=ready-n ext;/*如果时间片到*/if(run-co un t=r ound)run-count=0;/* 计数器置 0*/if(ready!=NULL)/*如就绪队列不空*/run s
32、tate-W;in sert(ru n);/*在进程队列中重新插入原来进程,插入run=ready;/*重新置就绪队列的头指针*/run-state=R;ready=ready-n ext;void mai n()prt();printf(PI ease en ter the total number of PCB:n); sca nf(%d,&N);create();/*模拟创建进程,并输入相关信息*/count();/*优先数调度算法*/2.3.4 .测试结果及说明时间片轮转调度算法运行情况如图1,图2,图3所示专程名字运行共需时间 还需要占用时间 优先级50453202012525225
33、254303061S15S/图1所有的进程都在队列中时间片轮转调度,时间片为:5/进程名字运行共需时间还需要占用时间优先级rPi155003553WA20255101225104正较30156进程输岀已经执行完毕,/吗冋斤牝特4虞t忖寸|HJ斤羽 /Z/Z/Z/Z/Z/Z/Z/Z/ZZ/Z/ZZ/Z/ZZ/Z/ZZ/Z/ 所有进程都已经执行完毕?图4所有的进程都执行完毕2.4 .多级反馈队列调度2.4.1算法思想允许进程在队列之间移动。在系统中设置多个就绪队列,每个队列对应一个优先级,第 一个队列的优先级最高,第二队列次之。以下各队列的优先级逐步低。各就绪队列中的进程 的运行时间片不同, 高优
34、先级队列的时间片小,低优先级队列的时间片大。 进程并非总是固定在某一队列中,新进程进入系统后, 被存放在第一个队列的末尾。如果某个进程在规定的时间片内没有完成工作,则把它转入到下一个队列的末尾,直至进入最后一个队列。系统先当处理器正在第i个队列中为 1( i-1)中的任何一个对列), 即由调度程序把正在运行的进程放回第i队列的除最低优先权队列外的所有其他队列,均采用FIFO (先进先出)算法。最后一个队列中的进程FIFO、RR和剥夺式 HPF的一种进程运行第一个队列中的进程。当第一队列为空时,才运行第二个队列中的进程。依此类推,仅 当前面所有的队列都为空时,才运行最后一个队列中的进程。 某个进
35、程服务时,又有新进程进入优先级最高的队列(第 则此新进程要抢占正在运行进程的处理器, 末尾,把处理器分配给新到的高优先级进程。 相同的进程调度算法,即按时间片轮转的 按按时间片轮转或 FCFS策略进行调度。它是综合了 调度算法。2.4.2算法流程图ill汕卅it卜2.4.3程序代码#in clude #i nclude #in elude #defi ne NULL 0typ edef struct node/*进程名*/*进程所在队列数,也是该队列的时间片*/*占用cpu时间*/*要求运行时间*/*指针*/char n ame10;int num;int cpu time;int n eed
36、time;struct node *n ext;P CB;PCB *qf1,*ql1;PCB *qf2,*ql2;PCB *qf3,*ql3;/定义三个队列的头指针和尾指针int blog1,blog2,blog3; /*分别记录队列1,、队列2、队列3中进程数*/ void in sert( PCB *q, PCB *qf,PCB *ql) q-nu m+;if(qf=NULL&q l=NULL) /队列为空qf=ql=q;else/队列不为空ql-n ext=q;ql=q;ql- next=NULL;void create(i nt n)/创建进程,刚来的进程都进入队列1PCB *p;p=
37、(PCB *)malloc(sizeof( PCB);int i;blog1=blog2=blog3=0;各队列中进程数均为0printfCP lease en ter the n ame and n eedtime of PCB:n);/*输入进程名和所需时间*/for(i=0;iname);/* 输入进程名 */scan f(%d, &(p-n eedtime);/* 输入进程要求运行时间 */p-cpu time=O;p-num=O;in sert( p,qf1,ql1);blog1+; /队列中进程数加1int run(PCB *q, PCB *qf,PCB *ql)PCB *p ,*
38、f,*l;/*p=(PCB *)malloc(sizeof( PCB); f=(PCB *)malloc(sizeof( PCB); l=(PCB *)malloc(sizeof( PCB);*/P=qf2;p=q;f=qf;l=ql;if(q-needtimenum)/* 在时间片内完成 */ /q-c pu time+=q-n eedtime; q-n eedtime=0;free(q);return 0;else /*不能在时间片内完成*/q-c pu time+=q-num; q-n eedtime-=q-num; if(q-num nu m+;in sert( p, f,l);进入下
39、一个队列return 1;void P rt()/*输出函数,可以方便看到进程执行的演示*/PCB *p;/p=( PCB *)malloc(sizeof( PCB);int a;prin tf(NAME CPU TIME NEEDTIMESTATUS n);while(blog10|blog20|blog30)if(blog10)p=qf1; qf1=qf1- n ext; p- next=NULL; blog1-;printf(”-10s%-10d%n,p-n ame, p- needtime);a=ru n(p ,qf2,ql2);if(a=1)blog2+;/*第一个队列不为空*/el
40、se if(blog20)/*第二个队列不为空*/qf2=qf2- next; p-n ext=NULL;blog2-;prin tf(%-10s%-10d%n,p-n ame, p- needtime);a=ru n(p ,qf3,ql3);if(a=1)blog3+;else if(blog30)/*第三个队列不为空*/P=qf3; qf3=qf3- next; p-n ext=NULL;blog3-;prin tf(%-10s%-10d%n,p-n ame, p- needtime);a=ru n(p ,qf3,ql3);if(a=1)blog3+;*/*使用getchar()函数可以让
41、输出时停留画面,等待人按回车继续void mai n()qf1=ql1=( PCB *)malloc(sizeof( PCB); qf2=ql2=( PCB *)malloc(sizeof( PCB); qf2=ql2=( PCB *)malloc(sizeof( PCB); int n;blog仁blog2=blog3=0;printf(请输入进程的个数:”);scan f(%d,&n); create( n);prt();2.4.4测试结果及说明2.5 .短作业调度2.5.1 .算法思想它从后备队列总选择一个或若干短作业优先调度算法是指对短作业进行调度的算法。个运行时间最短的作业,将他们调
42、入内存运行。2.5.2 .算法流程图:短作业优先算法流程图2.5.3 .程序代码#i nclude #in elude #in elude typ edef struct node/*进程名*/*占用cpu时间*/*要求运行时间*/*状态*/*指针*/char n ame10;int cpu time;int n eedtime;char state; struct node *n ext;P CB;PCB *ready, *run, *finish; II 就绪、执行、结束指针 int N;进程数量void prin t()II 输出函数PCB *p;STATUS n);prin tf(NA
43、MECPU TIMENEEDTIMEif(run != NULL)printf(”-10s%-10d%-10d %cn,run-n ame,run-cpu time, run-n eedtime, run-state);I*输出执行的进程的信息*Ip=ready; while( p != NULL)printf(”%-10s%-10d%-10d %cn,/*输出就绪进程的信息*/p-n ame, p-cpu time, p-n eedtime, p-state);p=p-n ext;p=fini sh;while( p != NULL) printf(”%-10s%-10d%-10d %cn,
44、*/p-n ame, p-cpu time, p-n eedtime, p-state);I*输出结束队列的信息p=p-n ext; getchar(); I*使用getchar()函数可以让输出时停留画面,等待人按回车继续*IPCB *p 1,*s,*r;int b;/*指针s指向新要插入的进程*/*指针p1指向原来的进程队列的队首*/*使用指针r是指向p1前面的进程*/s=q;p 1=ready;r=p 1;b=1;while( p1!=NULL) &b) if(p1-n eedtimen eedtime)r=p1; p1=p1-n ext;/*新进程的开始时间大,则p1指向下一个进程继续
45、比*/elseb=0;if(r!=p1)r-n ext=s; s-n ext =p1;/*新进程找到位置,插在r和p1之间*/else s-n ext=p1; ready=s;ready 指针 */ /*新进程的开始时间按最小,插在队首,并修改就绪队首void create()PCB *p;int i;ready=NULL;run=NULL;fin ish=NULL;printfCP lease en ter the n ame and time of P CB:n);/*输入进程名、运行时间和开始时间for(i=0;iname);/* 输入进程名 */scan f(%d, &p- needt
46、ime);/*输入进程要求运行时间p-cpu time=0; p-state=W;if (ready!=NULL) insert(p);else/*否则先插在*/*表示就绪队列中未在队首先执行,但也是就绪状态/*就绪队首不为NULL,插入新进程*/NULL 前*/*/p-n ext=ready;ready=p;rr);*/*/printf(”Dis play is going to start:prin tf(*n)prin t();getcharO;run=ready; /*队列排好,run指向就绪队列队首 ready=ready-next;/*ready 指向下一个进程run-state=R; /*队首进程的状态为就绪 */void SJF()while(ru n != NULL)run-cpu time=r un-cpu time+r un-n eedtime; run-n eedtime=0;run-n ext=fi ni sh;finish = run;run-state=E;run = NULL;if(ready
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 输电线路迁改的技术方案
- 供水设施智能化改造项目质量控制与监督
- 二零二五年度健康医疗产业资金入股协议
- 2025年度知识产权侵权和解赔款调解协议
- 2025至2030年中国带纱窗推拉门窗数据监测研究报告
- 二零二五年度酒店前台接待人员聘用与服务协议
- 2025年度样板房软装设计、家具购销与装修施工合同
- 2025年湖北城市建设职业技术学院单招职业适应性测试题库必考题
- 2025年度股权投资基金股权转让协议书
- 二零二五年度跨区域物流运输货物保险合同范本
- 跨学科实践活动10调查我国航天科技领域中新型材料新型能源的应用课件九年级化学人教版(2024)下册
- 大学生劳动实践活动总结
- 代理分销销售协议书
- 2024年江苏农牧科技职业学院单招职业适应性测试题库参考答案
- 2024综合基础知识考试题库及解析(146题)
- 中国类风湿关节炎诊疗指南(2024版)解读
- 《社会治理概论》课程教学大纲
- 读书分享《非暴力沟通》课件(图文)
- 钳工实训安全
- 2024年3月30日事业单位联考D类《职业能力倾向测验》试题
- 通信施工安全培训
评论
0/150
提交评论