計算機操作系統(tǒng)內(nèi)存分配實驗報告_第1頁
計算機操作系統(tǒng)內(nèi)存分配實驗報告_第2頁
計算機操作系統(tǒng)內(nèi)存分配實驗報告_第3頁
計算機操作系統(tǒng)內(nèi)存分配實驗報告_第4頁
計算機操作系統(tǒng)內(nèi)存分配實驗報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本文格式為Word版,下載可任意編輯 計算機操作系統(tǒng)內(nèi)存分配實驗報告 一、試驗?zāi)康?熟悉主存的分派與回收。理解在不同的存儲管理方式下,如何實現(xiàn)主存空間的分派與回收。把握動態(tài)分區(qū)分派方式中的數(shù)據(jù)結(jié)構(gòu)和分派算法及動態(tài)分區(qū)存儲管理方式及其實現(xiàn)過程。 二、試驗內(nèi)容和要求 主存的分派和回收的實現(xiàn)是與主存儲器的管理方式有關(guān)的。所謂分派,就是解決多道作業(yè)或多進程如何共享主存空間的問題。所謂回收,就是當作業(yè)運行完成時將作業(yè)或進程所占的主存空間歸還給系統(tǒng)。 可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)個數(shù)是可以調(diào)整的。當要裝入一個作業(yè)時,根據(jù)作業(yè)需要的主存量查看是否有足夠的空

2、閑空間,若有,則按需要量分割一個分區(qū)分派給該作業(yè);若無,則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成大量大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。 試驗要求使用可變分區(qū)存儲管理方式,分區(qū)分派中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑分區(qū)鏈來進行,分區(qū)分派中所用的算法采用首次適應(yīng)算法、最正確適應(yīng)算法、最差適應(yīng)算法三種算法來實現(xiàn)主存的分派與回收。同時,要求設(shè)計一個實用友好的用戶界面,并顯示分派與回收的過程。同時要求設(shè)計一個實用友好的用戶界面,并顯示分派與回收的過程。 三、試驗主要儀器設(shè)備和材料 試驗環(huán)境 硬件環(huán)境:PC或兼容機 軟件環(huán)境:VC+ 6.0 四、試驗原理及設(shè)計

3、分析 某系統(tǒng)采用可變分區(qū)存儲管理,在系統(tǒng)運行當然開始,假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為640KB,存儲器區(qū)被分為操作系統(tǒng)分區(qū)(40KB)和可給用戶的空間區(qū)(600KB)。 (作業(yè)1 申請130KB、作業(yè)2 申請60KB、作業(yè)3 申請100KB 、作業(yè)2 釋放 60KB 、作業(yè)4 申請 200KB、作業(yè)3釋放100KB、作業(yè)1 釋放130KB 、作業(yè)5申請140KB 、作業(yè)6申請60KB 、作業(yè)7申請50KB) 當作業(yè)1進入內(nèi)存后,分給作業(yè)1(130KB),隨著作業(yè)1、2、3的進入,分別分派60KB、100KB,經(jīng)過一段時間的運行后,作業(yè)2運行完畢,釋放所占內(nèi)存。此時,作業(yè)4進入系統(tǒng),要求分派2

4、00KB內(nèi)存。作業(yè)3、1運行完畢,釋放所占內(nèi)存。此時又有作業(yè)5申請140KB,作業(yè)6申請60KB,作業(yè)7申請50KB。為它們進行主存分派和回收。 1、采用可變分區(qū)存儲管理,使用空閑分區(qū)鏈實現(xiàn)主存分派和回收。 空閑分區(qū)鏈:使用鏈指針把所有的空閑分區(qū)鏈成一條鏈,為了實現(xiàn)對空閑分區(qū)的分派和鏈接,在每個分區(qū)的起始部分設(shè)置狀態(tài)位、分區(qū)的大小和鏈接各個分區(qū)的前向指針,由狀態(tài)位指示該分區(qū)是否分派出去了;同時,在分區(qū)尾部還設(shè)置有一后向指針,用來鏈接后面的分區(qū);分區(qū)中間部分是用來存放作業(yè)的空閑內(nèi)存空間,當該分區(qū)分派出去后,狀態(tài)位就由“0置為“1。 設(shè)置一個內(nèi)存空閑分區(qū)鏈,內(nèi)存空間分區(qū)通過空閑分區(qū)鏈來管理,在進行

5、內(nèi)存分派時,系統(tǒng)優(yōu)先使用空閑低端的空間。 設(shè)計一個空閑分區(qū)說明鏈,設(shè)計一個某時刻主存空間占用狀況表,作為主存當前使用基礎(chǔ)。初始化空間區(qū)和已分派區(qū)說明鏈的值,設(shè)計作業(yè)申請隊列以及作業(yè)完成后釋放順序,實現(xiàn)主存的分派和回收。要求每次分派和回收后顯示出空閑內(nèi)存分區(qū)鏈的狀況。把空閑區(qū)說明鏈的變化狀況以及各作業(yè)的申請、釋放狀況顯示打印出來。 2.采用可變分區(qū)存儲管理,分別采用首次適應(yīng)算法、最正確適應(yīng)算法和最壞適應(yīng)算法實現(xiàn) 主存分派和回收。 3、主存空間分派 (1)首次適應(yīng)算法 在該算法中,把主存中所有空閑區(qū)按其起始地址遞增的次序排列。在為作業(yè)分派存儲空間時,從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找,直

