OS綜合實(shí)驗(yàn)報(bào)告_第1頁(yè)
OS綜合實(shí)驗(yàn)報(bào)告_第2頁(yè)
OS綜合實(shí)驗(yàn)報(bào)告_第3頁(yè)
OS綜合實(shí)驗(yàn)報(bào)告_第4頁(yè)
OS綜合實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè) 綜合實(shí)驗(yàn)報(bào)告名 稱(chēng):操作系統(tǒng)原理綜合實(shí)驗(yàn)院 系:計(jì)算機(jī)系 班 級(jí):計(jì)科0901 學(xué) 號(hào):6 學(xué)生姓名: 指導(dǎo)教師:趙文清 成 績(jī): 日期:2011年 11月 9日實(shí)驗(yàn)名稱(chēng) 單處理器系統(tǒng)的進(jìn)程調(diào)度實(shí)驗(yàn)?zāi)康脑诓捎枚嗟莱绦蛟O(shè)計(jì)的系統(tǒng)中,往往有若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài)。當(dāng)就緒進(jìn)程個(gè)數(shù)大于處理器數(shù)時(shí),就必須依照某種策略來(lái)決定哪些進(jìn)程優(yōu)先占用處理器。本實(shí)驗(yàn)?zāi)M在單處理器情況下的處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的工作。實(shí)驗(yàn)內(nèi)容與要求 1、設(shè)計(jì)多個(gè)進(jìn)程并發(fā)執(zhí)行的模擬調(diào)度程序,

2、每個(gè)程序由一個(gè)PCB表示。2、模擬調(diào)度程序選擇優(yōu)先數(shù)調(diào)度算法實(shí)現(xiàn)。3、程序執(zhí)行中應(yīng)能在屏幕上顯示出各進(jìn)程的狀態(tài)變化,以便于觀(guān)察調(diào)度的整個(gè)過(guò)程。四、實(shí)驗(yàn)原理及說(shuō)明1、假定系統(tǒng)有五個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來(lái)代表。進(jìn)程控制塊的格式為:進(jìn)程名指針要求運(yùn)行時(shí)間已運(yùn)行時(shí)間狀態(tài)其中,進(jìn)程名作為進(jìn)程的標(biāo)識(shí),假設(shè)五個(gè)進(jìn)程的進(jìn)程名分別為Q1,Q2,Q3,Q4,Q5。指針進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出下一個(gè)進(jìn)程的進(jìn)程控制塊的首地址,最后一個(gè)進(jìn)程的指針指出第一個(gè)進(jìn)程的進(jìn)程控制塊首地址。要求運(yùn)行時(shí)間假設(shè)進(jìn)程需要運(yùn)行的單位時(shí)間數(shù)。已運(yùn)行時(shí)間假設(shè)進(jìn)程已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。狀態(tài)有兩種狀態(tài),

3、“就緒”和“結(jié)束”,初始狀態(tài)都為“就緒”,用“R”表示。當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。2、每次運(yùn)行所設(shè)計(jì)的處理器調(diào)度程序前,為每個(gè)進(jìn)程任意確定它的“要求運(yùn)行時(shí)間”。3、 把五個(gè)進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出隊(duì)列連接情況。另用一標(biāo)志單元記錄輪到運(yùn)行的進(jìn)程。例如,當(dāng)前輪到P2執(zhí)行,則有:標(biāo)志單元 K2 K1Q1 K2Q2 K3Q3 K4Q4 K5Q5K2K3K4K5K12312410000RRRRRPCB1PCB2PCB3PCB4PCB54、處理器調(diào)度總是選擇標(biāo)志單元指示的進(jìn)程運(yùn)行。由于本實(shí)驗(yàn)是模擬處理器調(diào)度的功能,所以,對(duì)被選中的進(jìn)程并不實(shí)際的啟動(dòng)運(yùn)行,而是執(zhí)行:已

