操作系統(tǒng)實驗-動態(tài)分區(qū)分配算法_第1頁
操作系統(tǒng)實驗-動態(tài)分區(qū)分配算法_第2頁
操作系統(tǒng)實驗-動態(tài)分區(qū)分配算法_第3頁
操作系統(tǒng)實驗-動態(tài)分區(qū)分配算法_第4頁
操作系統(tǒng)實驗-動態(tài)分區(qū)分配算法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)實驗—動態(tài)分區(qū)分配算法操作系統(tǒng)實驗—動態(tài)分區(qū)分配算法操作系統(tǒng)實驗—動態(tài)分區(qū)分配算法操作系統(tǒng)實驗—動態(tài)分區(qū)分配算法編制僅供參考審核批準生效日期地址:電話:傳真:郵編:操作系統(tǒng)實驗報告實驗2動態(tài)分區(qū)分配算法報告日期:2016-6-15姓名:學號:班級:任課教師:實驗2動態(tài)分區(qū)分配算法一、實驗內(nèi)容編寫一個內(nèi)存動態(tài)分區(qū)分配模擬程序,模擬內(nèi)存的分配和回收的完整過程。二、實驗?zāi)康囊粋€好的計算機系統(tǒng)不僅要有一個足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲器,而且要能合理地分配和使用這些存儲空間。當用戶提出申請存儲器空間時,存儲管理必須根據(jù)申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請者。當作業(yè)撤離或主動歸還主存資源時,則存儲管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實現(xiàn)與主存儲器的管理方式有關(guān)的,通過本實驗幫助學生理解在可變分區(qū)管理方式下應(yīng)怎樣實現(xiàn)主存空間的分配和回收。三、實驗原理模擬在可變分區(qū)管理方式下采用最先適應(yīng)算法實現(xiàn)主存分配和回收。(1)可變分區(qū)方式是按作業(yè)需要的主存空間大小來分割分區(qū)的。當要裝入一個作業(yè)時,根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入。隨著作業(yè)的裝入、撤離,主存空間被分成許多個分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。例如:05k05k10k14k26k32k512k作業(yè)1作業(yè)3空閑區(qū)作業(yè)2空閑區(qū)為了說明哪些區(qū)是空閑的,可以用來裝入新作業(yè),必須要有一張空閑區(qū)說明表,格式如下:起址長度狀態(tài)第一欄14K12K未分配第二欄32K96K未分配MMMM其中,起址——指出一個空閑區(qū)的主存起始地址。長度——指出從起始地址開始的一個連續(xù)空閑的長度。狀態(tài)——有兩種狀態(tài),一種是“未分配”狀態(tài),指出對應(yīng)的由起址指出的某個長度的區(qū)域是空閑區(qū)。(2)當有一個新作業(yè)要求裝入主存時,必須查空閑區(qū)說明表,從中找出一個足夠大的空閑區(qū)。有時找到的空閑區(qū)可能大于作業(yè)需要量,這時應(yīng)把原來的空閑區(qū)變成兩部分:一部分分給作業(yè)占用;另一部分又成為一個較小的空閑區(qū)。為了盡量減少由于分割造成的空閑區(qū),而盡量保存高地址部分有較大的連續(xù)空閑區(qū)域,以利于大型作業(yè)的裝入。為此,在空閑區(qū)說明表中,把每個空閑區(qū)按其地址順序登記,即每個后繼的空閑區(qū)其起始地址總是比前者大。(3)采用最先適應(yīng)算法(順序分配算法)分配主存空間。按照作業(yè)的需要量,查空閑區(qū)說明表,順序查看登記欄,找到第一個能滿足要求的空閑區(qū)。當空閑區(qū)大于需要量時,一部分用來裝入作業(yè),另一部分仍為空閑區(qū)登記在空閑區(qū)說明表中。由于本實驗是模擬主存的分配,所以把主存區(qū)分配給作業(yè)后并不實際啟動裝入程序裝入作業(yè),而用輸出“分配情況”來代替。(4)當一個作業(yè)執(zhí)行結(jié)束撤離時,作業(yè)所占的區(qū)域應(yīng)該歸還,歸還的區(qū)域如果與其它空閑區(qū)相鄰,則應(yīng)合成一個較大的空閑區(qū),登記在空閑區(qū)說明表中。(5)請按最先適應(yīng)算法設(shè)計主存分配和回收的程序。假設(shè)初始時主存中沒有作業(yè),現(xiàn)按下面序列進行內(nèi)存的申請與釋放:作業(yè)1申請300K,作業(yè)2申請100K,作業(yè)1釋放300K,作業(yè)3申請150K,作業(yè)4申請30K,作業(yè)5申請40K,作業(yè)6申請60K,作業(yè)4釋放30K。請你為它們進行主存分配和回收,把空閑區(qū)說明表的初值以及每次分配或回收后的變化顯示出來或打印出來。四、實驗報告1.畫出算法流程圖。2.源代碼#define_CRT_SECURE_NO_WARNINGS1#include<>#include<>#include<>#include<>#defineN10000intn1;tart-(*(structkongxian*)b).start;}intcmp2(constvoid*a,constvoid*b){ return(*(structzuoye*)a).start-(*(structzuoye*)b).start;}voidinit(){ n1=1;tart=0; kongxian[0].end=511; kongxian[0].length=512;}voidprint1()tart,kongxian[i].end,kongxian[i].length);}voidprint2()tart,zuoye[i].end,zuoye[i].length);}intmain(){ inti,j,t,len,flag,id; intfront,middle,behind; intt1,t2; init(); print1(); printf("輸入1裝入新作業(yè),輸入0回收作業(yè),輸入-1結(jié)束\n"); while(scanf("%d",&t)!=EOF) { if(t==1)ength>=len)tart=kongxian[i].start; zuoye[n2].end=zuoye[n2].start+len; zuoye[n2].length=len; n2++;ength==len)tart=kongxian[j+1].start; kongxian[j].end=kongxian[j+1].end; kongxian[j].length=kongxian[j+1].length; } n1--; } elsetart+=len; kongxian[i].length-=len; } } } elseif(t==0) { printf("輸入要回收的作業(yè)ID"); scanf("%d",&id); front=middle=behind=0; for(i=0;i<n1;i++) { if(kongxian[i].start>zuoye[id].end) break; if(kongxian[i].end==zuoye[id].start)tart==zuoye[id].end)tart=zuoye[id].start; kongxian[n1].end=zuoye[id].end; kongxian[n1].length=zuoye[id].length; n1++;tart=zuoye[j+1].start; zuoye[j].end=zuoye[j+1].end; zuoye[j].length=zuoye[j+1].length; } n2--; } if(front&&behind)nd+=zuoye[id].length; kongxian[t1].length+=zuoye[id].length; for(j=id;j<n2-1;j++)tart=zuoye[j+1].start; zuoye[j].end=zuoye[j+1].end; zuoye[j].length=zuoye[j+1].length; } n2--; } if(middle)nd=kongxian[t2].end; kongxian[t1].length+=(zuoye[id].length+kongxian[t2].length); tart=kongxian[j+1].start; kongxian[j].end=kongxian[j+1].end; kongxian[j].length=kongxian[j+1].length; } n1--; for(j=id;j<n2-1;j++)tart=zuoye[j+1].start; zuoye[j].end=zuoye[j+1].end; zuoye[j].length=zuoye[j+1].length; } n2--; } if(behind&&!middle)tart-=zuoye[id].length; kongxian[t2].length+=zuoye[id].length; for(j=id;j<n2-1;j++)tart=zuoye[j+1].start; zuoye[j].end=zuoye[j+1].end; zuoye[j].length=zuoye[j+1].length; } n2--; } } else { printf("操作結(jié)束\n"); break; } print1(); print2(); } return0;}3.程

溫馨提示

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

評論

0/150

提交評論