模擬UNIX系統(tǒng)成組鏈接法 實(shí)現(xiàn)磁盤存儲空間的管理_第1頁
模擬UNIX系統(tǒng)成組鏈接法 實(shí)現(xiàn)磁盤存儲空間的管理_第2頁
模擬UNIX系統(tǒng)成組鏈接法 實(shí)現(xiàn)磁盤存儲空間的管理_第3頁
模擬UNIX系統(tǒng)成組鏈接法 實(shí)現(xiàn)磁盤存儲空間的管理_第4頁
模擬UNIX系統(tǒng)成組鏈接法 實(shí)現(xiàn)磁盤存儲空間的管理_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、要求:模擬UNIX系統(tǒng)的空閑塊成組鏈接法,實(shí)現(xiàn)磁盤存儲空間的管理。提示:(1) 假定磁盤存儲空間已被劃分成長度為n的等長塊,共有M塊可供使用。UNIX系統(tǒng)中采用空閑塊成組鏈接的方法 來管理磁盤存儲空間,將磁盤中的每N個空閑塊(NM)分成一組,最后一組可以不足N塊,每組的第一塊中登記了下一組空閑塊的塊數(shù)和塊號,第一組的塊數(shù)和塊號登記在專用塊中,登記的格式如下:0空閑塊數(shù)k1空閑塊號12空閑塊號2MMMMK空閑塊號kMMMM當(dāng)?shù)谝豁?xiàng)內(nèi)容為“0”時(shí),則第二項(xiàng)起指出的空閑塊是最后一組。(2) 現(xiàn)模擬UNIX系統(tǒng)的空閑塊成組鏈接,假定共有8塊可供使用,每3塊為一組,則空閑塊成組鏈接的初始狀態(tài)為:開始時(shí),

2、空閑塊號是順序排列的,但經(jīng)若干次的分配和歸還操作后,空閑塊的鏈接就未必按序排列了。用二維數(shù)組A:array 0M-1 of array 0n-1來模擬管理磁盤空間,用Ai表示第I塊,第0塊A0作為專用塊。(3) 成組鏈接的分組情況記錄在磁盤物理塊中,為了查找鏈接情況,必須把它們讀入主存,故當(dāng)磁盤初始化后,系統(tǒng)先將專用塊內(nèi)容復(fù)制到主存中。定義一個數(shù)組MA存放專用塊內(nèi)容,即MA: =A0。申請一塊磁盤空間時(shí),查MA,從中找出空閑塊號,當(dāng)一組的空閑塊只剩第一塊時(shí),則應(yīng)把該塊中指出的下一組的空閑塊數(shù)和塊號復(fù)制到專用塊中,然后把該塊分配給申請者。當(dāng)一組的空閑塊分配完后則把專用塊內(nèi)容(下一組鏈接情況)復(fù)制

3、到主存,再為申請者分配。分配算法如下圖。 采用成組鏈接的分配算法(4) 歸還一塊時(shí)給出歸還的塊號,若當(dāng)前組不滿規(guī)定塊數(shù)時(shí),將歸還塊登記入該組;若當(dāng)前組已滿,則另建一新組,這時(shí)歸還塊作為新一組的第一塊,應(yīng)把主存中登記的一組鏈接情況MA復(fù)制到歸還塊中,然后在MA重新登記一個新組。歸還一塊的算法如下圖。 采用成組鏈接的回收算法(5) 設(shè)計(jì)分配和歸還磁盤空間的程序,能顯示或打印分配的磁盤空間的塊號,在完成一次分配或歸還后能顯示或打印各空閑塊組的情況(各組的空閑塊數(shù)和塊號)。本實(shí)習(xí)省去了塊號與物理地址之間的轉(zhuǎn)換工作,而在實(shí)際的系統(tǒng)中必須進(jìn)行塊號與物理地址的轉(zhuǎn)換工作。(6) 運(yùn)行你所設(shè)計(jì)的程序,假定空閑塊

4、鏈接的初始狀態(tài)如提示(2),現(xiàn)先分配4塊,再依次歸還第2塊和第6塊。把執(zhí)行后分配到的塊號依次顯示或打印出來,且顯示或打印空閑塊組的情況。實(shí)驗(yàn)報(bào)告設(shè)計(jì)者日期測試者日期功能描述模擬UNIX系統(tǒng)的空閑塊成組鏈接法,實(shí)現(xiàn)磁盤存儲空間的管理。算法描述或流程圖1. 基本思想: 首先定義磁盤分配數(shù)組并初始化,9個一維數(shù)組分別表示9個空閑塊,程序運(yùn)行時(shí),先將專用塊A0復(fù)制到內(nèi)存中,然后進(jìn)行功能選擇,分配時(shí),查MA,從中找出空閑塊號,當(dāng)一組的空閑塊只剩第一塊時(shí),應(yīng)把該塊中指出的下一組的空閑塊數(shù)和塊號復(fù)制到專用塊這,然后把該塊分配給申請者,當(dāng)一組的空閑塊分配完后則把專用塊內(nèi)容(下一組鏈接情況)復(fù)制到內(nèi)存,再為申請