4、運(yùn)行時(shí)間+1來(lái)模擬進(jìn)程的一次運(yùn)行,表示進(jìn)程已經(jīng)運(yùn)行過(guò)一個(gè)單位的時(shí)間。在實(shí)際的系統(tǒng)中,當(dāng)一個(gè)進(jìn)程被選中運(yùn)行時(shí),必須置上該進(jìn)程可以運(yùn)行的時(shí)間片值,以及恢復(fù)進(jìn)程的現(xiàn)場(chǎng),讓它占有處理器運(yùn)行,直到出現(xiàn)等待事件或運(yùn)行滿(mǎn)一個(gè)時(shí)間片。在這時(shí)省去了這些工作,僅用“已運(yùn)行時(shí)間+1”來(lái)表示進(jìn)程已經(jīng)運(yùn)行滿(mǎn)一個(gè)時(shí)間片。5、進(jìn)程運(yùn)行一次后,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,以指示下一個(gè)輪到運(yùn)行的進(jìn)程。同時(shí),應(yīng)判斷該進(jìn)程的要求運(yùn)行時(shí)間與已運(yùn)行時(shí)間,若該進(jìn)程的要求運(yùn)行時(shí)間已運(yùn)行時(shí)間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時(shí)再運(yùn)行。若該進(jìn)程的要求運(yùn)行時(shí)間=已運(yùn)行時(shí)間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)指導(dǎo)它的狀態(tài)修改成“結(jié)束”(

5、E)且退出隊(duì)列。此時(shí),應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到前面一個(gè)進(jìn)程的指針位置。6、若“就緒”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面的(4)和(5)的步驟,直到所有的進(jìn)程都成為“結(jié)束”狀態(tài)。7、在所設(shè)計(jì)的程序中應(yīng)有顯示或打印語(yǔ)句,能顯示或打印每次選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊(duì)列的變化。8、為五個(gè)進(jìn)程任意確定一組“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)的處理器調(diào)度程序,顯示或打印逐次被選中的進(jìn)程名以及進(jìn)程控制塊的動(dòng)態(tài)變化過(guò)程。五、實(shí)驗(yàn)流程六、實(shí)驗(yàn)結(jié)果七、實(shí)驗(yàn)總結(jié)本實(shí)驗(yàn)實(shí)現(xiàn)了在單處理器情況下的進(jìn)程調(diào)度,我采用了按時(shí)間輪轉(zhuǎn)法實(shí)現(xiàn)處理器調(diào)度,程序編寫(xiě)的比較簡(jiǎn)單,基本達(dá)到實(shí)驗(yàn)?zāi)康?。本?shí)驗(yàn)的成功完成加深了我對(duì)進(jìn)程調(diào)

6、度算法的理解,這為后面的作業(yè)調(diào)度等實(shí)驗(yàn)的完成打下了堅(jiān)實(shí)的基礎(chǔ),讓我有信心去完成后面的實(shí)驗(yàn)設(shè)計(jì)。程序如下:#includetypedef struct pcbchar name10;int ntime;int rtime;char estate;struct pcb *next;*pointer;void Creatlist(pointer &head,pointer &f,pointer &l,pointer q)pointer p;head=new pcb;head-next=NULL;f=head;for(int i=1;inext=NULL;coutname:p-name;coutnee

7、d time:p-ntime;p-rtime=0; p-estate=R;f-next=p;f=f-next;qi=p;f=head-next;l=p;l-next=f;void Cout(pointer &head,pointer q)for(int i=1;i=5;i+)cout標(biāo)識(shí)符:name 要求運(yùn)行時(shí)間:ntime 已運(yùn)行時(shí)間:rtime狀態(tài):estate;coutendl;coutnext; while(p-next!=p)|(p-ntime!=p-rtime) p-rtime=p-rtime+1; coutname已運(yùn)行時(shí)間+1。ntime=p-rtime) p-estate=E

