廣工操作系統(tǒng)實(shí)驗(yàn)_第1頁
廣工操作系統(tǒng)實(shí)驗(yàn)_第2頁
廣工操作系統(tǒng)實(shí)驗(yàn)_第3頁
廣工操作系統(tǒng)實(shí)驗(yàn)_第4頁
廣工操作系統(tǒng)實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 操作系統(tǒng)實(shí)驗(yàn)報(bào)告 學(xué)生學(xué)院 計(jì)算機(jī)學(xué)院 專業(yè)班級(jí) 12級(jí)網(wǎng)絡(luò)1班 學(xué) 號(hào) 3112006345 學(xué)生姓名 沙宇豐 指導(dǎo)教師 李敏 2015 年 01月 07日目錄1 實(shí)驗(yàn)一 進(jìn)程調(diào)度2 實(shí)驗(yàn)二 作業(yè)調(diào)度3 實(shí)驗(yàn)三 存儲(chǔ)管理 實(shí)驗(yàn)一 進(jìn)程調(diào)度(實(shí)現(xiàn)了最高優(yōu)先級(jí)優(yōu)先,時(shí)間片輪轉(zhuǎn),多級(jí)反饋隊(duì)列三種算法 )1、 實(shí)驗(yàn)?zāi)康?編寫并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用最高優(yōu)先數(shù)優(yōu)先算法,時(shí)間片輪轉(zhuǎn)算法,多級(jí)反饋隊(duì)列算法對(duì)進(jìn)程進(jìn)行調(diào)度。以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解 2:實(shí)驗(yàn)原理每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊( PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已運(yùn)行時(shí)間、進(jìn)程狀態(tài)等

2、等。 每個(gè)進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行R(Run)兩種狀態(tài)之一。 就緒進(jìn)程獲得 CPU后都只能運(yùn)行一個(gè)時(shí)間片。用運(yùn)行時(shí)間加1來表示。 如果運(yùn)行一個(gè)時(shí)間片后,進(jìn)程的已占用 CPU時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤消該進(jìn)程,如果運(yùn)行一個(gè)時(shí)間片后進(jìn)程的已占用CPU時(shí)間還未達(dá)所需要的運(yùn)行時(shí)間,也就是進(jìn)程需要繼續(xù)運(yùn)行,此時(shí)應(yīng)分配時(shí)間片給就緒隊(duì)列中排在該進(jìn)程之后的進(jìn)程,并將它插入就緒隊(duì)列隊(duì)尾。 3:實(shí)驗(yàn)內(nèi)容,方法首先對(duì)于:最高優(yōu)先數(shù)算法: 最高優(yōu)先數(shù)算法的基本思想是把cpu分配給就緒隊(duì)列中優(yōu)先數(shù)最高的進(jìn)程。而我采用優(yōu)先數(shù)動(dòng)態(tài)變化的方式,進(jìn)程在沒獲得一次cpu時(shí)間后其優(yōu)先數(shù)就減一,然后對(duì)各個(gè)進(jìn)程

3、的優(yōu)先數(shù)進(jìn)行重新排序。繼續(xù)把cpu分配給優(yōu)先數(shù)最高的進(jìn)程。進(jìn)程的剩余時(shí)間為0時(shí)就退出隊(duì)列。首先用create()函數(shù)創(chuàng)建鏈表并對(duì)其初始化,然后對(duì)鏈表按照優(yōu)先級(jí)大小進(jìn)行排序,然后把排序后的鏈表放進(jìn)processing()函數(shù)中進(jìn)行處理,讓其占有一個(gè)時(shí)間片執(zhí)行,若進(jìn)程任然未完成,則把該進(jìn)程放進(jìn)insert()函數(shù)中插入就緒隊(duì)列中。用disp()函數(shù)進(jìn)行進(jìn)程的顯示。4:流程圖:5:重要函數(shù)和數(shù)據(jù)結(jié)構(gòu)的說明:Struct PCB對(duì)進(jìn)程結(jié)構(gòu)體進(jìn)行定義Create()函數(shù)進(jìn)行鏈表的初始化Processing()函數(shù)對(duì)整個(gè)鏈表的循環(huán)進(jìn)行處理Sort()函數(shù)對(duì)優(yōu)先級(jí)進(jìn)行動(dòng)態(tài)排序:Disp()函數(shù)對(duì)結(jié)果進(jìn)行顯示

4、struct PCB *sort(struct PCB *head)/*遞增排序函數(shù):入口參數(shù):鏈表的頭指針,此為鏈表中的排序函數(shù)*/struct PCB *p,*q;int temp;for(p=head;p!=NULL;p=p->next)for(q=p->next;q!=NULL;q=q->next)if(p->prio<q->prio) /通過對(duì)鏈表里面的數(shù)據(jù)進(jìn)行互換達(dá)到重新排序temp=q->prio;q->prio=p->prio;p->prio=temp;temp=q->name;q->name=p->

5、name;p->name=temp;temp=q->run;q->run=p->run;p->run=temp;temp=q->rest;q->rest=p->rest;p->rest=temp;return head; 5:實(shí)驗(yàn)效果::6:實(shí)驗(yàn)總結(jié): 對(duì)于最高優(yōu)先數(shù)優(yōu)先的算法,在設(shè)計(jì)好進(jìn)程控制塊鏈表后,就要對(duì)優(yōu)先級(jí)進(jìn)行排序,優(yōu)先數(shù)動(dòng)態(tài)變化和鏈表的循環(huán)是比較花時(shí)間處理的,如上圖所顯示,優(yōu)先級(jí)在進(jìn)程每執(zhí)行一個(gè)時(shí)間片后減一,實(shí)現(xiàn)動(dòng)態(tài)變化,開始在這兩部分總是出問題,經(jīng)過耐心的處理還是把問題很好的解決了。對(duì)于第二個(gè):時(shí)間片輪轉(zhuǎn)算法, 3:實(shí)驗(yàn)方法,

6、步驟:基本思想:所有就緒進(jìn)程按fcfs排成一個(gè)隊(duì)列,總是把處理機(jī)分配給隊(duì)首的進(jìn)程,各進(jìn)程占用的cpu時(shí)間片相同,如果運(yùn)行進(jìn)城用完時(shí)間片后還未完成,就把它送進(jìn)就緒隊(duì)列的末尾,把處理機(jī)重新分配給隊(duì)首的集成。直至所有的進(jìn)程運(yùn)行完畢。4:流程圖 :4:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct PCB對(duì)進(jìn)程結(jié)構(gòu)體進(jìn)行定義 Create()函數(shù)進(jìn)行鏈表的初始化 Insert()函數(shù)把未完成的進(jìn)程插入就緒隊(duì)列的末尾 Processing()函數(shù)對(duì)鏈表循環(huán)進(jìn)行處理 Disp()函數(shù)對(duì)結(jié)果進(jìn)行顯示其中insert()函數(shù)對(duì)進(jìn)程插入就緒隊(duì)列末尾是比較重要的 void insert(struct PCB *p) stru

7、ct PCB *p1,*p2; p2=p1=p; p2=(struct PCB *)malloc(sizeof(struct PCB); while(p1->next)p1=p1->next; p1->next=p2; p2->state="就緒中" p2->name=p->name; p2->run=p->rest; p2->queue=(p->queue)+1;p2->rest=p->rest; p2->fragement=2; p2->next=NULL; :5: 實(shí)驗(yàn)效果::6:實(shí)驗(yàn)

8、總結(jié):如上圖所示,進(jìn)程在一個(gè)時(shí)間片執(zhí)行完后進(jìn)程,剩余時(shí)間為0,退出隊(duì)列,進(jìn)程2在執(zhí)行完一個(gè)時(shí)間片后仍然未完成,進(jìn)入就緒隊(duì)列末尾,以此類推,直至三個(gè)進(jìn)程都完成,這個(gè)時(shí)間片輪轉(zhuǎn)算法比較簡(jiǎn)單,只需要處理好把未完成的進(jìn)程插入就緒隊(duì)列末尾即可,把已完成的從就緒隊(duì)列中釋放。調(diào)試過程中總是會(huì)出現(xiàn)bug,但需要我們耐心一個(gè)個(gè)解決。 第三個(gè):多級(jí)隊(duì)列反饋算法::3:實(shí)驗(yàn)方法,步驟:其思想是:當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一個(gè)隊(duì)列的末尾,按fcfs的原則排隊(duì)等待,當(dāng)輪到該進(jìn)程執(zhí)行,如能在該時(shí)間片內(nèi)完成,則撤出系統(tǒng),倘若在時(shí)間片內(nèi)未完成,則放進(jìn)第二個(gè)隊(duì)列的末尾,按同樣的fcfs原則等待執(zhí)行。首先用creat

9、e()函數(shù)創(chuàng)建鏈表并對(duì)其初始化,然后把鏈表放進(jìn)processing()函數(shù)中進(jìn)行處理,若任然未完成,則把該進(jìn)程放進(jìn)insert()函數(shù)中插入下 一隊(duì)列。4:流程圖:4:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu): struct PCB對(duì)進(jìn)程結(jié)構(gòu)體進(jìn)行定義 Create()函數(shù)進(jìn)行鏈表的初始化 Insert()函數(shù)把未完成的進(jìn)程插入下一個(gè)就緒隊(duì)列的末尾 Processing()函數(shù)對(duì)鏈表循環(huán)進(jìn)行處理 Disp()函數(shù)對(duì)結(jié)果進(jìn)行顯示Insert()函數(shù)把進(jìn)程插入下一個(gè)就緒隊(duì)列 void insert(struct PCB *p) struct PCB *p1,*p2; p2=p1=p; p2=(struct PCB *

10、)malloc(sizeof(struct PCB); while(p1->next)p1=p1->next; p1->next=p2; p2->state="就緒中" p2->name=p->name; p2->run=p->rest; p2->queue=(p->queue)+1;p2->rest=p->rest; p2->fragement=2*(p->fragement); p2->next=NULL; void processing(struct PCB *head) /對(duì)占

11、有cpu時(shí)間的進(jìn)程進(jìn)行系列的處理 struct PCB *p1,*p2,*p3; int n=0; p1=head; while(p1) p1->rest=p1->rest-p1->fragement; if(p1->rest<0)p1->rest=0; p1->state="運(yùn)行中" disp(p1); if(p1->rest=0) printf("ttt進(jìn)程%d已完成n",p1->name); if(p1->rest>0)insert(p1); p1=p1->next; 5:實(shí)驗(yàn)

12、效果:6:實(shí)驗(yàn)總結(jié): 對(duì)于這個(gè)多級(jí)隊(duì)列反饋,我在結(jié)構(gòu)體pcb的定義中增加了一個(gè)表示隊(duì)列序號(hào)的queue來從邏輯上標(biāo)識(shí)不同的隊(duì)列,:和讓時(shí)間片的大小呈指數(shù)增長(zhǎng)的變量fragement,如上圖所示,進(jìn)程1在第一個(gè)時(shí)間片運(yùn)行完后任然未完成,則進(jìn)入第二個(gè)就緒隊(duì)列,它的時(shí)間片大小變?yōu)榱?,使得進(jìn)入下個(gè)隊(duì)列的進(jìn)程能獲得較大的時(shí)間片。可見,多級(jí)反饋隊(duì)列能夠比較好的適應(yīng)長(zhǎng)作業(yè)和短作業(yè)的需求。 實(shí)驗(yàn)二 作業(yè)調(diào)度 (實(shí)現(xiàn)了單道和多道)一:實(shí)驗(yàn)?zāi)康模壕帉懖⒄{(diào)試作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對(duì)作業(yè)調(diào)度算法的理解。二:實(shí)驗(yàn)內(nèi)容和要求: 1、為單道批處理系統(tǒng)設(shè)計(jì)一個(gè)作業(yè)調(diào)度程序(1)、編寫并調(diào)

13、試一個(gè)單道處理系統(tǒng)的作業(yè)調(diào)度模擬程序。(2)、作業(yè)調(diào)度算法:分別采用先來先服務(wù)(FCFS)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法。 (3)、由于在單道批處理系統(tǒng)中,作業(yè)一投入運(yùn)行,它就占有計(jì)算機(jī)的一切資源直到作業(yè)完成為止,因此調(diào)度作業(yè)時(shí)不必考慮它所需要的資源是否得到滿足,它所占用的 CPU時(shí)限等因素。(4)、每個(gè)作業(yè)由一個(gè)作業(yè)控制塊JCB表示,JCB可以包含如下信息:作業(yè)名、提交時(shí)間、所需的運(yùn)行時(shí)間、所需的資源、作業(yè)狀態(tài)、鏈指針等等。作業(yè)的狀態(tài)可以是等待W(Wait)、運(yùn)行R(Run)和完成F(Finish)三種狀態(tài)之一。每個(gè)作業(yè)的最初狀態(tài)總是等待W。(5)、對(duì)每種調(diào)度算法都要求打印每個(gè)作業(yè)開始

14、運(yùn)行時(shí)刻、完成時(shí)刻、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,以及這組作業(yè)的平均周轉(zhuǎn)時(shí)間及帶權(quán)平均周轉(zhuǎn)時(shí)間,并比較各種算法的優(yōu)缺點(diǎn)。3、實(shí)驗(yàn)設(shè)計(jì)方案及原理1、編寫并調(diào)試一個(gè)單道處理系統(tǒng)的作業(yè)等待模擬程序。 已知它們進(jìn)入系統(tǒng)的時(shí)間、估計(jì)運(yùn)行時(shí)間。分別采用先來先服務(wù)(FCFS),最短作業(yè)優(yōu)先(SJF)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法,計(jì)算出作業(yè)的平均周轉(zhuǎn)時(shí)間和帶權(quán)的平均周轉(zhuǎn)時(shí)間 。 對(duì)每種調(diào)度算法都要求打印每個(gè)作業(yè)開始運(yùn)行時(shí)刻、完成時(shí)刻、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,以及這組作業(yè)的平均周轉(zhuǎn)時(shí)間及帶權(quán)平均周轉(zhuǎn)時(shí)間,并比較各種算法的優(yōu)缺點(diǎn)。對(duì)于先來先服務(wù)fcfs調(diào)度算法:流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct fcf

15、s 定義結(jié)構(gòu)體Print()函數(shù)對(duì)到來的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來的作業(yè)的時(shí)間先后進(jìn)行排序Deal()函數(shù)對(duì)先來先服務(wù)原則對(duì)作業(yè)進(jìn)行系列處理Main()函數(shù)進(jìn)行對(duì)各個(gè)函數(shù)的串接。定義結(jié)構(gòu)體:struct fcfschar name10;float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;Deal函數(shù)按照fcfs原則處理各個(gè)作業(yè),是本程序的重要函數(shù)void deal(fcfs *p,int N) int k; for(k=0;k&

16、lt;=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 4:實(shí)驗(yàn)效果:5:實(shí)驗(yàn)總結(jié):對(duì)于先來先服務(wù)算法,如圖所示

17、:在就緒隊(duì)列中按照時(shí)間到達(dá)先后挑選要進(jìn)行的作業(yè),各個(gè)作業(yè)的運(yùn)行順序分別是2 1 3;fcfs原則只考慮到了到達(dá)的時(shí)間先后,而未考慮作業(yè)要求的時(shí)長(zhǎng),這是個(gè)不足之處。在調(diào)試過程中遇到了不少bug,需要我們細(xì)心調(diào)試。短作業(yè)優(yōu)先調(diào)度算法流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct sjf定義結(jié)構(gòu)體Print()函數(shù)對(duì)到來的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來的作業(yè)的時(shí)間先后進(jìn)行排序Deal()函數(shù)按照最短作業(yè)優(yōu)先服務(wù)原則對(duì)作業(yè)進(jìn)行系列處理運(yùn)行階段中deal函數(shù)按照短作業(yè)優(yōu)先原則對(duì)作業(yè)進(jìn)行處理void deal(sjf *p,int N) int k; for(k=0;k<=N-1

18、;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 實(shí)驗(yàn)效果圖:實(shí)驗(yàn)總結(jié):對(duì)于短作業(yè)調(diào)度算法:如圖所示,優(yōu)先選擇短作業(yè),參

19、考了幾個(gè)作業(yè)調(diào)度的范例,作業(yè)調(diào)度實(shí)踐起來并不難,但需要慢慢調(diào)試。和同學(xué)討論了設(shè)計(jì)思路之后就開始做了,雖然有小錯(cuò)誤,但是經(jīng)過反復(fù)調(diào)試也修正了BUG。高響應(yīng)比優(yōu)先調(diào)度算法:流程圖: 3:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct zgxyb定義結(jié)構(gòu)體Print()函數(shù)對(duì)到來的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來的作業(yè)的時(shí)間先后進(jìn)行排序Deal()函數(shù)按照高響應(yīng)比優(yōu)先原則對(duì)作業(yè)進(jìn)行系列處理Deal()函數(shù)中對(duì)在運(yùn)行時(shí)各個(gè)作業(yè)的周轉(zhuǎn)時(shí)間,開始時(shí)間,完成時(shí)間等變量進(jìn)行處理,使得響應(yīng)比高者總是先執(zhí)行。void deal(struct zgxyb *p,int N) int k; for(k=0;

20、k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; :4:實(shí)驗(yàn)效果5:實(shí)驗(yàn)總結(jié):在高響應(yīng)比調(diào)度算法中,當(dāng)

21、一個(gè)作業(yè)執(zhí)行完,就要重新對(duì)已經(jīng)到來的在就緒中的作業(yè)進(jìn)行其相應(yīng)比的計(jì)算,然后選取最高響應(yīng)比的作業(yè),循環(huán)直至所有作業(yè)完畢,該算法既照顧了短作業(yè),有考慮到了作業(yè)到達(dá)的先后次序。多道批::1:實(shí)驗(yàn)?zāi)康模?編寫并調(diào)試一個(gè)作業(yè)調(diào)度的模擬批處理作業(yè)調(diào)度。作業(yè)調(diào)度算法,分別采用先來先服務(wù)和短作業(yè)優(yōu)先調(diào)度算法、在批處理系統(tǒng)中歐,要假定系統(tǒng)中具有各種資源及數(shù)量,調(diào)度作業(yè)必須考慮 到給個(gè)資源的要求2:實(shí)驗(yàn)方法,步驟:假定系統(tǒng)可提供給用戶的主存空間共100kb,并有5臺(tái)磁帶機(jī),假定程序已經(jīng)把一批作業(yè)放入輸入井先來先服務(wù)算法:按照作業(yè)進(jìn)入輸入井的順序先后挑選作業(yè),先進(jìn)入者先挑選,若系統(tǒng)中的資源尚不能滿足先進(jìn)入作業(yè)的要求

22、,那么順序挑選作業(yè)。短作業(yè)優(yōu)先算法,總是按作業(yè)運(yùn)行時(shí)間來挑選作業(yè),每次按時(shí)間最短且能滿足的作業(yè)先進(jìn)入主存。當(dāng)作業(yè)執(zhí)行完,做好釋放資源的工作。3:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):struct jcb/*定義進(jìn)程控制塊PCB*/void insertInToReady()/把作業(yè)順序放入隊(duì)列中void sortByIntime()/*按提交時(shí)間進(jìn)行先后排序*/void sortByNtime()/*按提交時(shí)間進(jìn)行先后排序*/void intJCB()/*初始化一個(gè)作業(yè)*/int space()/*求作業(yè)隊(duì)列的長(zhǎng)度*/void display()/*顯示所有作業(yè)的基本信息*/void running()/*建

23、立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài))*/void FCFS()void SJF()Int main()void insertInToReady()/把作業(yè)順序放入隊(duì)列中JCB *next;if (ready = NULL)p->link = ready;ready = p;elsenext = ready;while (next->link != NULL)next = next->link;next->link = p;void sortByIntime()/*按提交時(shí)間進(jìn)行先后排序*/JCB *first, *second, *finish = NULL;i

24、nt insert;while (ready != NULL)insert = 0;p = ready;ready = p->link;p->link = NULL;if (finish = NULL) | (p->intime) < (finish->intime)/*提交時(shí)間最小者,插入隊(duì)首*/p->link = finish;finish = p;else/*比較提交時(shí)間,插入適當(dāng)?shù)奈恢弥?/first = finish;second = first->link;while (second != NULL)if (p->intime) &l

25、t; (second->intime)/*若插入作業(yè)比當(dāng)前作業(yè)提交時(shí)間*/*插入到當(dāng)前作業(yè)前面*/p->link = second;first->link = p;second = NULL;insert = 1;else/*插入作業(yè)提交時(shí)間最大,則插入到隊(duì)尾*/first = first->link;second = second->link;if (insert = 0) first->link = p;ready = finish;void sortByNtime()/*按提交時(shí)間進(jìn)行先后排序*/JCB *first, *second, *finish

26、 = NULL;while (ready != NULL)int insert = 0;p = ready;ready = p->link;p->link = NULL;if (finish = NULL) | (p->ntime) < (finish->ntime)/*需求時(shí)間最小者,插入隊(duì)首*/p->link = finish;finish = p;else/*比較需求時(shí)間,插入適當(dāng)?shù)奈恢弥?/first = finish;second = first->link;while (second != NULL)if (p->ntime) <

27、; (second->ntime)/*若插入作業(yè)比當(dāng)前作業(yè)需求時(shí)間*/*插入到當(dāng)前作業(yè)前面*/p->link = second;first->link = p;second = NULL;insert = 1;else/*插入作業(yè)需求時(shí)間最大,則插入到隊(duì)尾*/first = first->link;second = second->link;if (insert = 0) first->link = p;ready = finish;void FCFS()int sort = 0;/作業(yè)被選中執(zhí)行的次序char ch;sortByIntime();/按進(jìn)入時(shí)

28、間進(jìn)行排序while (!isALLjobDONE()p = ready;while (p != NULL)if (p->state = W)/找正在等待的作業(yè)if (p->needmem < mem &&p->needtapenum < tapenum)/資源滿足作業(yè)的需求ch = getchar();sort+;/作業(yè)被選中執(zhí)行的次序/占用資源mem = mem - p->needmem;tapenum = tapenum - p->needtapenum;p->state = R;/作業(yè)狀態(tài)為正在運(yùn)行printf("

29、;作業(yè)%c被選中執(zhí)行的次序?yàn)?d:n",p->user,sort);display();printf("任何鍵繼續(xù).");ch = getchar();elseprintf("作業(yè)%s請(qǐng)求失敗n",p->name);running();/運(yùn)行作業(yè)p = p->link;printf("n全部作業(yè)已經(jīng)完成n");display();ch = getchar();void SJF()int sort = 0;/作業(yè)被選中執(zhí)行的次序char ch;sortByNtime();/按需要運(yùn)行時(shí)間進(jìn)行排序while (

30、!isALLjobDONE()p = ready;while (p != NULL)if (p->state = W)/找正在等待的作業(yè)if (p->needmem < mem &&p->needtapenum < tapenum)/資源滿足作業(yè)的需求ch = getchar();sort+;/作業(yè)被選中執(zhí)行的次序/占用資源mem = mem - p->needmem;tapenum = tapenum - p->needtapenum;p->state = R;/作業(yè)狀態(tài)為正在運(yùn)行printf("作業(yè)%c被選中執(zhí)行的次

31、序?yàn)?d:n", p->user, sort);display();printf("任何鍵繼續(xù).");ch = getchar();elseprintf("作業(yè)%s請(qǐng)求失敗n", p->name);running();/運(yùn)行作業(yè)p = p->link;printf("n全部作業(yè)已經(jīng)完成n");display();ch = getchar();5:實(shí)驗(yàn)效果:6: 實(shí)驗(yàn)總結(jié):多道批處理比起單道批,需要多考慮作業(yè)對(duì)資源的需求,fcfs和sjf的算法的實(shí)現(xiàn)跟前面都沒有太大的不同。 實(shí)驗(yàn)三: 存儲(chǔ)管理實(shí)驗(yàn)一:實(shí)驗(yàn)?zāi)康?/p>

32、:通過編寫并調(diào)試存儲(chǔ)管理的模擬程序以加深對(duì)存儲(chǔ)管理方案的理解,首席虛擬存儲(chǔ)管理的各種頁面淘汰算法通過編寫并調(diào)試地址轉(zhuǎn)換過程的模擬程序以加深地址轉(zhuǎn)換過程的了解。二:實(shí)驗(yàn)內(nèi)容和要求1、產(chǎn)生一個(gè)需要訪問的指令地址流,它是一系列需要訪問的指令的地址。為不失一般性,你可以適當(dāng)?shù)兀ㄓ萌斯ぶ付ǖ胤椒ɑ蛴秒S機(jī)數(shù)產(chǎn)生器)生成這個(gè)序列,使得 50的指令是順序執(zhí)行的。25的指令均勻地散布在前地址部分,25的地址是均勻地散布在后地址部分。2、指定合適的頁面尺寸(例如以 1K或2K為1頁); 3、指定內(nèi)存頁表的最大長(zhǎng)度,并對(duì)頁表進(jìn)行初始化; 4、 每訪問一個(gè)地址時(shí),首先要計(jì)算該地址所在的頁的頁號(hào),然后查頁表,判斷該頁是

33、否在主存如果該頁已在主存,則打印頁表情況;如果該頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不足主存且頁表已滿,則按 FIFO頁面淘汰算法淘汰一頁后調(diào)入所需的頁,打印頁表情況; 逐個(gè)地址訪問,直到所有地址訪問完畢。三:實(shí)驗(yàn)方法和步驟1:設(shè)計(jì)一個(gè)固定式分區(qū)分配的存儲(chǔ)管理方案,并模擬實(shí)現(xiàn)分區(qū)的分配和回收。假定每個(gè)作業(yè)都是批處理作業(yè),并且不允許動(dòng)態(tài)申請(qǐng)內(nèi)存。為實(shí)現(xiàn)分區(qū)的分配和回收,可以假定一個(gè)分區(qū)說明表,按照表中的有關(guān)信息進(jìn)行分配;固定式分區(qū)分配的存儲(chǔ)管理1:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):typedef struct Memory 該結(jié)構(gòu)體定義可用分區(qū)鏈表節(jié)點(diǎn)。allocMem()函數(shù)分配內(nèi)存空

