版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收一、實驗?zāi)康纳钊肓私鈩討B(tài)分區(qū)存儲管理方式主存分配回收的實現(xiàn)。二、實驗預(yù)備知識存儲管理中動態(tài)分區(qū)的管理方式。三、實驗內(nèi)容編寫程序完成動態(tài)分區(qū)存儲管理方式的主存分配回收的實現(xiàn)。實驗具體包括:首先確定主存空間分配表;然后采用最優(yōu)適應(yīng)算法完成主存空間的分配和回收;最后編寫主函數(shù)對所做工作進行測試。四、提示與講解動態(tài)分區(qū)管理方式預(yù)先不將主存劃分成幾個區(qū)域,而把主存除操作系統(tǒng)占用區(qū)域外的空間看作一個大的空閑區(qū)。當作業(yè)要求裝入主存時,根據(jù)作業(yè)需要主存空間的大小查詢主存內(nèi)各個空閑區(qū),當從主存空間中找到一個大于或等于該作業(yè)大小的主存空閑區(qū)時,選擇其中一個空閑區(qū),按作業(yè)需求量劃出一個分區(qū)裝入該作業(yè)。作業(yè)執(zhí)行完后,它所占的主存分區(qū)被收回,成為一個空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個空閑區(qū)。實現(xiàn)動態(tài)分區(qū)的分配和回收,主要考慮的問題有三個:第一,設(shè)計記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計主存分配算法;第三,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計主存回收算法。首先,考慮第一個問題:設(shè)計記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域。由于動態(tài)分區(qū)的大小是由作業(yè)需求量決定的,故分區(qū)的長度是預(yù)先不固定的,且分區(qū)的個數(shù)也隨主存分配和回收變動??傊?,所有分區(qū)情況隨時可能發(fā)生變化,數(shù)據(jù)表格的設(shè)計必須和這個特點相適應(yīng)。由于分區(qū)長度不同,因此設(shè)計的表格應(yīng)該包括分區(qū)在主存中的起始地址和長度。由于分配時空閑區(qū)有時會變成兩個分區(qū):空閑區(qū)和已分分區(qū),回收主存分區(qū)時,可能會合并空閑分區(qū),這樣如果整個主存采用一張表格記錄已分分區(qū)和空閑區(qū),就會使表格操作繁瑣。主存分配時查找空閑區(qū)進行分配,然后填寫已分配區(qū)表,主要操作在空閑區(qū);某個作業(yè)執(zhí)行完后,將該分區(qū)變成空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,主存的分配和回收主要是對空閑區(qū)的操作。這樣為了便于對主存空間的分配和回收,就建立兩張分區(qū)表記錄主存使用情況,一張表格記錄作業(yè)占用分區(qū)的“已分配區(qū)表”;一張是記錄空閑區(qū)的“空閑區(qū)表”。這兩張表的實現(xiàn)方法一般有兩種,一種是鏈表形式,一種是順序表形式。在實驗中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須提前固定,所以無論是“已分配區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。它們的長度必須是系統(tǒng)可能的最大項數(shù),系統(tǒng)運行過程中才不會出錯,因而在多數(shù)情況下,無論是“已分配區(qū)表”還是“空閑區(qū)表”都有空閑欄目。已分配區(qū)表中除了分區(qū)起始地址、長度外,也至少還要有一項“標志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個作業(yè)占用分區(qū)的登記項,內(nèi)容為該作業(yè)的作業(yè)名;空閑區(qū)表中除了分區(qū)起始地址、長度外,也要有一項“標志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個空閑區(qū)的登記項,內(nèi)容為“未分配”。在實際系統(tǒng)中,這兩表格的內(nèi)容可能還要多,實驗中僅僅使用上述必須的數(shù)據(jù)。為此,“已分配區(qū)表”和“空閑區(qū)表”在實驗中有如下的結(jié)構(gòu)定義。已分配區(qū)表的定義:#definen10//假定系統(tǒng)允許的最大作業(yè)數(shù)量為nstruct{floataddress;//已分分區(qū)起始地址floatlength;//已分分區(qū)長度,單位為字節(jié)intflag;//已分配區(qū)表登記欄標志,“0〃表示空欄目,實驗中只支持一個字符的作業(yè)名}used_table[n];〃已分配區(qū)表空閑區(qū)表的定義:#definem10//假定系統(tǒng)允許的空閑區(qū)表最大為mstruct{floataddress;//空閑區(qū)起始地址floatlength;//空閑區(qū)長度,單位為字節(jié)intflag;//空閑區(qū)表登記欄標志,用“0”表示空欄目,用“1”表示未分配}free_table[m];〃空閑區(qū)表其中分區(qū)起始地址和長度數(shù)值太大,超出了整型表達范圍,所以采用了float類型。然后,就要考慮如何在設(shè)計的數(shù)據(jù)表格上進行主存的分配。當要裝入一個作業(yè)時,從空閑區(qū)表中查找標志為“未分配”的空閑區(qū),從中找出一個能容納該作業(yè)的空閑區(qū)。如果找到的空閑區(qū)正好等于該作業(yè)的長度,則把該分區(qū)全部分配給作業(yè)。這時應(yīng)該把該空閑區(qū)登記欄中的標志改為“空”,同時在已分配區(qū)表中找到一個標志為“空”的欄目登記新裝入作業(yè)所占用分區(qū)的起始地址、長度和作業(yè)名。如果找到的空閑區(qū)大于作業(yè)長度,則把空閑區(qū)分成兩部分,一部分用來裝入作業(yè),另外一部分仍為空閑區(qū)。這時只要修改原空閑區(qū)的長度,且把新裝入的作業(yè)登記到已分配區(qū)表中。實驗中主存分配算法采用“最優(yōu)適應(yīng)”算法。最優(yōu)適應(yīng)算法是按作業(yè)要求挑選一個能滿足作業(yè)要求的最小空閑區(qū),這樣保證可以不去分割一個大的區(qū)域,使裝入大作業(yè)時比較容易得到滿足。但是最優(yōu)適應(yīng)算法容易出現(xiàn)找到的一個分區(qū)可能只比作業(yè)所要求的長度略大一點的情況,這時,空閑區(qū)分割后剩下的空閑區(qū)就很小,這種很小的空閑區(qū)往往無法使用,影響了主存的使用。為了一定程度上解決這個問題,如果空閑區(qū)的大小比作業(yè)要求的長度略大一點,不再將空閑區(qū)分成已分分區(qū)和空閑區(qū)兩部分,而是將整個空閑區(qū)分配給作業(yè)。在實現(xiàn)最優(yōu)適應(yīng)算法時,可把空閑區(qū)按長度以遞增方式登記在空閑區(qū)表中。分配時順序查找空閑表,查找到的第一個空閑區(qū)就是滿足作業(yè)要求的最小分區(qū)。這樣查找速度快,但是為使空閑區(qū)按長度以遞增順序登記在空閑表中,就必須在分配回收時進行空閑區(qū)表的調(diào)整??臻e區(qū)表調(diào)整時移動表目的代價要高于查詢整張表的代價,所以實驗中不采用空閑區(qū)有序登記在空閑表中的方法。動態(tài)分區(qū)方式的主存分配流程如圖4所示。作業(yè)J申請xk大小的主存空間i=0;k=-1;i是空閑區(qū)表中一欄(i<二m)?YN第i欄標志為“未分配”且滿足作業(yè)需求xk?N是否找到滿足需求的分區(qū)k?N主存分配失敗結(jié)束YY第k欄xx-作業(yè)需求Sminsize?N第i欄空閑區(qū)為第一個滿足需求的或第i欄空閑區(qū)xx小于第k欄空閑區(qū)xx?N分配整個分區(qū):第k欄狀態(tài)為“空”ad=第k欄起始地址;xk二第k欄xx;Yi=O切割空閑區(qū):第k欄xx減去xk;ad=第k欄起始地址-第k欄xx;k=ii=i+1第i欄是已分配區(qū)表中一欄且第i欄狀態(tài)不為空?i=i+1YNY第i欄是為已分分配表中一欄?YN填寫已分配區(qū)表:第j欄起始地址二ad;第j欄xx=xk;第j欄狀態(tài)二作業(yè)名J空閑區(qū)表第k欄狀態(tài)為空?N空閑區(qū)表狀態(tài)未分配空閑區(qū)表第k欄長度加xk已分配區(qū)表長度不足,分配失敗結(jié)束圖4動態(tài)分區(qū)最優(yōu)分配算法流程圖最后是動態(tài)分區(qū)方式下的主存回收問題。動態(tài)分區(qū)方式下回收主存空間時,應(yīng)該檢查是否有與歸還區(qū)相鄰的空閑區(qū)。若有,則應(yīng)該合并成一個空閑區(qū)。一個歸還區(qū)可能有上鄰空閑區(qū),也可能有下鄰空閑區(qū),或者既有上鄰空閑區(qū)又有下鄰空閑區(qū),或者既無上鄰空閑區(qū)也無下鄰空閑區(qū)。在實現(xiàn)回收時,首先將作業(yè)歸還的區(qū)域在已分配表中找到,將該欄目的狀態(tài)變?yōu)椤翱铡?,然后檢查空閑區(qū)表中標志為“未分配”的欄目,查找是否有相鄰空閑區(qū);最后,合并空閑區(qū),修改空閑區(qū)表。假定作業(yè)歸還的分區(qū)起始地址為S,長度為L,貝y:(1)歸還區(qū)有下鄰空閑區(qū)如果S+L正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,則表明歸還區(qū)有一個下鄰空閑區(qū)。這時只要修改第j欄登記項的內(nèi)容:起始地址二S;第j欄xx二第j欄xx+L;貝第j欄指示的空閑區(qū)是歸還區(qū)和下鄰空閑區(qū)合并后的大空閑區(qū)。(2) 歸還區(qū)有上鄰空閑區(qū)如果空閑區(qū)表中某個登記欄目(假定為第k欄)的“起始地址+長度〃正好等于S,則表明歸還區(qū)有一個上鄰空閑區(qū)。這時要修改第k欄登記項的內(nèi)容(起始地址不變):第k欄xx二第k欄xx+L;于是第k欄指示的空閑區(qū)是歸還區(qū)和上鄰空閑區(qū)合并后的大空閑區(qū)。(3) 歸還區(qū)既有上鄰空閑區(qū)又有下鄰空閑區(qū)如果S+L正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,同時還有某個登記欄目(假定為第k欄)的“起始地址+長度〃正好等于S,這表明歸還區(qū)既有一個上鄰空閑區(qū)又有一個下鄰空閑區(qū)。此時對空閑區(qū)表的修改如下:第k欄長度二第k欄長度+第j欄長度+L;(第k欄起始地址不變)第j欄狀態(tài)=“空”;(將第j欄登記項刪除)這樣,第k欄指示的空閑區(qū)是歸還區(qū)和上、下鄰空閑區(qū)合并后的大空閑區(qū);原來的下鄰空閑區(qū)登記項(第j欄)被刪除,置為“空〃。(4)歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)如果在檢查空閑區(qū)表時,無上述三種情況出現(xiàn),則表明歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)。這時,應(yīng)該在空閑區(qū)表中查找一個狀態(tài)為“空”的欄目(假定查到的是第t欄),則第t欄的內(nèi)容修改如下:第t欄起始地址二S;第t欄xx=L;第t欄狀態(tài)=“未分配”這樣,第t欄指示的空閑區(qū)是歸還區(qū)。按上述方法歸還主存區(qū)域的流程如圖5所示。由于是實驗,沒有真正的主存要分配,所以在實驗中,首先應(yīng)建立一張空閑區(qū)表,初始狀態(tài)只有一個空閑登記項(假定的主存空閑區(qū))和一張所有狀態(tài)都為“空〃的已分配區(qū)表,假定主存空間110KB,操作系統(tǒng)占用10KB,其余為空閑區(qū);然后,可以選擇進行主存分配或主存回收,如果是分配,要求輸入作業(yè)名和所需主存空間大小,如果是回收,輸入回收作業(yè)的作業(yè)名,循環(huán)進行主存分配和回收后,如果需要,則顯示兩張表的內(nèi)容,以檢查主存的分配和回收是否正確。作業(yè)J歸還空間s=0s=s+1已分配區(qū)表第s欄狀態(tài)為作業(yè)J(s<=n)?NYNs為已分配區(qū)表中一欄?YS二已分配區(qū)表第Ys欄起始地址L二已分配區(qū)表第s欄xx已分配區(qū)表第s欄狀態(tài)為空未找到作業(yè),回收失敗結(jié)束假設(shè)下鄰空閑區(qū)在第假設(shè)上鄰空閑區(qū)在第i=0j欄j=-1;k欄k=-1;i=i+1第i欄不是空閑區(qū)表中一欄或回收分區(qū)的上下鄰空閑區(qū)均找到?YNN第i欄狀態(tài)為“未分配”?YY回收分區(qū)有上鄰?N回收分區(qū)有下鄰?N回收分區(qū)有下鄰?Nt=OYYY第i欄為回收分區(qū)的上鄰?NY戸第Ni欄為回收分區(qū)的下鄰?NY第t欄是空閑表一欄?N和上鄰合并:第k欄xx=第k欄xx+L和上下鄰三項合并:第k欄xx二第k欄長度+第j欄xx+L;第j欄狀態(tài)=“空”和下鄰合并:第j欄長度二第j欄長度+L第j欄起始地址二Sj=it=t+1第t欄是空閑表xx空欄?YN已分配區(qū)表第s欄狀態(tài)為J;空閑區(qū)表xx不足,回收失敗歸還分區(qū)填入空閑區(qū)表:第t欄起始地址二S;第t欄xx=L;第t欄狀態(tài)=“未分配”結(jié)束圖5動態(tài)分區(qū)回收流程圖五、課外題(1)編程實現(xiàn)頁式存儲管理的主存分配和回收。(2)用鏈表方式表示主存空間分配情況,完成動態(tài)分區(qū)管理方式下的主存空間分配和回收。六、參考程序#definen10//假定系統(tǒng)允許的最大作業(yè)數(shù)量為n#definem10//假定系統(tǒng)允許的空閑區(qū)表最大為m#defineminisize100struct{floataddress;//已分分區(qū)起始地址floatlength;//已分分區(qū)長度,單位為字節(jié)intflag;//已分配區(qū)表登記欄標志,用“0〃表示空欄目,實驗中只支持一個字符的作業(yè)名}used_table[n];〃已分配區(qū)表struct{floataddress;//空閑區(qū)起始地址floatlength;//空閑區(qū)長度,單位為字節(jié)intflag;//空閑區(qū)表登記欄標志,用“0〃表示空欄目,用“1”表示未分配}free_table[m];〃空閑區(qū)表allocate(J,xk)〃采用最優(yōu)分配算法分配xk大小的空間charJ;floatxk;{inti,k;floatad;k=-1;for(i=0;i<m;i++)〃尋找空間大于xk的最小空閑區(qū)登記項kif(free_table[i].length>=xk&&free_table[i].flag==1)if(k==-1||free_table[i].length<free_table[k].length)k=i;訐(k==-1)〃未找到可用空閑區(qū),返回{printf("無可用空閑區(qū)\n");return;}//找到可用空閑區(qū),開始分配:若空閑區(qū)大小與要求分配的空間差小于minisize大小,則空閑區(qū)全部分配;若空閑區(qū)大小與要求分配的空間差大于minisize大小,則從空閑區(qū)劃出一部分分配if(free_table[k].length-xk<=minisize){free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{free_table[k].length=free_table[k].length-xk;ad二free_table[k].address+free_table[k].length;}〃修改已分配區(qū)表i=0;while(used_table[i].flag!=O&&i<n)〃尋找空表目i++;訐(i>=n)〃無表目填寫已分分區(qū){printf("無表目填寫已分分區(qū),錯誤\n");//xx空閑區(qū)表if(free_table[k].flag==O)〃前面找到的是整個空閑區(qū)free_table[k].flag=1;else //前面找到的是某個空閑區(qū)的一部分free_table[k].length=free_table[k].length+xk;return;}else //修改已分配區(qū)表{used_table[i].address=ad;}//主存歸還函數(shù)結(jié)束main(){inti,a;floatxk;charJ;//空閑區(qū)表初始化free_table[0].address=10240;free_table[0].length=102400;free_table[0].flag=1;for(i=1;i<m;i++)free_table[i].flag=0;//已分配區(qū)表初始化for(i=0;i<n;i++)used_table[i].flag=0;while(1){prints選擇功能項(0-退出,1-分配主存,2-回收主存,3-顯示主存)\n");printf("選擇功項(0~3):");scanf("%d",&a);switch(a){case0:exit(0);//a=0程序結(jié)束case1://a=1分配主存空間printf("輸入作業(yè)名
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年酒店客房服務(wù)滿意度提升單位合同范本3篇
- 二零二五年度網(wǎng)絡(luò)安全防護服務(wù) XXX合同協(xié)議補充協(xié)議2篇
- 二零二五年高管薪酬體系調(diào)整與執(zhí)行合同3篇
- 2024版建設(shè)工程合同包括哪幾種形式
- 二零二五年研發(fā)合作協(xié)議及其技術(shù)轉(zhuǎn)讓條款2篇
- 2024汽修場地租賃及維修設(shè)備采購合同范本2篇
- 二零二五年海南地區(qū)教育機構(gòu)勞動合同示范文本3篇
- 2024年酒店式公寓共同開發(fā)協(xié)議
- 二零二五年度公益組織財務(wù)審計代理協(xié)議3篇
- 2024版山林土地租賃合同書范本
- 2023年浙江省溫州市中考數(shù)學真題含解析
- 窗簾采購投標方案(技術(shù)方案)
- 司庫體系建設(shè)
- 居間合同范本解
- 機電傳動單向數(shù)控平臺-礦大-機械電子-有圖
- 婦科病盆腔炎病例討論
- 人教版高中物理必修一同步課時作業(yè)(全冊)
- 食堂油鍋起火演練方案及流程
- 有余數(shù)的除法算式300題
- 五年級上冊小數(shù)除法豎式計算練習300題及答案
- 【外資便利店在我國的經(jīng)營策略分析案例:以日本羅森便利店為例11000字(論文)】
評論
0/150
提交評論