8、; coutname已結(jié)束。next=p-next; p=q-next; else p=p-next; q=q-next; Cout(head,r); void main()pointer h,f,l,q5;Creatlist(h,f,l,q);Cout(h,q);suanfa(h,f,l,q);實(shí)驗(yàn)名稱(chēng) 批處理系統(tǒng)中作業(yè)調(diào)度實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)本實(shí)驗(yàn)算法的設(shè)計(jì)加深對(duì)作業(yè)調(diào)度的認(rèn)識(shí),清楚作業(yè)調(diào)度的全過(guò)程。實(shí)驗(yàn)內(nèi)容與要求 此實(shí)驗(yàn)?zāi)M批處理系統(tǒng)中的作業(yè)調(diào)度,并采用響應(yīng)比高者優(yōu)先算法作為作業(yè)調(diào)度算法。實(shí)驗(yàn)原理及說(shuō)明從輸入井中選擇作業(yè)讀入內(nèi)存,使其獲得處理器,得到運(yùn)行的機(jī)會(huì),即為作業(yè)調(diào)度。輸入井中的作業(yè)用“作

9、業(yè)控制塊”(JCB,如下所示)標(biāo)識(shí),為了進(jìn)行作業(yè)調(diào)度,將作業(yè)控制塊組成一個(gè)隊(duì)列,這個(gè)隊(duì)列稱(chēng)為后備隊(duì)列。 2、模擬實(shí)驗(yàn)中沒(méi)有實(shí)際作業(yè),作業(yè)控制塊中的信息內(nèi)容只使用了模擬實(shí)驗(yàn)中需要的數(shù)據(jù)。作業(yè)控制塊中包括作業(yè)名、作業(yè)大小、所需打印機(jī)臺(tái)數(shù)、所需磁帶機(jī)數(shù)量、作業(yè)估計(jì)執(zhí)行時(shí)間、作業(yè)等待時(shí)間、指向下一個(gè)作業(yè)控制塊的指針等內(nèi)容。將作業(yè)控制塊組成一個(gè)隊(duì)列,實(shí)驗(yàn)中采用動(dòng)態(tài)鏈表的方式模擬作業(yè)的后備隊(duì)列。作業(yè)控制塊采用結(jié)構(gòu)型數(shù)據(jù)模擬。3、模擬實(shí)驗(yàn)中,主存采用可移動(dòng)的可變分區(qū)管理方法,即只要主存空閑區(qū)總和比作業(yè)大就可以滿(mǎn)足作業(yè)對(duì)主存的需求。對(duì)打印機(jī)和磁帶機(jī)這兩種獨(dú)占設(shè)備采用靜態(tài)分配法,即作業(yè)執(zhí)行前必須獲得所需資源,并

10、且執(zhí)行完才歸還。4、實(shí)驗(yàn)中作業(yè)的調(diào)度采用響應(yīng)比高者優(yōu)先算法。響應(yīng)比為作業(yè)的等待時(shí)間和作業(yè)估計(jì)執(zhí)行時(shí)間之比。首先計(jì)算出輸入井中滿(mǎn)足條件的作業(yè)的響應(yīng)比,從中選擇響應(yīng)比最高的一個(gè)作業(yè)裝入主存儲(chǔ)器,分配資源。由于是模擬實(shí)驗(yàn),可將作業(yè)控制塊出隊(duì)裝入主存儲(chǔ)器的工作用輸出作業(yè)名模擬,同時(shí)修改系統(tǒng)的資源數(shù)量。5、模擬實(shí)驗(yàn)時(shí),可以首先假設(shè)系統(tǒng)的資源情況。假設(shè)系統(tǒng)資源只有主存200MB、磁帶機(jī)10臺(tái)、打印機(jī)10臺(tái),然后手工輸入某個(gè)時(shí)刻輸入井中的各個(gè)作業(yè)情況,最后進(jìn)行作業(yè)調(diào)度到就緒隊(duì)列,按先來(lái)先服務(wù)進(jìn)程調(diào)度進(jìn)行進(jìn)程調(diào)度,輸出調(diào)用情況。6、批處理系統(tǒng)中的作業(yè)調(diào)度模擬程序主要由創(chuàng)建作業(yè)隊(duì)列的程序段、作業(yè)調(diào)度函數(shù)組成和進(jìn)