34、間Release()函數(shù)釋放內(nèi)存空間Check()函數(shù)檢查用戶輸入的合法性bool release(MEM *pm, int base, int size)/釋放內(nèi)存空間 MEM *p = pm; if(!check(pm, base ,size) return false; while(p->next) if(base + size <= p->next->base) break; p = p->next; if(base = p->base + p->size)/低地址相鄰 if(p ->next && p->next-

35、>base = base + size)/釋放區(qū)上下都相鄰 p->size += size + p->next->size; temp = p->next; p->next = p->next->next; free(temp); else/僅與地地址相鄰 p->size += size; else if (p->next && p->next->base = base +size)/僅高地址相鄰 p->next->base = base; p->next->size += size

36、; else/釋放區(qū)上下與空閑區(qū)都不相鄰 temp = getMEM(); temp->size = size; temp->base = base; temp->next = p->next; p->next = temp; return true; int allocMem(MEM *pm, int size)/分配內(nèi)存空間 MEM *p = pm; int base; while(p->next) if(p->next->size >= size) break; p = p->next; if(!p->next) return -1; if(p->next->size = size)/空閑分區(qū)大小剛好等于所需分區(qū) base = p->next->base; p->next = p->next->next; else p->next->size -= size; base = p->next->base; p-&g

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論