![廣工操作系統(tǒng)實(shí)驗(yàn)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/31550d22-e9c1-44b7-b28b-44f776f442d4/31550d22-e9c1-44b7-b28b-44f776f442d41.gif)
![廣工操作系統(tǒng)實(shí)驗(yàn)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/31550d22-e9c1-44b7-b28b-44f776f442d4/31550d22-e9c1-44b7-b28b-44f776f442d42.gif)
![廣工操作系統(tǒng)實(shí)驗(yàn)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/31550d22-e9c1-44b7-b28b-44f776f442d4/31550d22-e9c1-44b7-b28b-44f776f442d43.gif)
![廣工操作系統(tǒng)實(shí)驗(yàn)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/31550d22-e9c1-44b7-b28b-44f776f442d4/31550d22-e9c1-44b7-b28b-44f776f442d44.gif)
![廣工操作系統(tǒng)實(shí)驗(yàn)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/31550d22-e9c1-44b7-b28b-44f776f442d4/31550d22-e9c1-44b7-b28b-44f776f442d45.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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來(lái)表示。 如果運(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)程在沒(méi)獲得一次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)的說(shuō)明: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) /通過(guò)對(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)變化,開始在這兩部分總是出問(wèn)題,經(jīng)過(guò)耐心的處理還是把問(wèn)題很好的解決了。對(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)試過(guò)程中總是會(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來(lái)從邏輯上標(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í)間片??梢?jiàn),多級(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)度算法:分別采用先來(lái)先服務(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í)間。分別采用先來(lái)先服務(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ì)于先來(lái)先服務(wù)fcfs調(diào)度算法:流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct fcf
15、s 定義結(jié)構(gòu)體Print()函數(shù)對(duì)到來(lái)的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來(lái)的作業(yè)的時(shí)間先后進(jìn)行排序Deal()函數(shù)對(duì)先來(lái)先服務(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ù)按照f(shuō)cfs原則處理各個(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ì)于先來(lái)先服務(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)試過(guò)程中遇到了不少bug,需要我們細(xì)心調(diào)試。短作業(yè)優(yōu)先調(diào)度算法流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct sjf定義結(jié)構(gòu)體Print()函數(shù)對(duì)到來(lái)的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來(lái)的作業(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í)踐起來(lái)并不難,但需要慢慢調(diào)試。和同學(xué)討論了設(shè)計(jì)思路之后就開始做了,雖然有小錯(cuò)誤,但是經(jīng)過(guò)反復(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ì)到來(lái)的作業(yè)進(jìn)行初始化并進(jìn)行顯示Sort()函數(shù)對(duì)作業(yè)按照到來(lái)的作業(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)到來(lái)的在就緒中的作業(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)度算法,分別采用先來(lái)先服務(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è)放入輸入井先來(lái)先服務(wù)算法:按照作業(yè)進(jìn)入輸入井的順序先后挑選作業(yè),先進(jìn)入者先挑選,若系統(tǒng)中的資源尚不能滿足先進(jìn)入作業(yè)的要求
22、,那么順序挑選作業(yè)。短作業(yè)優(yōu)先算法,總是按作業(yè)運(yùn)行時(shí)間來(lái)挑選作業(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)跟前面都沒(méi)有太大的不同。 實(shí)驗(yàn)三: 存儲(chǔ)管理實(shí)驗(yàn)一:實(shí)驗(yàn)?zāi)康?/p>
32、:通過(guò)編寫并調(diào)試存儲(chǔ)管理的模擬程序以加深對(duì)存儲(chǔ)管理方案的理解,首席虛擬存儲(chǔ)管理的各種頁(yè)面淘汰算法通過(guò)編寫并調(diào)試地址轉(zhuǎn)換過(guò)程的模擬程序以加深地址轉(zhuǎn)換過(guò)程的了解。二:實(shí)驗(yàn)內(nèi)容和要求1、產(chǎn)生一個(gè)需要訪問(wèn)的指令地址流,它是一系列需要訪問(wèn)的指令的地址。為不失一般性,你可以適當(dāng)?shù)兀ㄓ萌斯ぶ付ǖ胤椒ɑ蛴秒S機(jī)數(shù)產(chǎn)生器)生成這個(gè)序列,使得 50的指令是順序執(zhí)行的。25的指令均勻地散布在前地址部分,25的地址是均勻地散布在后地址部分。2、指定合適的頁(yè)面尺寸(例如以 1K或2K為1頁(yè)); 3、指定內(nèi)存頁(yè)表的最大長(zhǎng)度,并對(duì)頁(yè)表進(jìn)行初始化; 4、 每訪問(wèn)一個(gè)地址時(shí),首先要計(jì)算該地址所在的頁(yè)的頁(yè)號(hào),然后查頁(yè)表,判斷該頁(yè)是
33、否在主存如果該頁(yè)已在主存,則打印頁(yè)表情況;如果該頁(yè)不在主存且頁(yè)表未滿,則調(diào)入一頁(yè)并打印頁(yè)表情況;如果該頁(yè)不足主存且頁(yè)表已滿,則按 FIFO頁(yè)面淘汰算法淘汰一頁(yè)后調(diào)入所需的頁(yè),打印頁(yè)表情況; 逐個(gè)地址訪問(wèn),直到所有地址訪問(wèn)完畢。三:實(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ū)說(shuō)明表,按照表中的有關(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年產(chǎn)品試制協(xié)議樣本(2篇)
- 2025年九年級(jí)物理教學(xué)工作上半年總結(jié)(三篇)
- 2025年二年級(jí)體育教師工作總結(jié)(2篇)
- 城市廣場(chǎng)石材運(yùn)輸合同樣本
- 服裝公司辦公樓裝修合同
- 健身房裝修工程合同-@-1
- 展覽館裝修委托合同
- 陽(yáng)江金平路施工方案
- 2025年度化工安全工程師簡(jiǎn)易勞動(dòng)合同
- 油氣田廢渣運(yùn)輸服務(wù)協(xié)議
- 課堂精練九年級(jí)全一冊(cè)數(shù)學(xué)北師大版2022
- 著衣母嬰臥像教學(xué)設(shè)計(jì)
- 【課件】DNA片段的擴(kuò)增及電泳鑒定課件高二下學(xué)期生物人教版(2019)選擇性必修3
- GB/T 6417.1-2005金屬熔化焊接頭缺欠分類及說(shuō)明
- 2023年湖北成人學(xué)位英語(yǔ)考試真題及答案
- 《社會(huì)主義市場(chǎng)經(jīng)濟(jì)理論(第三版)》第七章社會(huì)主義市場(chǎng)經(jīng)濟(jì)規(guī)則論
- 《腰椎間盤突出》課件
- 漢聲數(shù)學(xué)圖畫電子版4冊(cè)含媽媽手冊(cè)文本不加密可版本-29.統(tǒng)計(jì)2500g早教
- simotion輪切解決方案與應(yīng)用手冊(cè)
- 柴油發(fā)電機(jī)運(yùn)行檢查記錄表格
- DSC曲線反映PET得結(jié)晶度
評(píng)論
0/150
提交評(píng)論