11、程調(diào)用函數(shù)組成。五、實(shí)驗(yàn)流程六、實(shí)驗(yàn)結(jié)果七、實(shí)驗(yàn)總結(jié)本實(shí)驗(yàn)是完成批處理系統(tǒng)作業(yè)調(diào)度,我采用的是高響應(yīng)比優(yōu)先調(diào)度算法,總體來(lái)說(shuō)本實(shí)驗(yàn)還算成功,基本達(dá)到實(shí)驗(yàn)?zāi)康?。?shí)驗(yàn)的基本原理比較簡(jiǎn)單,但是仍然遇到了一些問(wèn)題,讓我我明白了實(shí)際編程和理論知識(shí)間的差異,明白了在學(xué)習(xí)課本的基礎(chǔ)上我們還需要很多的時(shí)間才能真正學(xué)好這門(mén)課程。程序如下:#includetypedef struct jcbchar name4;int length;int nprinter;int ntape;double ntime;double wtime;struct jcb *next;*Pointer;int tape=2,print

12、er=4,memory=64;void Creatlist(Pointer &head)Pointer p,q;head=new jcb;head-next=NULL;q=head;for(int i=1;inext=NULL;coutp-name;coutp-length;coutp-nprinter;coutp-ntape;coutp-ntime;coutp-wtime;q-next=p;q=q-next;Pointer Findmax(Pointer &head)double x,temp=-1.0; Pointer p,q;p=head; doif(head-next!=NULL)p=

13、p-next;x=p-wtime/p-ntime;if(xtemp)temp=x;q=p;while(p-next!=NULL);return q;void Deletejcb(Pointer &head,Pointer &q)Pointer p;p=head;while(p-next!=q)p=p-next;p-next=q-next;void suanfa(Pointer &head)Pointer p,q;double temp;for(int i=1;i=3;i+)p=head;q=Findmax(head);coutname運(yùn)行。wtime;Deletejcb(head,q);whi

14、le(p-next!=NULL)p=p-next;p-wtime=temp+(p-wtime);void main()Pointer head;Creatlist(head);suanfa(head);實(shí)驗(yàn)名稱(chēng) 銀行家算法實(shí)驗(yàn)?zāi)康暮鸵筱y行家算法是避免死鎖的一種重要方法,要求編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法程序。加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。實(shí)驗(yàn)內(nèi)容1設(shè)計(jì)進(jìn)程對(duì)各類(lèi)資源最大申請(qǐng)表示及初值確定。2設(shè)定系統(tǒng)提供資源初始狀況。3設(shè)定每次某個(gè)進(jìn)程對(duì)各類(lèi)資源的申請(qǐng)表示。4編制程序,依據(jù)銀行家算法,決定其申請(qǐng)是否得到滿(mǎn)足。四、實(shí)驗(yàn)原理及說(shuō)明 1數(shù)據(jù)結(jié)構(gòu)假設(shè)有

15、M個(gè)進(jìn)程N(yùn)類(lèi)資源,則有如下數(shù)據(jù)結(jié)構(gòu):MAXM*NM個(gè)進(jìn)程對(duì)N類(lèi)資源的最大需求量AVAILABLEN系統(tǒng)可用資源數(shù)ALLOCATIONM*NM個(gè)進(jìn)程已經(jīng)得到N類(lèi)資源的資源量NEEDM*NM個(gè)進(jìn)程還需要N類(lèi)資源的資源量2銀行家算法設(shè)進(jìn)程I提出請(qǐng)求RequestN,則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果RequestN=NEEDI,N,則轉(zhuǎn)(2);否則,出錯(cuò)。(2)如果RequestN=AVAILABLE,則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED

