廣東工業(yè)大學操作系統(tǒng)-實驗報告-4份全_第1頁
廣東工業(yè)大學操作系統(tǒng)-實驗報告-4份全_第2頁
廣東工業(yè)大學操作系統(tǒng)-實驗報告-4份全_第3頁
廣東工業(yè)大學操作系統(tǒng)-實驗報告-4份全_第4頁
廣東工業(yè)大學操作系統(tǒng)-實驗報告-4份全_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統(tǒng)實驗報告學生學院_計算機學院_專業(yè)班6及_10級計算機科學與技術5班學號_3210006071學生姓名_陳丹飛指導教師孫為軍_2013年 1月 10日目錄1實驗一進程調度2實驗二作業(yè)調度3實驗三可變式分區(qū)分配 4實驗四簡單文件系統(tǒng)試驗一進程調度一、實驗目的:編寫和調試一個進程調度程序,以加深對進程的概念及進程調度算法的理解。二、實驗內容:以w種典型算法為例說明實現(xiàn)的算法:高優(yōu)先數(shù)優(yōu)先的調度算法1、實驗原理進程調度算法:采用最高優(yōu)先數(shù)優(yōu)先 的調度算法(即把處理機分配給優(yōu)先數(shù)最 高的進程)和先來先服務算法。每個進程有一個進程控制塊(pcb)表示。進程控制塊可以包含如下信息:進 程名、優(yōu)先數(shù)

2、、到達時間、需要運行時間、已用cpu時間、進程狀態(tài)等等。進程的優(yōu)先數(shù)及需要的運行時間可以 事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為進程輸入的時間。進程的運行時間以時間片為單位進 行計算。每個進程的狀態(tài)可以是就緒w (wait)、運行 r (run)、或完成 f(finish)三種狀態(tài)之一。就緒進程獲得cpu后都只能運行一 個時間片。用己占用cpu時間加1來表示。如果運行一個時間片后,進程的已占 用cpu吋間己達到所需要的運行吋間,則撤消該進程,如果運行一個時間片后進 程的己占用cpu時間還未達所需要的運 行時間,也就是進程還需要繼續(xù)運行,此 時應將進程的優(yōu)先數(shù)減1 (即降低一級)

3、, 然后把它插入就緒隊列等待cpu。每進行一次調度程序都打印一次運 行進程、就緒隊列、以及各個進程的pcb,以便進行檢查。重以上過程,直到所有進程都完成為止。2、源代碼:include "stdio.h"#include <stdlib.h>#include <conio.h>#define getpch(type) (type*)malloc(sizeof(type) #define null 0struct pcb /*定義進程控制塊pcb */ char name10; /*定義進程秦稱char stale;/*進程擾態(tài)*/int super;

