《2023年广东工业大学操作系统实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年广东工业大学操作系统实验报告.pdf(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统实验报告学生学院 计算机学院专业班级_1 0级计算机科学与技术5班学 号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学生姓名陈丹飞指导教师_ _ _ _ _ _ _ _ _孙为军_ _ _ _ _ _ _ _ _ _2023 年1月1 0日目录1 实验一进程调度.12实 验 二 作 业 调 度.3实验三可变式分区分派.4实验四简朴文献系统.实 验 一 进 程 调 度一、实验目的:编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二、实验内容:以两种典型算法为例说明实现的算法(一)、最高优先数优先的调度算法1、实验原理进程调度算法:采用最高优先数优先的
2、调度算法(即把解决机分派给优先数最高的进程)和先来先服务算法。每个进程有一个进程控制块(PCB)表达。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运营时间、已用CPU时间、进程状态等等。进程的优先数及需要的运营时间可以事先人为地指定(也可以由数产生)。进程的到达时间为进程输入的时间。进程的运营时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运营 R(Run)、或完毕 F(F i n ish)三种状态之一。就绪进程获得CPU后都只能运营一个时间片。用已占用C P U 时间加1 来表达。假如运营一个时间片后,进程的己占用c P U 时间已达成所需要的运营时间,则撤
3、消该进程,假如运营一个时间片后进程的已占用C P U 时间尚未达所需要的运营时间,也就是进程还需要继续运营,此时应将进程的优先数减1 (即减少一级),然后把它插入就绪队列等待CPUo每进行一次调度程序都打印一次运营进程、就绪队列、以及各个进程的PCB,以便进行检查。反复以上过程,直到所有进程都完毕为止。2、源代码:#include st d io.h#in c lu d e#inclu d e#define g e t p ch(typ e)(type*)m a lloc(sizeof(ty p e)#de fin e NU LL 0s t ruct pcb /*定义进程控制块PCB*/ech
4、ar n a me 10;/*定义进程名称*/char s t at e;/*进程状态*/i nt su p er;/*优先数*/int n t i me;/*需要运营的时间*/int r t ime;/*已占用的C P U 时间*/s t rue t p cb*lin k;*e a dy=NULL,*p;t ypede f s true t p c b PC B;/*p c b 表sort()/*建立对进程进行优先级排列函数*/PCB*first,*s e cond;。i n t i nsert=O;“f(re a d y=N U L L)|(p-super)(ready-s up e r)
5、/*优先级最大者,插入队首*/p-1 i nk=re a dy;ready=p;e ls e/*进程比较优先级,插入适当的位置中*/“f i rst=r e a dy;。seco n d=first-l i n k;super)(s ec o nd-super)/*若插入进程比当前进程优先数大,*/。/*插入到当前进程前面*/。o o p-li n k=sec o n d;s first-link=p;。seco n d=NU L L;。insert=l;80。e l s e/*插入进程优先数最低,则插入到队尾*/。ofirst=f irst-link;。second=se c o nd-li
6、nk;6)8if(insert=0)first-li n k=p;)in p u t。/*建立进程控制块函数*/i n t i ,n um;clr s c r();/*清屏*/P r in t f(f n 请输入进程号?”);。scanf(%d&num);for(i=0;i n a me);pr i ntf(n 输入进程优先数:“);。s e a nf(d”,&p-s u pe r);。printf(n 输入进程运营时间:);。sea n f(*%d&p-n time);pr i n tf (n nn);p-r t ime=0;pstate=,w;。p-link=N U L L;s o r t
7、();/*调用 sort 函数*/)in t s p a c e()i n t 1=0;PCB*pr=ready;o while(pr!=NULL)0 1+;8 pr=pr-1 ink;6。return(1);)d i sp(PCB*p r)/*建立进程显示函数,用于显示当前进程*/pri n t f(n qname t s t a t e t su p e r t ndtime t runtime n);pr i n t f(I%s t M,p r nam e);o pr i ntf(*1%c t H,p r-state);p rintf(I%dtu,p r-supe r);op r int
8、f(H|%d t,p r-nt i m e);g p r int f(|%dt,pr-rtime);o pr i nt f(”n“);)che c k()/*建立进程查看函数,检查等待队列的进程是否进入就绪队列*/PC B*pr;p rint f(n*当前正在运营的进程是:%s”,p name);/*显示当前运营进程*/o 3 d i s p(p);0 pr=read y;。pr i ntf(n*当前就绪队列状态为:n );显示就绪队列状态*/while(pr!=NULL)disp(p r);。pr=p r 1 ink;)d e stroy()/*建立进程撤消函数(进程运营结束,撤消进程)号
9、printf(n 进 程%s 已完毕An”,p-name);free(p);)run ning()/*建立进程就绪函数(进程运营时间到,置就绪状态*/(p rt i me)+;if(p-r tim e=p-n tim e)。de s t roy();/*调用 des t roy 函数*/e 1 se3 (p-su p e r)-;o p-stat e=w1;*so r t();/*调用 sort 函数*/)ma i n()/*主函数*/i n t len,h=0;cha r ch;in p u t();ole n=s p a c e();?w h i le(len!=0)&(r eady!=N
10、ULL)ch=getchar();h+;p r int f(n Th e ex e cute num b er:%d n ,h);。p=rea d y;。r ead y=p-lin k;p-l i nk=NULL;p s t a t e=fR7;。check();run n in g();P rintf(H n 按任一键继续”);。c h=g e tc h a r();。)叩 r i ntf(nn进程已经完毕An”);och=getch a r();)3、运营结果:请输入进程号?5进程号N o.O:输入进程名:A输入进程优先数:2输入进程运营时间:1进程号N。:输入进程名:B输入进程优先数:3
11、输入进程运营时间:1进程号N o.2 :输入进程名:C输入进程优先数:1输入进程运营时间:1进程号N o.3:输入进程名:D输入进程优先数:4输入进程运营时间:1进程号N o.4 :输入进程名:E输入进程优先数:5输入进程运营时间:1T h e e x e c u t e n u m b e r :1*当前正在运营的进程是:EQ n a m e。s t a t e。s u p e r n d t i m e r u n t i m eEoooRo 5l 0*当前就绪队列状态为:Qnam e ostat e osuper n d t i m e r u n timeD o w o 4 o o 1
12、 0 t oB oow。3 0A。w 182g 0C o w l o 1 o 0进 程 E 已完毕按任一键继续T he execute number:2*当前正在运营的进程是:DQn a m e state u pepn d t i me”u nt i meDoo R MB 1 0O *当前就绪队列状态为:Qnam e s ta te s u per。n dt i m e runtim eBOOWOO36 1 0A。w 2 o o 1 0C60W 1 1 0进 程 D 已完毕按任一键继续T he execute n u mb e r:3*当前正在运营的进程是:BQnam e 比 t at e。
13、super n d t i me runtimeB R o3 4 0*当 前就绪队列状态为:Qn a mes t a te supe r ndt i m e runtimeAw2 g 1。0C 8 W。1 A 1 0进程 B 已完毕按任一键继续The e xec u t e numb e r:4*当前正在运营的进程是:AQ n a me。s ta t e s up e r ndtime r un t i meAooeR。2。1 0*当前就绪队列状态为:Qname sta t e supe r n dtime*r u n t imeC。w。1 1 0进程 A已完毕按任一键继续T h e e x
14、e c u te num b er:5-开.*当前正在运营的进程是:cQname 比 t a t e。supe r n d t i merunt imec gRo 1。1 0*当前就绪队列状态为:进程 C 已完毕按任一键继续进程已经完毕(二)、简朴轮转法1、实验原理在分时系统中,都毫无例外采用时间片轮转法。在一种简朴的轮转法中,系统将所有就绪进程按FIFO 规则排成一个队列,把 CPU分派给队首进程,并规定它执行一给定的时间如 100m s,称此时间间隔为时间片。当时间片完毕时,系统产生一个时钟中断,剥夺该进程的执行,将它送至就绪队列的末尾,并把解决机分派给就绪队列的新队首进程,同样也让它执行
15、一个时间片。这样,就绪队列中的所有进程均可获得一个时间片的解决机而运营。就绪队列中的进程在依次执行时,也许发生以下三种情况:(1)进程未用完一个时间片就结束,这时系统应提前调度;(2)进程在执行过程中提出I/O 请求而阻塞,系统应将它放入相应的阻塞队列并引起调度;(3)进程完毕一个时间片后尚未完毕,系统应将它重新放到就绪队列的末尾,等待下次执行。由于在分时系统中,键盘命令的执行时间较短,大多能在一个时间片内执行完毕,因此分时系统的实际响应时间将比Nq(N是同时性用户数,q 是时间片大小)小。2、源代码:#in c lu d e/*定义一个pcb的结构体*/struct pcb char nam
16、e;/*进程名*/i n t t i me;/*进程执行时间*/);void m a i n()in t n,i,j,flag=l;s t r u ct pcb a 1 0 0;/*最多可以有1 00个进程*/prin t f(输入进程 个数:);scanf(n%d,&n);ge t cha r();/*接受回车*/for(i=0;i 0)/*若进程数为空,结束程序*/i f(ai.time!=O)/*就绪队列是否为空*/prin t f(%c ,ai.nam e);/*进程执行一次,打印出该进程*/a i.tim e 使该进程占用的时间片减1*/)for(j=0;jn;j+)if(aU.ti
17、me)/*若进程所占用的时间片不为0,仍执行下一进程*/flag=l;brea k;)else/*若进程所占用的时间片为0,说明已经完毕,跳过执行下一进程*/fla g=0;i=(+i)%n;/*继续执行下一 进程,i+1*/)printf(n );3、运营结果:输入进程个数:5输入进程的名字:A输入占用的时间片:2输入进程的名字:B输入占用的时间片:3输入进程的名字:C输入占用的时间片:1输入进程的名字:D输入占用的时间片:4输入进程的名字:E输入占用的时间片:5A BCDEABDEBDEDEEP r es s any k e y t o c ont i n ue六、,心得体会:A 操作系统
18、是计算机系统中必不可少的系统软件。它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,使系统资源得到充足的运用,用户也可以花更少的时间完毕更多的工作,通过这次进程调度实验,让我明白了系统时间片的调度方法,对操作系统理论的学习更加深一层.并且增强了用C 语言的编程能力。在编程的过程中,碰到了种种困难,并且一一的克服了,这使我产生很大的成就感。破 验 二 作 业 调 度一、实验名称:进程调度用高级语言编写和调试一个或多个作业调度的模拟程序,加深对作业调度算法的理解。二、实验内容:在单道批解决系统中,作业一投入运营,它就占有计算机的一切资源直到作业完毕为止,因此
19、调度作业时不必考虑它所需要的资源是否得到满足,它所占用的C P U时限等因素。而在多道批解决系统中,作业一方面存放在外存,当系统拥有的资源足够分派给一个作业,就将资源分派给此作业,并将此作业调进内存。当系统资源局限性以分派给一个作业时,则等待已经分派资源的作业运营完毕后释放资源增长系统资源。(一)、为单道批解决系统设计一个作业调度程序1、实验原理。作业等待算法:分别采用先来先服务(F C F S),最短作业优先(S J F)、响应比高者优先(H R N)的调度算法。(1 )先来先服务(F C F S)算法先来先服务作业调度算法是一种较简朴的作业调度算法,即每次调度是从后备作业队列中选择一个最先
20、进入该队列的作业,将它调入内存,分派资源、创建相应的进程,放入进程就绪队列准备运营。F C F S 算法利于长作业,不利于短作业,而大多数的作业是I/O 繁忙的短作业。以F C F S 作为主调度算法是不常用的。(2)短作业优先调度算法(S J F)短作业优先调度算法是指操作系统在进行作业调度时以作业长短作为优先级进行调度。该调度算法可以照顾到事实上占作业总数绝大部分的短作业,使它们能比长作业优先调度执行。这时后备作业队列按作业优先级由高到低顺序排列,当作业进入后备队列时要按该作业优先级放置到后备队列相应的位置。实践证明,该调度算法的性能是最佳的,单位时间的作业吞吐量也最大,但也存在缺陷:对长
21、作业极为不利。(3)响应比高者优先(HRN)的调度算法采用响应比高者优先调度算法,进行调度时必须计算出系统中的所有满足必要条件作业的响应比;从中选择响应比最高的一个作业装入主存储器、分派资源,由于是实验,所以就用将作业的作业控制块出队,并输出作业的作业名代替装入主存储器,同时修改系统的资源数量;用同样方法选择第二个、第三个直到不再有满足必要条件的作业。调度算法的流程图如下:开始2、源代码及运营结果:#in c 1 u d e s t d i o.h#defi n e get j c b(t y p e)(t ype*)m al 1 oc(siz e of(t ype)#def i n e N
22、U L L 0i n t n =0,t im e=0 ;f loat e t i,e w i;s t r u ct j c b cha r n am e1 0;/*作业名*/char st at e;/*作业状态*/i n t t s;/*提交时间*/f loa t s u p er;/*优 先 权*/i n t t b;/*开始运营时间*/in t t c;/*完 毕 时 间*/f 1 oa t t i ;f 1 oat w i;i n t n t im e;s t r u ct j cb*lin k;*p,*q,*h e a d=N U L L;/*周转时间*/*带权周转时间/*作业所需运
23、营时间*/*结构体指针*/t y p e d e f s t r u ct j cb J C B:in i t ai()in t i;pr i n t f(n 输入作业数:n);s c a n f(%d”,&n )pr i n t f(输入:n作业名 t到达时间 t服务时间n);f or(i =0;i n am e,&p-t s,&p-n t im e);p-st at e=,;p-1 in k=NULL;i f(head=N ULL)head=q =p;e 1 se(q-lin k=p;q 二 P;v oid pr i n t (J C B *pr,in t m)JCB*p;pr in t
24、f(H n t i m e=%d,t im e);i f(m=3)p r in t f C n作业名 l状态 t到达时间 t服务时间 t优先权 t t完毕时间t周转时间 t带权周转时间 n”);pr in t fC%st%ct%d t%d t%4.2 ft%d t%4.2 ft%4.2 f n pi n am e,pr-s t at e,pr-t s,pr-n t im e,p r-su p e r,p r -t c,pr-t i,p r -w i);)e 1 se pr in t f(n作 业 名 状 态 到 达 时 间 服 务 时 间 完 毕 时 间 周 转 时 间 带 权 周 转 时间
25、n);pr i n t f(%s t%ct%dt%dt%dt%4.2 ft%4 .2 fn ,p r-n am e,pr-s t a t e,p r -t s,pr-n t im e,pr-t c,p r -t i,p r -w i);)p二head;do i f(p-st at e 二 二 W)i f(m=3)p r in t f(s t%c t%dt%d t%4.2 fn,p-n am e,p-st at e,p-t s,p-n t i m e,p su per );)els e p r in t f(,z%s t%ct%d t%d n,z,p-n am e,p-s t a t e,p-t
26、 s,p-n t im e);p=p-l i n k;w hi 1 e(p!=NULL);p=head;do i f(p-st a t e=F)if(m=3)pr in t fC%s t%ct%dt%dt%4.2 ft%dt%4 .2 f t%4.2 fn,p-n am e,p-st at e,p-t s,p-n t i m e,p-s u p e r,p-t c,p-t i,p-w i);el s e pr in t f C%s t%ct%d t%dt%d t%4.2 ft%4.2 f n ,p-n am e,p-st at e,p t s,p n t im e,p-t c,p t i,p-
27、w i);)p=p-l i n k;w h i le(p!=NU L L);v oid las t ()e t i/=n;ew i /=n;pr in t f(n平均周转时间=%7.3 fn平均带权周转时间=%7.3 f n ,e t i ,ew i);)su pe r ()J C B *padv;padv=h ead;do i f(padv st a t e=f&padv-t s su p e r=(float)(t im e-p a dv-t s+pa d v n t im e)/padv-n t im e;p a d v =p ad v -1 in k;w h i 1 e(p a d v
28、!=N U L L);)v oid hr n(m)J C B *m i n ;in t i,i d en;for (i=0;i s t at e=,W*&p-t s su p er m i n su per)m i n =p;p=p-l in k;w hi 1 e(p!=N U L L);if(i d en)i-;t i m e+;p r in t f(n t i m e=%d”,t im e);if(t i m e 1 0 0 0)p r in t f(n r u n t im e is t o o lo n g.e r r o r );get ch();)e 1 s e r u n n i
29、 n g(m i n ,m);v oi d sj f(in t m)J C B *m in;in t i,iden;for (i=0;i st at e=,W*&p t s n i n n t im e)m in=p;p=p-li n k;(w hile(p!=N U L L);if(i den)i;pr in t f(n t i t i m e);ti me 4-+;i f(t im e 1 0 0)p r in t f(,z n r u n t i m e is t oo 1 on g.er r or*);get c h();else r u n n in g(m i n ,m);)fcf
30、s(in t m)in t i,i d en;f o r (i=0;i s t a t e=,&p-t s li n k;w hile(p!=NULL&id e n);if(i d e n)i一;pr i n t f(n t i m e=%d”,t i m e);t im e+;if(t im e 1 0 0)p r in t f(*n r u n t im e is t o o lon g.er r or );get c h();)else r u n n i n g(p,m);)r u n n in g(J C B *p,in t i n)p-t b=t i m e;p-s t at e=
31、Rp t c=p-t b+p-n t im e;p-t i =(fl oat)(p t c p t s);p-w i=(f lo a t )(p t i/p-n t im e);et i+=p-t i;e w i+=p-w i;pr in t (p,m);t i m e+=p-n t im e;p-st at e=F;pr i n t f(n 作业外s 已经完毕!n P r e s s an y key to e on t i n u e.n ,p-n a m e);get chO ;)v o i d r u n j c b(in t m)pr i n t f(H n n 作业开始运营”);s
32、 w it c h(m)case 1:f c fs(in);br ea k;case 2 :s j f(m);b r eak;cas e 3:hr n (m);b r e a k;defau lt:p r in t f(n 运营错误!n);ex i t ();st ar t()in t m;char s t r 1 0 0=n选择调度算法:n 1.先来先服务F C F Sn 2.最短作业优先SJ F n 3.响应比高者优先H RNn ;pr i n t f(%s ,s t r);m=get ch()-4 8;in it al():i f(1 =m&m =3)r u n j c b(m);e 1
33、 se pr in t f(n选择错误,请重新选择!n);st ar t ();1 a st ();)m a in()(st ar t ();pr in t f C n所有作业完毕!”);g e t ch();)运营结果:1、选择先来先服务F C F S选择调度算法:1.先来先服务F C F S2 .最短作业优先SJ F3 .响应比高者优先H RN输入作业数:5输入:作业名。到达时间。服务时间A 0 。4B 1 。30 2。5D 。3 *2E4 4作业开始运营Tim e=0作业名状态到达时间 服务时间完毕时间周转时间 带权周转时间A。RH)4 停 4.OOol.00B1。3C2。DW。3。25
34、W o o 44作业A已经完毕P r essany k e ytoc o nti nue*Time=4作业名 状态到达时间服务时间 完毕时间周转时间 带权周转时间B。6.002.00Co。2Wo44.00。1.00电W1375DE44A0 8 4 作业B已经完毕P re s s any k e yt ocontin u eTime=7作业名状态到达时间服务时间完毕时间周转时间带权周转时间O R 2 5D W 3 2E 41 2。1 0.00-2.00A Fo 044。4.0 0 LOOBF*1。3。70 6.002.00作业C已经完毕Pre s s anykey t o conti n ueT
35、 i me=1 2作业名状态到达时间服务时间完毕时间 周转时间带权周转时间D R。3。2 1 4 4 1.0 0*5.5 0E 3OO 7。2。51 4.0 0 4 46.0 0F。3必1 40 0。3.5 0。4.0 0。1.0 02.0 0g 1 2 1 0 .0 0 2.1 1 .0 0 5.5 0 8EACFF1 8作业E已经完毕P r e s s an y k e yt o co n t in u e*平均周转时间二9.0 0 0平均带权周转时间=2.8 0 0所有作业完毕!2、选择最短作业优先SJ F (简要过程)作业开始运营T i m e=0作业名 状态到达时间 服务时间完毕时间
36、周转时间带权周转时间A oRo 0 4 必。4.0 0 1.0 0 gB oW olC oW 。2 5D W 取 2E。W。4 制作业A已经完毕Pre s s a n ykey t o co n t in u。Tim e=4作业名状态到达时间服务时间完毕时间周转时间带权周转时间D 。32。6。3.001.5 0。1。3C。W。2 5E M4。4A*004皿 4.001.02。作业D已经完毕Pres s any key t oc onti n ue*Time=6作 业 名 状 态 到 达 时 间服务时间完毕时间 周转时间带权周转时间B。r loo39。8.00。2.67Co W 25E。W 。4
37、。4A F O O/rMa 4.0 0 1.00aD o F 3 2 6 1*3.00.5 0作业B已经完毕Press any key to conti nueTime二 9作业名状态 到达时间服务 时 间 完毕时间 周转 时 间 带权周转时间ER4。4。1 39.0 0*2.2 5C o W 2 5A o F。04 。44.0 01.B oF la 3 9 8 0 0 2*.6 7)gF g 3 3.0 0。1.5 0作业E已经完毕P r ess an y key t o con t i n u e*Tim e=1 3作业名状态到达时间服务时间 完毕时间周转时间C 业。2 。5 1 8 al
38、6.0 0 3.2 0A。F ooQ o 4 4 a 4.0 0 。1.0 0带权周转时间B aF 8 1 a3。9 8.0 0 2.6 7 aD。F 3 o6 2 3.0 0 1 .5 0E oF 4。4 。13。9.0 0。2.2 5作业C已经完毕P r ess a n y ke y t o con t in u e*平均周转时间=8.0 0 0平均带权周转时间=2.1 2 3所有作业完毕!3、响应比高者优先HRN(简要过程)作业开始运营Tim e=0作业名状态到达时间服务时间优先权完毕时间A。R 0。4 o&l.0 0 4。4.0 0 1.0 01。3 。-0.0 0周转时间带权周转时间
39、cW o 25D o W3 2E oW 4作业A已经完毕P r e s s any key to continue-*T i m e=4作业名状态到达时间服务时间优先权 完毕时间周转时间带权周转时间B R 1。3。2.0076.002.0 0O W 2 5D o W3。2E。W。4。4AF.0 0 4。4.00。1.00作业B已经完毕P r ess a n y k e yt o conti n 皿Time=7作业名状态 到达时间 服务时间优先权 完毕时间周转时间带权周转时间D R 3 2 3.00。9 6.00。3.00C W 2a 5E 耶。4 4aA F OMool.OCM 4.00 4.
40、0 0BF*13 2.00 7。6.00*2.0 0作业D已经完毕Pre s s any k e y to continueTime=9作业名状态到达时间服务时间优先权完毕时间周转时间带权周转时间C o R。25。2.40 1 4 ol2.00*2.40E aW4。2.2 5A oF&oO*4 0 LO O M 4 0 0 0 0B。F。1 。3 2.0 0 7。6.0 0 8 2.0 0D F。3 ,2 3.0 0。9 6 0 0。3.0 0作业C已经完毕P r ess an y key t o con t in u e T i me =1 4作 业 名 状 态 到 达 时 间E R 4A
41、F 。0B 矛 1 0 0 7。C F 2D 叫3。2 。3.作业E已经完毕P r ess an y ke y t o平均周转时间=8.4 0 0服务时间优先权完毕时间周转时间带权周转时间以 3.2 5。1 8 “4.0 04 1.0 0 46 0 0 2-0 0。5 忠 4 0 4 4 al2.0 00 0 9。6 .0 0 3.0 0con t in u e 3.5 040 0 1.0 02.4 0平均带权周转时间=2.3 8 0所有作业完毕!(二)、编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。对于多道程序系统,要
42、假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源规定。在单道批解决系统中,作业一投入运营,它就占有计算机的一切资源直到作业完毕为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的C P U时限等因素。而在多道批解决系统中,作业一方面存放在外存,当系统拥有的资源足够分派给一个作业,就将资源分派给此作业,并将此作业调进内存。当系统资源局限性以分派给一个作业时,则等待已经分派资源的作业运营完毕后释放资源增长系统资源。程序及运营结果如下:#i n c l u d e#i n c l ud e#d e f i n e g e t b (t y p e)(t y p e *
43、)m a 1 1 o c (s i z e o f (t y p e)#d e f i n e NULL 0t y p e d e f s t r uc t JCB 定义作业控制块J C Bc h a r n am e 1 0 ;/作业名i n t s t i m e;/开始运营时刻i n t r t i m e;需要运营时间,即提供服务的时间笛h a r s t at e;/作业状态J C B *n e x t ;/链指针)J CB;J C B *r e ad y =NULL,*p;i n t T;时间量i n t t t i m e ;/总周转时间f l o at t r t i m e;
44、/总的带权周转时间v o i d s o r t ()构造链表存放作业 JCB*f i r,*s e c ;i f (r e ad y=N U L L)r e ad y二p;e l s e。f i r=r e ad y n e x t;i f(f i r二 二NULL)s e c =r e a d y;e l s e 。w h i l e(f i r !=N U L L)s e c=f i r;f i r=f i r-n e x t ;s e c -n e x t=p;)vo i d i n i t ()/输入作业参数 i n t i,n um;p r i n t f (输 入作业数:);s
45、c an f (%d ,&n um);/输入作业数f o r(i=0;i Vn um;i+)p r i n t f(输入第%1 个作业的信息:nM,i +1);。p=g e t b(JC B);p r i n t f(作业名:);。s c an f p n am e);。p r i n t f (开始运营时刻:”);。s c an f (为 d”,&p -s t i m e ):。p r i n t f(需要运营时间:);。s c a n f (u%d ,&p -r t i m e );p s l a t e=w ;/每个作业的初始状态总是等待Wp n e x t=NULL;o s o r t
46、();)T二0 ;时间量t t i m e=0;总周转时间t r t i m e=0;/总的带权周转时间g e t c h a r ();接受字符)i n t l e n g t h。/链表长 i n t i =0;JCB*q;q=r e ad y;w h i l e(q!=NULL)i+;q=q n e x t;r e t u r n i;)vo i d d e s t r o y(i n t e n d)/完毕作业 i n t i=e n d ;f l o a t W;o p r i n t f C n 作业完毕时间:d ,i);o p r i n t f (*n 周转时间:%d ,i (
47、p-s t i m e );o W=(f l o a t)(i-(p-s t i m e)/(f l o at)(p r t i m e );带权周转时间=周转时间/提供服务的时间o p r i n t f C。带权周转时间:2.2 f ,W);)vo i d r un()运营作业 i n t s t a r t,e n d;o s t ar l 二 T;初始值为0e n d=(p-r t i m e)+s t a r t;作业完毕时间=运营时间+开始运营时刻o t t i m e+=e n d -p s Ii m e;总周转时间二完毕时间一开始运营时刻r t i m e +=(f 1 o a
48、t)(e n d-(p-s t i m e )/(f l o at)(p-r t i m e);/总的带权周转时间T+=p-r t i m e ;d e s t r o y(e n d);)vo i d m a i n ()/主函数 i n t l e n,c o un t:c o u n t =0;r i n t f (t t c o p y r i g h t:林庆达 计算机 0 3(7)班”);p r i n t f(M n t *作业调度算法:先来先服务(FC F S)*);4n i t();/初始化数据l e n =l e n g t h ();就绪作业的长度p r i n t f
49、(n p r e s s a n y k e y t o c o n t i n ue ”);g e t c h a r ();w h i l e(l e n!=0 )&(r e ad y !=NULL)/若就绪队列不为空o c o un t+;8P二r e ad y;p r i n t f (n 正在执行的作业是:%s.”,p-n am e );*r e a d y=r e a d y -n e x t;叩 一 n e x t =NULL;。p -s t a t e =r ;g r u n ();*p r i n t f (n p r e s s an y k e y t o c o n t
50、 i n ue .);o g e t c h ar ();f t)s p r i n t f C n所有作业所有完毕运营!n);p r i n t f (平均周转时间为:3.2 f n*,(f 1 o at)t )c o un t );总周转时间/作业数p r i n t f (平均带权周转时间为:%3.2 f n,z,t r t i m e/(f 1 o at)c o un t);总的带权周转时间/作业数e t c h ar();)运 营 结 果:Co p y r i g h t:林庆达计算机0 3(7)班*作业调度算法:先来先服务(FCFS)*输入作业数:5输入第1个作业的信息:作业名:A