16、-REQUEST(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。3安全性檢查(1)設(shè)置兩個(gè)工作向量WORK=AVAILABLE;FINISHM=FALSE(2)從進(jìn)程集合中找到一個(gè)滿(mǎn)足下述條件的進(jìn)程,F(xiàn)INISHi=FALSENEED=WORK如找到,執(zhí)行(3);否則,執(zhí)行(4)(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。WORK=WORK+ALLOCATIONFINISH=TRUEGOTO2(4)如所有的進(jìn)程FinishM=true,則表示安全;否則系統(tǒng)不安全。五、實(shí)驗(yàn)流程六、實(shí)驗(yàn)結(jié)果 七、實(shí)驗(yàn)總結(jié)本實(shí)驗(yàn)是采用銀行家算法避免死鎖,本次

17、實(shí)驗(yàn)基本達(dá)到實(shí)驗(yàn)?zāi)康?。銀行家算法是避免死鎖的一種有效方法,上課的時(shí)候老師花費(fèi)了很多精力讓我們能夠充分理解銀行家算法的內(nèi)涵,上課時(shí)雖然理論理解的還算透徹,但是編程實(shí)現(xiàn)還是需要一定的編程經(jīng)驗(yàn)積累。實(shí)驗(yàn)不允許有一點(diǎn)差錯(cuò),需要認(rèn)真去對(duì)待。程序如下:#include#define M 5 /總進(jìn)程數(shù)#define N 3 /總資源數(shù)#define false 0#define true 1int MaxMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int AvailableN=3,3,2;int AllocationMN=0,1,0,2,0,0,3,0,2,2,1,1,0,0,2;i

18、nt NeedMN=7,4,3,1,2,2,6,0,0,0,1,1,4,3,1;int Find(int WorkN,bool FinishM)/m為false個(gè)數(shù)int i=0,k,x=0;for(int n=0;nM;n+)if(Finishi=0) k=0; for(int j=0;j3;j+) if(Needij=Workj) k+; else break; if(k=3) x=1; break; else i+; else i+;if(x=0)return 111;/未找到else return i;char safety()int i,m=5;/false個(gè)數(shù)int WorkN;b

19、ool FinishM=0,0,0,0,0;for(int i1=0;i1N;i1+) Worki1=Availablei1;for(int j=0;jM;j+)i=Find(Work,Finish);if(i!=111)for(int i2=0;i2N;i2+)Worki2=Worki2+Allocationii2;Finishi=1;couti ;m-;elsebreak;if(m=0)return y;elsereturn n;void bank() int i,m,n; char x; int RequestiN; couti; cout請(qǐng)輸入請(qǐng)求資源:; for(int j=0;jR

20、equestij; m=0; for(int i1=0;i1N;i1+) if(Requestii1=Needii1) m+; else break; if(m=3) n=0; for(int i2=0;i2N;i2+) if(Requestii2=Availablei2) n+; else break; if(n=3) for(int i3=0;i3N;i3+) Availablei3=Availablei3-Requestii3; Allocationii3=Allocationii3+Requestii3; Needii3=Needii3-Requestii3; x=safety();

21、if(x=y) cout安全狀態(tài),資源已分配; else cout不安全狀態(tài),資源不分配; for(int i4=0;i4N;i4+) Availablei3=Availablei4+Requestii4; Allocationii4=Allocationii4-Requestii4; Needii4=Needii4+Requestii4; else cout不分配。; else cout不分配.;void main()bank();實(shí)驗(yàn)名稱(chēng) 主存儲(chǔ)器空間的分配和回收實(shí)驗(yàn)?zāi)康?一個(gè)好的計(jì)算機(jī)系統(tǒng)不僅要有一個(gè)足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲(chǔ)器,而且要能合理地分配和使用這些存儲(chǔ)空間。當(dāng)用

22、戶(hù)提出申請(qǐng)存儲(chǔ)器空間時(shí),存儲(chǔ)管理必須根據(jù)申請(qǐng)者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請(qǐng)者。當(dāng)作業(yè)撤離或主動(dòng)歸還主存資源時(shí),則存儲(chǔ)管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實(shí)現(xiàn)雖與主存儲(chǔ)器的管理方式有關(guān)的,通過(guò)本實(shí)驗(yàn)幫助學(xué)生理解在不同的存儲(chǔ)管理方式下應(yīng)怎樣實(shí)現(xiàn)主存空間的分配和回收。實(shí)驗(yàn)內(nèi)容 本實(shí)驗(yàn)?zāi)M在兩種存儲(chǔ)管理方式下的主存分配和回收。實(shí)驗(yàn)原理及說(shuō)明 可變分區(qū)方式是按作業(yè)需要的主存空間大小來(lái)分割分區(qū)的。當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個(gè)分區(qū)分配給該作業(yè);若無(wú),則作業(yè)不能裝入。隨著作業(yè)