4、/*優(yōu)先數(shù)*/int ntime;/*需要運行的時間*/int rtime;/*己占用的cpu時間*/struct pcb* link; *ready=null,*p;typedef struct pcb pcb; /*pcb 表*/sort()/*建立對進程進行優(yōu)先級排列函數(shù)*/ pcb * first,*second; int insert=o;if(ready=null)|(p->super)>(ready->super) /* 優(yōu)先級最大者,插入隊首 p-link=ready;ready=p;else/*進程比較優(yōu)先級,插入適當?shù)奈恢弥?/ first=ready;$

5、econd=first->link;while(second!=null)!1?(口-$叩610(86(;011(1-8叩60) /*若插入進程比當前進程優(yōu)先數(shù)大,*/*插入到當前進程前面*/p-link=second;fir$t->link=p;second=null;in$ert=l;else/*插入進程優(yōu)先數(shù)最低,則插入到隊尾*/ fir$t=fir$t->link;second=second->link;if(in$ert=o) first->link=p;input() /*建立進程控制塊函數(shù)*/ int i,num; clrscr(); /* 清屏 *

6、/ printf(n請輸入進程號?”);scanf("%d",&num);for(i=0;i<num;i+) printf(hn 進程號 no.%d:n",i);p=getpch(pcb); printf(hn輸入進程名:n); scanf("%s",p->name); printf(nn輸入進程優(yōu)先數(shù):n); scanf("%d",&p->super); printf(n輸人進程運行時間:n); scanf("%d",&p->ntime); printf(

7、"n");p->rtime=o;p->state='w,;p->link=null;sort(); /* 調用 sort 函數(shù)*/int space() int 1=0; pcb* pr=ready; while(pr!=null) 1+;pr=pr->link;retum(l);disp(pcb * pr)/*建立進程顯示函數(shù),用于顯示當前進程*/ printf("n qname t state t super t ndtime t runtime n"); printf(”|%st",pr-name); pr

8、intf("|%ct'pr->$tate); printf("|%dt",pr-s 叩er); printf(|%dt",pr-nlime); printf("|%dt",pr->rtime); printf("n");check()建立進程査看函數(shù),檢査等待隊列的進程是否進入就緒隊列*/ pcb* pr;printf("n *當前正在運行的進程是:<>仙11);/*顯示當前運行進程*/disp(p);pr=ready;printf(”n *當前就緒隊列狀態(tài)為:n); /*

9、顯示就緒隊列狀態(tài)*/ while(pr!=null) disp(pr);pr=pr-link;destroy() /*建立進程撤消函數(shù)(進程運行結束,撤消進程戸 printf(nn 進程%s己完成an",p-name); free(p);mnning() /*建立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài)*/(p->rtime)+;if(p->rtime=p->ntime)destroy(); /* 調用 destroy 函數(shù)*/else(p-super)-p->state='wf;sort(); /*調用 sort 函數(shù)*/main() /* 主函數(shù)*

10、/ int len,h=0; char ch; input(); len=space();while(len! =0)&&(ready! =null) ch=getchar();h+;printf(un the execute number:%d nn,h);p=ready;ready=p->link;p->link=null;p->state=,r*;check();running();printf(n 按任一鍵繼續(xù).");ch=getchar();printf(unn進程已經(jīng)完成.nn); ch=getchar();3、運行結果:請輸入進程號?

11、5 進程號no.o:輸入進程名:a 輸入進程優(yōu)先數(shù):2 輸入進程運行吋間:1 進程號no. 1:輸入進程名:b 輸入進程優(yōu)先數(shù):3 輸入進程運行吋間:1 進程號no.2:輸入進程名:c 輸入進程優(yōu)先數(shù):1 輸入進程運行吋間:1 進程號no.3:輸入進程名:d 輸入進程優(yōu)先數(shù):4 輸入進程運行吋間:1 進程號no.4:輸入進程名:e 輸入進程優(yōu)先數(shù):5 輸入進程運行吋間:1the execute number: 1*當前正在運行的進程是:eqnamestatesuperndtimeruntimeer510*當前就緒隊列狀態(tài)為:qnamestatesuperndtimeruntimedw410bw

12、310aw210cw110進程e己完成按任一鍵繼續(xù).the execute number:2*當前正在運行的進程是:dqnamestatesuperndtimeruntimedr410*當前就緒隊列狀態(tài)為:qnamestatesuperndtimeruntimebw310aw210cw110進程d已完成按任一鍵繼續(xù).the execute number:3runtime0runtime00*當前正在運行的進程是:bqnamestatesuperndtimebr31*當前就緒隊列狀態(tài)為:qnamestatesuperndtimeaw21cw11進程b已完成 按任一鍵繼續(xù).the execute

13、number:4*當前正在運行的進程是:aqnamestatesuperar2*當前就緒隊列狀態(tài)為:qnamestatesupercw1進程a1已完成 按任一鍵繼續(xù).the execute number:5 *當前正在運行的進程是:c qnamestatesuperruntimecr1*當前就緒隊列狀態(tài)為:進程c已完成按任一鍵繼續(xù).進程已經(jīng)完成(二)、簡單輪轉法1、實驗原理在分時系統(tǒng)中,都毫無例外采用時間片輪 轉法。在一種簡單的輪轉法中,系統(tǒng)將所有就 緒進程按fifo規(guī)則排成一個隊列,把cpu分 配給隊首進程,并規(guī)定它執(zhí)行一給定的時間如 100ms,稱此時間間隔為吋間片。當吋間片完 成時,系統(tǒng)

14、產(chǎn)生一個時鐘中斷,剝奪該進程的 執(zhí)行,將它送至就緒隊列的末尾,并把處理機 分配給就緒隊列的新隊首進程,同樣也讓它執(zhí) 行一個時間片。這樣,就緒隊列屮的所有進程 均可獲得一個吋間片的處理機而運行。就緒隊 列屮的進程在依次執(zhí)行時,可能發(fā)生以下三種 情況:(1)進程未用完一個時間片就結束,這時 系統(tǒng)應提前調度:(2)進程在執(zhí)行過程屮提出 i/o請求而阻塞,系統(tǒng)應將它放入相應的阻塞ndtime runtime 1 0ndtime runtime 10ndtime10隊列并引起調度;(3)進程完成一個吋間片后尚 未完成,系統(tǒng)應將它重新放到就緒隊列的末 尾,等待下次執(zhí)行。由于在分時系統(tǒng)中,鍵盤命令的執(zhí)行時間

15、較短,大多能在一個時間片內 執(zhí)行完畢,因此分時系統(tǒng)的實際響應時間將比nq(n是同時性用戶數(shù),q是時間片大小)小。2、源代碼:#include<stdio.h>/*定義一個pcb的結構體*/struct pcb char name;/*進程名 */ int time; /*進程執(zhí)行時間*/;void main() int n,i,j,flag=l;struct pcb a100; /*最多可以有100個進程*/printf(n輸入進程個盛:);scanf("%d",&n);getchar();/* 接也回車 */for(i=0;i<n;i+) pri

16、ntf("輸入進程的名字:n”);scanf("%c",&);/* 以字符接收進程名 */getchar();/* 接也回車 */printf("輸入占用的時間片:”);/*輸入進程占用的時間片*/scanf(n%dn,&ai.time);getchar();/* 接收回車 */i=0;while(nag && n>0) /*若進程數(shù)為空,結束程序*/ if(ai.time!=o)/*就緒隊列是否為空*/ printf(n%cn,);/*進程執(zhí)行一次,打印出該進程*/使該進程占用的時間片

17、減1*/for(j=0;j<n;j+)if(au.time)/*若進程所占用的時間片不為0,仍執(zhí)行下一進程*/ nag=l;break;else/*若進程所占用的時間片為0,說明己經(jīng)完成,跳過執(zhí)行下一進程*/flag=o;i=(+i)%n;/*繼續(xù)執(zhí)行下一個進程,i+l*/printf(nnn);3、運行結果:輸入進程個數(shù):5輸入進程的名字:a輸入占用的時間片. 2輸入進程的名字:b輸入占用的時間片. 3輸入進程的名字:c輸入占用的時間片. 1輸入進程的名字:d輸入占用的時間片. 4輸入進程的名字:e輸入占用的時間片:5abcdeabdebdedeepress any key to co

18、ntinue六、心得體會:操作系統(tǒng)是計算機系統(tǒng)中必不可少的系統(tǒng)軟件。它是計算機系統(tǒng)中各種資源的管理者和 各種活動的組織者、指揮者。操作系統(tǒng)采川時間r法調度進程,使系統(tǒng)資源得到充分的利川, 用戶也可以花更少的時間完成更多的工作,通過這次進程調度實驗,讓我明白了系統(tǒng)時間片 的調度方法,對操作系統(tǒng)理論的學習更加深一層.并且增強了用c語言的編程能力。在編程 的過程中,遇到了種種困難,并且一一的克服了,這使我產(chǎn)生很大的成就感。實驗二作業(yè)調度一、實驗名稱:進程調度用高級語言編寫和調試一個或多個作業(yè)調度的模擬程序,加深對作業(yè)調度算法的理解。二、實驗內容:在單道批處理系統(tǒng)中,作業(yè)一投入運行,它就占有計算機的一

19、切資源直到作業(yè)完成為止, 因此調度作業(yè)時不必考慮它所耑要的資源是否得到滿足,它所占川的cpu時限等因素。而在多道批處理系統(tǒng)中,作業(yè)首先存放在外存,當系統(tǒng)擁有的資源足夠分配給一個作業(yè), 就將資源分配給此作業(yè),并將此作業(yè)調進內存。當系統(tǒng)資源不足以分配給一個作業(yè)時,則等 待已經(jīng)分配資源的作業(yè)運行完成后釋放資源增加系統(tǒng)資源。(一)、為單道批處理系統(tǒng)設計一個作業(yè)調度程序1、實驗原理。作業(yè)等待算法:分別采用先來先服務(fcfs),最短作業(yè)優(yōu)先(sjf)、響應比高者優(yōu) 先(hrn)的調度算法。(1)先來先服務(fcfs)算法先來先服務作業(yè)調度算法是一種較簡單的作業(yè)調度算法,即每次調度是從后備作業(yè)隊列 中選擇

20、一個最先進入該隊列的作業(yè),將它調入內存,分配資源、創(chuàng)建相應的進程,放入進程 就緒隊列準備運行。fcfs算法利于長作業(yè),不利于短作業(yè),而大多數(shù)的作業(yè)是i/o繁忙的 短作業(yè)。以fcfs作為主調度算法是不常用的。(2)短作業(yè)優(yōu)先調度算法(sjf)短作業(yè)優(yōu)先調度算法是指操作系統(tǒng)在進行作業(yè)調度時以作業(yè)長短作為優(yōu)先級進行調 度。該調度算法付以照顧到實際上占作業(yè)總數(shù)絕大部分的短作業(yè),使它們能比長作業(yè)優(yōu)先調 度執(zhí)行。這時后備作業(yè)隊列按作業(yè)優(yōu)先級巾高到低順序排列,當作業(yè)進入后備隊列時要按該 作業(yè)優(yōu)先級放罝到后備隊列相應的位罝。實踐證明,該調度算法的性能是最好的,單位時間 的作業(yè)吞吐量也最大,但也存在缺點:對長作

21、業(yè)極為不利。(3)響應比高者優(yōu)先(hrn)的調度算法采用響應比高者優(yōu)先調度算法,進行調度時必須計算出系統(tǒng)中的所有滿足必要條件作業(yè) 的響應比;從屮選擇響應比最島的一個作業(yè)裝入主存儲器、分配資源,由于是實驗,所以就 用將作業(yè)的作業(yè)控制塊岀隊,并輸出作業(yè)的作業(yè)名代替裝入主存儲器,同時修改系統(tǒng)的資源 數(shù)量;用同樣方法選擇第二個、第三個直到不再有滿足必要條件的作業(yè)。調度算法的流程圖如下:2、源代碼及運行結果:include stdio. h#define getjcb(type) (type*)malloc(sizeof(type) define null 0int n=0,time=0:float e

22、ti, ewi: struct jcb char name10:char state; int ts; float super; int tb; int tc; float ti: float wi: int ntime; struct jcb *1 ink; *p, *q, *head=null: typedef struct jcb jcb; inital () int i:/*作業(yè)名*/*作業(yè)狀態(tài)*/*提交時間*/*優(yōu)先權*/*開始運行時間*/ /*完成時間*/*周轉時間*/*帶權周轉時間*/ /*作業(yè)所需運行時間 /*結構體指針*/printf (n 輸入作業(yè)數(shù):n");sc

23、anf("%d,&n);printf ("輸入:n作業(yè)名t到達時間七服務時間11"); for (i=0;in:i+) p=getjcb(jcb):scanf("%st%dt%d", &p-name, &p-ts, &p->ntime): p->state=,w1 :p-link=null; if(head=null) head二q二p; else q->link-p;qp; void print(jcb *pr, int m)jcb *p;printf(ntime=%d,time):if (m

24、=3) print!cn作業(yè)名t狀態(tài)t到達時間1服務時間t優(yōu)先權完成時間4周轉吋間1 帶權周轉時間ii"kprintf (st%ct%dt%dt%4. 2ft%dt%4. 2ft%4. 2fn'pr-name, pr->state, pr-ts, pr->ntime, pr-super, pr->tc, pr-ti, pr-wi);else printf ("n作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間n"); printf (st%ct%dt%dt%dt%4. 2ft%4. 2fn' pr-name, pr->

25、state, pr-ts, pr->ntime, pr-tc, pr>ti, pr-wi);p-hcad;do if(p->state= w)if (m=3) printf (*%st%ct%dt%dt%4. 2fn,p->namo, p->state, p-ts,p-ntime,p-super);else printf(st%ct%dt%dnp-name, p->state, p->ts, p-ntime);p-p->link;while(p!=null);p-hcad;do if (p->state=,f) if(m=3)printf

26、(,%st%ct%dt%dt%4. 2ft%dt%4. 2ft%4. 2fn, p-name, p->state, p->ts, p->ntime, p-super, p->tc, p->ti, p-wi);elseprintf("%st%ct%dt%dt%dt%4. 2ft%4. 2fn'p-name, p->state, p->ts, p-ntime, p-tc,p->ti, p-wi);p=p->link;while(p!=null);void last () eti/=n;ewi/=n;printsrn平均周轉吋f

27、aj=%7. 3fn平均帶權周轉吋間=%7. 3fn", eti, ewi);super () jcb *padv;padv=head;do if(padv->state= w &&padv->ts=time)padv->super=(float)(time-padv->ts+padv-nt ime)/padv->nt ime; padv=padv-link;wh i1e(padv!=null);void hrn(m) jcb *min;int i, iden;for (i=0;i<n;i+)p=min=head;iden=l; s

28、uper ();doif(p->state= w &&p->ts<=t ime) if(iden) min=p;iden=0; else if(p->super>min->super) min=p;p=p->1 ink;while(p!=null);if(idcn) i:time+;printf("ntime=%ct, time);if (time>1000) printf (,znruntime is too longerror);getch() ;else running (min, m): void sjf(int

29、 m)jcb *min; int i, idcn;for (i二0;in;i+) p-min=head;idcn=l: do if (p->state=,w* &&p->ts<=time) if (idcn) minp;idcn-0; else if(p->ntime<min->ntime) min二p; p-p->link;while(p!=null);if(idcn) i;printf("ntime=%ct, time);time+;if (time100)printf(nruntime is too longerror”

30、);getch();else running(min, m);fefs(int m) int i, iden;for(i二0;in;i+) p=head;iden=l;doif (p-state= w &&p->ts<=time) idcn-0; if(iden)p=p->link;while(p!=null&&iden):if (idcn) i; print f (,znttime) ;time+;if(time100)printf(nruntime is too longerror”);getch();else running (p, m)

31、:running (jcb *p, int m)p->tb=time;p->state=,: p-tc二p-tb+p-nt ime; p->ti=(float)(p-tc-p-ts); p->wi=(float)(p->ti/p->ntime): eti+=p->ti;ewi+=p->wi; print (p, m); t ime+=p->ntime; p->state= f ;printf ("n 作業(yè)s 已經(jīng)朵成! vpress any key to continue. . . n", p->name);

32、 getcho ;void runjcb(int m) printf (nn 作業(yè)開始運行"); switch(m)case 1:fefs(m);break;case 2:sjf(m);break; case 3:hrn(m);break;default:printf(n 運行錯誤! n);exit ();start () int m;char str100="n選擇調度算法:nl.先來先服務fcesn2.最短作業(yè)優(yōu)先sjfn3.響應比商者優(yōu)先hrnn ;printf(%s", str); m=getch()-48;inital ();if(l<=m&

33、;&m<=3) runjcb(m):else printf ("n選擇錯誤,請東新選擇! n");start ();last ();main () start ();printf("ri所有作業(yè)完成!"); getch();運行結果:1、選擇先來先服務fcfs選擇調度算法:1. 先來先服務fcfs2. 最短作業(yè)優(yōu)先sjf3. 響應比高者優(yōu)先hrn輸入作業(yè)數(shù):5輸入:作業(yè)名 到達時間服務時間a04b13c25d32e44作業(yè)開始運行time=0作、ik名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間ar0444. 001.00bw13cw2

34、5dw32ew44作、ik a己經(jīng)完成press any key to continuetime=4作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間br1376. 002. 00cw25dw32ew44ai70444.001.00作業(yè)b己經(jīng)完成press any key to continuetime=7作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間cr251210.002.00dw32ew44a1:0444. 001.00bi71376.002. 00作業(yè)c己經(jīng)完成press any key to continuetime=12作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉

35、時間dr321411.005. 50ew44a1:0444. 001.00b1:1376. 002.00ci7251210.002. 00作業(yè)d已經(jīng)完成press any key to continue."time=14作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間er441814. 003.50af0444.001.00bf1376.002.00cf251210.002.00df321411.005. 50作業(yè)e已經(jīng)完成press any key to continue平均周轉時間=9. 000 平均帶權周轉時間800 所有作業(yè)完成!2、選擇最短作業(yè)優(yōu)先sjf (簡要過程)

36、 作業(yè)開始運行t i me=0作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間ar0444.001.00bw13cw25dw32ew44作業(yè)a己經(jīng)完成press any key to continuetime=4作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間dr3263. 001.50bw13cw25ew44ai70444.001.00作業(yè)d己經(jīng)完成press any key to continuetime=6作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間br1398. 002. 67cw25ew44af0444. 001.00df3263. 001.50作業(yè)b已經(jīng)完成p

37、ress any key to continue". time-9作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間er44139. 002.25cw25af0444. 001.00bf1398.002.67df3263. 001.50作業(yè)e已經(jīng)完成press any key to continue."time=13作業(yè)名狀態(tài)到達時間服務時間完成時間周轉時間帶權周轉時間cr251816.003.20af0444.001.00bf1398. 002. 67df3263.001.50ef44139. 002.25作業(yè)c已經(jīng)完成press any key to continu

38、e." 平均周轉時間=8. 000 平均帶權周轉時間123 所有作業(yè)完成!3、響應比高者優(yōu)先hrn (簡要過程) 作業(yè)開始運行time=0作業(yè)名狀態(tài)到達時間服務時間優(yōu)先權完成時間周轉時間帶權周轉時間ar041.0044.001.00bw13-0.00cw25dw32ew44作業(yè)a己經(jīng)完成press any key to continuetime=4作業(yè)名狀態(tài)到達時間服務時間優(yōu)先權完成時間周轉時間帶權周轉時間br132. 00 76. 002.00cw25dw32ew44ai7041.00 44.001.作業(yè)b己經(jīng)完成press any key to continuetime=7作業(yè)名

39、狀態(tài)到達時間服務時間優(yōu)先權完成時間周轉時間帶權周轉時間dr323. 00 96. 003.00cw25ew44a1:041.00 44. 001.00bf132.00 76. 002. 00作業(yè)d已經(jīng)完成press any key to continue."time=9作業(yè)名狀態(tài)到達時間服務時間優(yōu)先權完成時間周轉時間帶權周轉時間cr252. 40 1412.002. 40ew442. 25af041.00 44. 001.00bf132. 00 76.002.00df323. 00 96. 003. 00作業(yè)c已經(jīng)完成press any key to continue".

40、timo-14作業(yè)名狀態(tài)到達時間服務時間優(yōu)先權完成時間周轉時間帶權周轉時間er443. 25 1814. 003.50af041.00 44.001.00bf132. 00 76.002.00cf252. 40 1412.002.40df323. 00 96.003. 00作業(yè)e已經(jīng)完成press any key to continue". 平均周轉時間=8. 400平均帶權周轉時間380所有作業(yè)完成!(二)、編寫并調度一個多道程序系統(tǒng)的作業(yè)調度模擬程序。作業(yè)調度算法:采用基于先來先服務的調度算法??梢詤⒖颊n本中的方法進行設計。 對于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調

41、度作業(yè)時必須考慮到每個作業(yè)的資源要求。在單道批處理系統(tǒng)屮,作業(yè)一投入運行,它就占有計算機的一切資源直到作業(yè)完成為止,因 此凋度作業(yè)時不必考慮它所需要的資源是否得到滿足,它所占用的cpu時限等因素。而在多道批處理系統(tǒng)中,作業(yè)首先存放在外存,當系統(tǒng)擁有的資源足夠分配給一個作業(yè),就將資源分配給此作業(yè),并將此作業(yè)調進內存。當系統(tǒng)資源不足以分配給一個作業(yè)時,則等待己經(jīng)分配資源的作業(yè)運行完成后釋放資源增加系統(tǒng)資源。程序及運行結果如下:#includeiostream#includestdio. h>#define getb(type) (type *)malloc(sizeof(type)defin

42、e null 0typedef struct jcb /定義作業(yè)控制塊 jcb char name 10 ;/作業(yè)名 int stime;/開始運行時刻 int rtime;/需要運行時間,即提供服務的時間 char state;/作業(yè)狀態(tài) jcb *next;/鏈指針1jcb;jcb *ready=null, *p:int t;/時間量int uime;/總周轉時間float trtime;/總的帶權周轉時間void sort ()/構造鏈表存放作業(yè)jcb *fir, *sec; if (roady=null)ready=p;elsofir=roady->noxt;if(fir二二nu

43、ll)sec二ready;olsowhile(fir!二null)soc=fir;fir=fir->noxt;)soc->next-p;)void init ()/輸入作業(yè)參數(shù)int i,num;printf (輸入作業(yè)數(shù):); scanf (d, &num) ;/輸入作業(yè)數(shù)for (i=0; i<num; i+) printf (輸入第d 個作業(yè)的信息:n", i+1); p=gotb(jcb); printf (作業(yè)名:); scanfp->namo);printf ("開始運行時刻:"); scanf(%d, &p-&

44、gt;stimo);printf("需要運行時間:");scanf(%d, &p->rtimo);p->state=;/每個作業(yè)的初始狀態(tài)總是等待wp->noxt-nl'll;sort ();t=0;/時間量tti me=0; /總周轉時間trtime-0;/總的帶權周轉時間getchar () :/接收字符int length ()/鏈表長int i=0;jcb *q; q=roady;while(q!-null)i+;q-q->next; return i;void destroy (int end)/完成作業(yè) int i=end

45、; float w;print.f(n 作業(yè)完成時i); printf (*n 周轉時間:%d,i-(p->stime);w=(float) (i-(p-stime)/(foat) (p->rtime) ;/帶權周轉時間=周轉時間/提供服務的時間 printfcn 帶權周轉時間:2. 2f", w):void run()/運行作業(yè) int start,end;start=t;/初始值為0end=(p-rtime)+start;/作業(yè)完成時間=運行時間+幵始運行時刻 tti me+=end-p->st i me; /總周轉時間=完成時間一開始運行時刻 trtime+=

46、 (float) (end-(p->stime)/(float) (p->rtime);/總的帶權周轉時間 t+=p->rt ime;destroy (end);void main()/主函數(shù) int len,count; count=0;printf (*ttcopyright:林慶達計算機 03(7)班");printf (nt *作業(yè)調度算法:先來先服務(fcfs)*n");ini t();/初始化數(shù)裾len=length() ;/就緒作業(yè)的長度 printf(npress any key to continue .); getchar ();whi

47、le(len!=0)&&(ready! =null) /若就緒隊列不為空 count+; p=ready;printf cn正在執(zhí)行的作業(yè)是:s. , p->name);ready=ready-next;p->next=nl'll;p->state=,r ;run();printf(npress any key to continue .); getchar ();)printfcn所有作業(yè)全部完成運行!n");printf (平均周轉吋間為:3. 2fn", (float) ttime/(float)count);/總周轉時間/作

48、業(yè)數(shù) printf ("'k均帶權周較吋叫為:3. 2fn", trtime/(float)count) ;/總的帶權周轉時間/作業(yè)數(shù) getchar ();運行結果: copyright:林慶達計算機03 (7)班*料*作業(yè)調度算法:先來先服務(fcfs) *輸入作業(yè)數(shù):5 輸入第1個作業(yè)的信息:作業(yè)名:a 開始運行時刻:0 需要運行時間:4 輸入第2個作業(yè)的信息:作業(yè)名:b 開始運行時刻:1 需要運行時間:3 輸入第3個作業(yè)的信息:作業(yè)名:c 開始運行時刻:2 需要運行時間:5 輸入第4個作業(yè)的信息:作業(yè)名:d 開始運行時刻:3 需要運行時間:2 輸入第5個作業(yè)

49、的信息:作業(yè)名:e 開始運行時刻:4 需要運行時間:4press any key to continue正在執(zhí)行的作業(yè)是. a 作業(yè)完成時間:4 周轉時間:4 帶權周轉時間:1.00press any key to continue正在執(zhí)行的作業(yè)是. b 作業(yè)完成時間:7 周轉時間:6 帶權周轉時間:2. 00press any key to continue正在執(zhí)行的作業(yè)是. c 作業(yè)完成時間:12 周轉時間:10 帶權周轉時間:2. 00press any key to continue正在執(zhí)行的作業(yè)是. d 作業(yè)完成時間:14 周轉時間:11 帶權周轉時間:5. 50press any

50、key to continue正在執(zhí)行的作業(yè)是. e 作業(yè)完成時間:18 周轉時間:14 帶權周轉時間:3. 50press any key to continue所有作業(yè)全部完成運行!平均周轉時間為:9. 00 平均帶權周轉時間:2.80 press any key to continue五、心得體會:通過實驗和課程設計,還進一步鍛煉了自己的編程能力,增強了實踐和動手能力,使 自己的編程能力和邏輯思考能力有了較大的進步。實驗三存儲管理一. 實驗目的:存儲管理的主要功能之一是合理分配空間,請求頁式管理是一種常用的虛擬存儲管理技 術。本實驗的目的是通過請求頁式管理屮的頁而置換算法設計,了解虛擬存

51、儲技術的特點, 掌握請求頁式管理的頁面罝換算法。二. 實驗內容:1、分區(qū)管理的原理:將存儲器劃分成若干段大小固定的區(qū)域,一個區(qū)域里只能運行一個 程序,程序只能在其自身所在的分區(qū)屮活動。2、同定式分區(qū)管理的原理:區(qū)域大小及起始地址是固定的。一個分區(qū)只能存放一個程序。 需要設置一個分區(qū)說明表來標明內存的使用狀態(tài)。根據(jù)分區(qū)說明表來給程序分配相應的區(qū) 域。由于程序不可能剛剛占有一個分區(qū)的大小,這樣就會在一個分區(qū)之屮留下零頭,造成 了極大的浪費。3、可變式分區(qū)管理的原理:區(qū)域的大小及起始地址是可變的,根裾程序裝入時的大小動 態(tài)地分配一個區(qū)域。保證每個區(qū)域之中剛 好放一個程序。這樣可以充分地利用存儲 空間

52、,提高內存的使川效率。如果一個程 序運行完畢,就要釋放出它所占有的分區(qū),使之變成空閑區(qū)。這樣就會出現(xiàn)空閑區(qū)與 占用區(qū)相互交錯的情況。這樣就需要p表,f表來分別表示內存的占用區(qū)狀態(tài)與空閑 區(qū)的狀態(tài)。(一)、設計一個固定式分區(qū)分配的存儲 管理方案,并模擬實現(xiàn)分區(qū)的分配和回收 過程。1. 通過隨機數(shù)產(chǎn)生一個程序指令序列,使 得50%的指令是順序執(zhí)行的。25%的指令 是均勻分布在前地址部分,25%的指令是 均勻分布在后地址部分。2. fifo算法總是選擇在內存駐留時間最長 的一頁將k淘汰。fifo算法認為先調入內 存的頁不再被訪w的可能性要比其他頁大,因而選擇最先調入內存的頁換出。實現(xiàn)fifo 算法需要把各個已分配頁面按分配時間順 序記錄在一個數(shù)組中,每次淘汰最早進入數(shù) 組的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論