5、者分配。 回收時(shí),輸入待回收的塊號,查找該塊是否已被分配,若未分配,退出,否則,當(dāng)前組不滿規(guī)定塊數(shù)時(shí),將歸還塊登記入該組,若當(dāng)前組已滿,則另建一新組,這時(shí)歸還塊作為新一組的第一塊,應(yīng)把內(nèi)存中登記的一組鏈接情況MA復(fù)制到歸還塊中,然后在MA這重新登記一個新組。顯示分組情況。 2. 程序流程: 建立磁盤分配并初始化 調(diào)用功能選擇函數(shù)進(jìn)行分配或回收操作。3. 數(shù)據(jù)結(jié)構(gòu)及各子程序(1)int MA4; /*空閑塊數(shù)組*/(2)int A94=3,1,2,3,3,4,5,6,0,0,0,0,0,0,0,0,3,0,7,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /*磁盤空間*

6、/(3)int mark9; /*存放已分配的塊*/int No=0; /*已分配的塊數(shù)*/(4)void display( ):顯示分組情況 形參:無 返回參數(shù):無;(5)void assign( ):分配空閑塊 形參:無 返回參數(shù):無;(6)void callback( ):回收空閑塊 形參:無 返回參數(shù):無;(7)void menu( ):功能選擇函數(shù) 形參:無 返回參數(shù):無;附:源程序#includeint MA4; /*空閑塊數(shù)組*/int A94=3,1,2,3,3,4,5,6,0,0,0,0,0,0,0,0,3,0,7,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0

7、,0,0; /*磁盤空間*/int mark9; /*存放已分配的塊*/int No=0; /*已分配的塊數(shù)*/void display1() int i,j,temp,count; No=0; if(MA1!=0) i=MA0; printf(ngroup1:); for(j=1;j=i;j+) printf(%d ,MAj); mark+No=MAj; temp=MA1; count=2; while(Atemp1!=0) printf(ngroup%d:,count); i=Atemp0; for(j=1;j=i;j+) printf(%d ,Atempj); mark+No=Atemp

8、j; count+; temp=Atemp1; printf(ngroup%d:,count); i=Atemp0; for(j=2;j0) printf(%d ,Atempj); mark+No=Atempj; else i=MA0; if(i=1) printf(nThe blocks are all assigned); else printf(ngroup1:); for(j=2;j=i;j+) printf(%d ,MAj); mark+No=MAj; void display() /*顯示分組情況*/ int i,j; if(MA0!=0) display1(); else i=M

9、A1; for(j=0;j1) /*若該組不止一個空閑塊*/ i=MA0; s=MAi; MA0-; printf(nnumber of the block:%d,s); else if(MA0=1) /*只剩一個空閑塊*/ if(MA1!=0) /*還有其它空閑塊組*/ s=MA1; for(i=0;i=3;i+) A0i=Asi; MA0-; printf(nnumber of the block:%d,s); else /*沒有其它空閑塊組*/ printf(nThere isnt any space); return; else /*當(dāng)前組已分配完*/ for(i=0;i=3;i+)

10、MAi=A0i; assign(); display(); /*顯示分組情況*/ void callback() /*回收空閑塊*/ int i,j,temp; printf(ninput the No. of the block you want to callback:); scanf(%d,&j); getchar(); /*得到待回收的空閑塊號*/ for(temp=1;temp=No;temp+) if(marktemp=j) break; if(tempNo+1) /*若該空閑塊已在,退出*/ printf(nThe block is in the disk); return; i

11、f(MA03) /*當(dāng)前組不滿3塊*/ i=MA0; MAi+1=j; MA0+; else /*已有3塊*/ for(i=0;i=3;i+) Aji=MAi; MA0=1; MA1=j; display(); /*顯示*/ void menu() /*功能選擇函數(shù)*/ int choice; char judge; printf(ninput your choice:(1-assign,2-callback):); scanf(%d,&choice); getchar(); if(choice=1) assign(); else if(choice=2) callback(); else printf(ninvalid command!); printf(ncontinue or not?(y-Yes,n-Not):); scanf(%c,&judg

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論