23、的裝入、撤離,主存空間被分成許多個(gè)分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。例如:05k10k14k26k32k128k操作系統(tǒng)作業(yè)1作業(yè)3空閑區(qū)作業(yè)2空閑區(qū)為了說(shuō)明哪些區(qū)是空閑的,可以用來(lái)裝入新作業(yè),必須要有一張空閑區(qū)說(shuō)明表,格式如下:起 址長(zhǎng) 度狀 態(tài)第一欄14 K12 K未 分 配第二欄32 K96 K未 分 配空 表 目空 表 目其中,起址指出一個(gè)空閑區(qū)的主存起始地址。 長(zhǎng)度指出從起始地址開(kāi)始的一個(gè)連續(xù)空閑的長(zhǎng)度。 狀態(tài)有兩種狀態(tài),一種是“未分配”狀態(tài),指出對(duì)應(yīng)的由起址指出的某個(gè)長(zhǎng)度的區(qū)域是空閑區(qū);另一種是“空表目”狀態(tài),表示表中對(duì)應(yīng)的登記項(xiàng)目是空白(無(wú)效),可用來(lái)登記新的空閑區(qū)(

24、例如,作業(yè)撤離后,它所占的區(qū)域就成了空閑區(qū),應(yīng)找一個(gè)“空表目”欄登記歸還區(qū)的起址和長(zhǎng)度且修改狀態(tài))。由于分區(qū)的個(gè)數(shù)不定,所以空閑區(qū)說(shuō)明表中應(yīng)有適量的狀態(tài)為“空表目”的登記欄目,否則造成表格“溢出”無(wú)法登記。上述的這張說(shuō)明表的登記情況是按提示1、中的例所裝入的三個(gè)作業(yè)占用的主存區(qū)域后填寫(xiě)的。2、 當(dāng)有一個(gè)新作業(yè)要求裝入主存時(shí),必須查空閑區(qū)說(shuō)明表,從中找出一個(gè)足夠大的空閑區(qū)。有時(shí)找到的空閑區(qū)可能大于作業(yè)需要量,這時(shí)應(yīng)把原來(lái)的空閑區(qū)變成兩部分:一部分分給作業(yè)占用;另一部分又成為一個(gè)較小的空閑區(qū)。為了盡量減少由于分割造成的空閑區(qū),而盡量保存高地址部分有較大的連續(xù)空閑區(qū)域,以利于大型作業(yè)的裝入。為此,在

25、空閑區(qū)說(shuō)明表中,把每個(gè)空閑區(qū)按其地址順序登記,即每個(gè)后繼的空閑區(qū)其起始地址總是比前者大。為了方便查找還可使表格“緊縮”,總是讓“空表目”欄集中在表格的后部。3、采用最先適應(yīng)算法(順序分配算法)分配主存空間。按照作業(yè)的需要量,查空閑區(qū)說(shuō)明表,順序查看登記欄,找到第一個(gè)能滿(mǎn)足要求的空閑區(qū)。當(dāng)空閑區(qū)大于需要量時(shí),一部分用來(lái)裝入作業(yè),另一部分仍為空閑區(qū)登記在空閑區(qū)說(shuō)明表中。由于本實(shí)驗(yàn)是模擬主存的分配,所以把主存區(qū)分配給作業(yè)后并不實(shí)際啟動(dòng)裝入程序裝入作業(yè),而用輸出“分配情況”來(lái)代替。最先適應(yīng)分配算法如圖4-1。4、 當(dāng)一個(gè)作業(yè)執(zhí)行結(jié)束撤離時(shí),作業(yè)所占的區(qū)域應(yīng)該歸還,歸還的區(qū)域如果與其它空閑區(qū)相鄰,則應(yīng)合