6、到找到第一個能滿足要求的空閑區(qū),從中劃出與請求的大小相等的存儲空間分派給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)鏈中。 (2)最正確適應(yīng)算法 在該算法中,把主存中所有空閑區(qū)按其起始地址遞增的次序排列。在為作業(yè)分派存儲空間時,從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找,直到找到一個能滿足要求的空閑區(qū)且該空閑區(qū)的大小比其他滿足要求的空閑區(qū)都小,從中劃出與請求的大小相等的存儲空間分派給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)鏈中 (3)最壞適應(yīng)算法 在該算法中,把主存中所有空閑區(qū)按其起始地址遞增的次序排列。在為作業(yè)分派存儲空間時,從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找,直到找到一個能滿足要求的空閑區(qū)且該空閑區(qū)的

7、大小比其他滿足要求的空閑區(qū)都大,從中劃出與請求的大小相等的存儲空間分派給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)鏈中。 4、主存空間回收 當一個作業(yè)執(zhí)行完成撤離時,作業(yè)所占的分區(qū)應(yīng)當歸還給系統(tǒng)。歸還的分區(qū)假如與其它空閑區(qū)相鄰,則應(yīng)合成一個較大的空閑區(qū),登記在空閑區(qū)說明鏈中,此時,相鄰空閑區(qū)的合并問題,要求考慮四種狀況: (1)釋放區(qū)下鄰空閑區(qū)(低地址鄰接) (2)釋放區(qū)上鄰空閑區(qū)(高地址鄰接) (3)釋放區(qū)上下都與空閑區(qū)鄰接 (4)釋放區(qū)上下鄰都與空閑區(qū)不鄰接 五、程序流程圖 main函數(shù)里的流程圖 分派空間里的流程圖 回收空間里的流程圖 六、相關(guān)數(shù)據(jù)結(jié)構(gòu)及關(guān)鍵函數(shù)說明 本程序采用了一個struct f

8、ree_table數(shù)據(jù)結(jié)構(gòu),里面包含分區(qū)序號(num)、起始地址(address)、分區(qū)長度(length)和分區(qū)狀態(tài)(state)。還用了線性表的雙性鏈表存儲結(jié)構(gòu)(struct Node),里面包含前區(qū)指針(prior)和后繼指針(next)。一開始定義一條(含有first和end)的鏈,用開始指針和尾指針開創(chuàng)空間鏈表。然后分別按三種算法進行分派和回收。 在該程序中關(guān)鍵函數(shù)有,sort()、allocation()、recovery()、和First_fit()、Best_fit()、Worst_fit();其中sort()函數(shù)是用來整理分區(qū)序號的,如在刪序號3時,她與前面序號2相連在一起了

9、,然后序號2中的長度總滿足申請的內(nèi)存大小,就會在序號2中分派,然后序號在2的基礎(chǔ)上加1,一直加,加到與原本序號3的下一個序號也就是4相等,這時sort()就開始有明顯的工作了;allocation()是分派空間的,也是過渡到三個算法中的,當三個算法中滿足或者不滿足分派請求,都會又返回值給allocation();recovery()是用來回收內(nèi)存的,里面包含了四種狀況相連結(jié)果,即釋放區(qū)上與空閑區(qū)鄰接、釋放區(qū)下與空閑區(qū)鄰接、釋放區(qū)上下都與空閑區(qū)鄰接、釋放區(qū)上下都與空閑區(qū)不鄰接這四種狀況的結(jié)果。 七、源代碼 #include #include #define OK 1 /完成 #define ER

10、ROR 0 /出錯 typedef int Status; typedef struct free_table/定義一個空閑區(qū)說明表結(jié)構(gòu) int num; /分區(qū)序號 long address; /起始地址 long length; /分區(qū)大小 int state; /分區(qū)狀態(tài) ElemType; typedef struct Node/ 線性表的雙向鏈表存儲結(jié)構(gòu) ElemType data; struct Node *prior; /前趨指針 struct Node *next; /后繼指針 Node,*LinkList; LinkList first; /頭結(jié)點 LinkList end;

11、 /尾結(jié)點 int flag;/記錄要刪除的分區(qū)序號 Status Initblock()/開創(chuàng)帶頭結(jié)點的內(nèi)存空間鏈表 first=(LinkList)malloc(sizeof(Node); end=(LinkList)malloc(sizeof(Node); first-prior=NULL; first-next=end; end-prior=first; end-next=NULL; end-data.num=1; end-data.address=40; end-data.length=600; end-data.state=0; return OK; void sort()/分區(qū)序

12、號重新排序 Node *p=first-next,*q; q=p-next; for(;p!=NULL;p=p-next) for(q=p-next;q;q=q-next) if(p-data.num=q-data.num) q-data.num+=1; /顯示主存分派狀況 void show() int flag=0;/用來記錄分區(qū)序號 Node *p=first; p-data.num=0; p-data.address=0; p-data.length=40; p-data.state=1; sort(); printf(ntt主存空間分派狀況n); printf(*nn); print

13、f(分區(qū)序號t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn); while(p) printf(%dtt%dtt%d,p-data.num,p-data.address,p-data.length); if(p-data.state=0) printf(tt空閑nn); else printf(tt已分派nn); p=p-next; printf(*nn); /首次適應(yīng)算法 Status First_fit(int request) /為申請作業(yè)開拓新空間且初始化 Node *p=first-next; LinkList temp=(LinkList)malloc(sizeof(Node); temp-data.length=request; temp-data.state=1; p-data.num=1; while(p) if(p-data.state=0) return OK; break; else if(p-data.state=0) temp-next=p; temp-data.address=p-data.address; temp-data.num=p-data.num; p-pri

溫馨提示

  • 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

提交評論