26、成一個(gè)較大的空閑區(qū),登記在空閑區(qū)說(shuō)明表中。例如,在提示(1)中列舉的情況下,如果作業(yè)2撤離,歸還所占主存區(qū)域時(shí),應(yīng)與上、下相鄰的空閑區(qū)一起合成一個(gè)大的空閑區(qū)登記在空閑區(qū)說(shuō)明表中。歸還主存時(shí)的回收算法如圖4-2。5、 請(qǐng)按最先適應(yīng)算法設(shè)計(jì)主存分配和回收的程序。然后按(1)中假設(shè)主存中已裝入三個(gè)作業(yè),且形成兩個(gè)空閑區(qū),確定空閑區(qū)說(shuō)明表的初值?,F(xiàn)有一個(gè)需要主存量為6K的作業(yè)4申請(qǐng)裝入主存;然后作業(yè)3撤離;再作業(yè)2撤離。請(qǐng)你為它們進(jìn)行主存分配和回收,把空閑區(qū)說(shuō)明表的初值以及每次分配或回收后的變化顯示出來(lái)或打印出來(lái)。五、實(shí)驗(yàn)流程 最先適應(yīng)分配模擬算法主存回收算法六、實(shí)驗(yàn)結(jié)果 七、實(shí)驗(yàn)總結(jié)本次試驗(yàn)在可變分

27、區(qū)管理方式下采用最先適應(yīng)算法實(shí)現(xiàn)主存分配和實(shí)現(xiàn)主存回收,讓我理解了在不同的存儲(chǔ)管理方式下應(yīng)怎樣實(shí)現(xiàn)主存空間的分配和回收。這個(gè)實(shí)驗(yàn)由于理論知識(shí)理解的不是很透徹,編程的時(shí)候遇到了很多問(wèn)題,不得不邊學(xué)邊進(jìn)行設(shè)計(jì),所以在以后的課上學(xué)習(xí)中要認(rèn)真理解理論知識(shí),沒(méi)有理論支持一切也將無(wú)從談起。程序如下:#include #include #include#define getMEM()(MEM*)(malloc(sizeof(MEM)typedef struct Memory/可用分區(qū)鏈表節(jié)點(diǎn)int base;/基地址int size;/大小struct Memory *next;MEM;MEM *pm =

28、getMEM();/可用分區(qū)的鏈表頭MEM *temp;/int SIZE;/總的內(nèi)存的大小,由用戶(hù)輸入int geti()/讓用戶(hù)只能輸入正整數(shù)char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = n)printf(tf輸入不能為空.請(qǐng)重新輸入n);fflush(stdin);ch = getchar();while(ch != n)if(ch 9 | ch next)if(p-base + p-size = base & base next-base & p-next-base = base + size)return true

29、;p= p -next;if(!p-next & p-base + p-size base + p-size = base & base = base + size)return true;return false;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 next-base)break;p = p-next;if(base = p-base + p-size)/低地址相鄰if(p -n

30、ext & p-next-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;else/釋放區(qū)上下與空閑區(qū)都不相鄰temp = getMEM();temp-size = size;temp-base = base;

31、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;elsep-next-size -= size;base = p-next-base;p-next-base += size;return base;void print(MEM *pm)/打印空閑分區(qū)表和空閑分區(qū)鏈MEM *p = pm-next;puts(n*空閑內(nèi)存分區(qū)鏈:*n);puts(基地址tttt大小n);while(p)pri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論