




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
-.z.要求:模擬UNI*系統(tǒng)的空閑塊成組鏈接法,實現(xiàn)磁盤存儲空間的管理。[提示]:(1)假定磁盤存儲空間已被劃分成長度為n的等長塊,共有M塊可供使用。UNI*系統(tǒng)中采用空閑塊成組鏈接的方法來管理磁盤存儲空間,將磁盤中的每N個空閑塊〔N<M〕分成一組,最后一組可以缺乏N塊,每組的第一塊中登記了下一組空閑塊的塊數(shù)和塊號,第一組的塊數(shù)和塊號登記在專用塊中,登記的格式如下:0空閑塊數(shù)k1空閑塊號12空閑塊號2MMMMK空閑塊號kMMMM當(dāng)?shù)谝豁梼?nèi)容為"0〞時,則第二項起指出的空閑塊是最后一組。(2)現(xiàn)模擬UNI*系統(tǒng)的空閑塊成組鏈接,假定共有8塊可供使用,每3塊為一組,則空閑塊成組鏈接的初始狀態(tài)為:開場時,空閑塊號是順序排列的,但經(jīng)假設(shè)干次的分配和歸還操作后,空閑塊的鏈接就未必按序排列了。用二維數(shù)組A:array[0…M-1]ofarray[0…n-1]來模擬管理磁盤空間,用A[i]表示第I塊,第0塊A[0]作為專用塊。(3)成組鏈接的分組情況記錄在磁盤物理塊中,為了查找鏈接情況,必須把它們讀入主存,故當(dāng)磁盤初始化后,系統(tǒng)先將專用塊內(nèi)容復(fù)制到主存中。定義一個數(shù)組MA存放專用塊內(nèi)容,即MA:=A[0]。申請一塊磁盤空間時,查MA,從中找出空閑塊號,當(dāng)一組的空閑塊只剩第一塊時,則應(yīng)把該塊中指出的下一組的空閑塊數(shù)和塊號復(fù)制到專用塊中,然后把該塊分配給申請者。當(dāng)一組的空閑塊分配完后則把專用塊內(nèi)容〔下一組鏈接情況〕復(fù)制到主存,再為申請者分配。分配算法如下列圖。采用成組鏈接的分配算法(4)歸還一塊時給出歸還的塊號,假設(shè)當(dāng)前組不滿規(guī)定塊數(shù)時,將歸還塊登記入該組;假設(shè)當(dāng)前組已滿,則另建一新組,這時歸還塊作為新一組的第一塊,應(yīng)把主存中登記的一組鏈接情況MA復(fù)制到歸還塊中,然后在MA重新登記一個新組。歸還一塊的算法如下列圖。采用成組鏈接的回收算法(5)設(shè)計分配和歸還磁盤空間的程序,能顯示或打印分配的磁盤空間的塊號,在完成一次分配或歸還后能顯示或打印各空閑塊組的情況〔各組的空閑塊數(shù)和塊號〕。本實習(xí)省去了塊號與物理地址之間的轉(zhuǎn)換工作,而在實際的系統(tǒng)中必須進(jìn)展塊號與物理地址的轉(zhuǎn)換工作。(6)運行你所設(shè)計的程序,假定空閑塊鏈接的初始狀態(tài)如提示〔2〕,現(xiàn)先分配4塊,再依次歸還第2塊和第6塊。把執(zhí)行后分配到的塊號依次顯示或打印出來,且顯示或打印空閑塊組的情況。實驗報告設(shè)計者算法描述或流程圖1.根本思想:
首先定義磁盤分配數(shù)組并初始化,9個一維數(shù)組分別表示9個空閑塊,程序運行時,先將專用塊A〔0〕復(fù)制到內(nèi)存中,然后進(jìn)展功能選擇,分配時,查MA,從中找出空閑塊號,當(dāng)一組的空閑塊只剩第一塊時,應(yīng)把該塊中指出的下一組的空閑塊數(shù)和塊號復(fù)制到專用塊這,然后把該塊分配給申請者,當(dāng)一組的空閑塊分配完后則把專用塊內(nèi)容〔下一組鏈接情況〕復(fù)制到內(nèi)存,再為申請者分配。
回收時,輸入待回收的塊號,查找該塊是否已被分配,假設(shè)未分配,退出,否則,當(dāng)前組不滿規(guī)定塊數(shù)時,將歸還塊登記入該組,假設(shè)當(dāng)前組已滿,則另建一新組,這時歸還塊作為新一組的第一塊,應(yīng)把內(nèi)存中登記的一組鏈接情況MA復(fù)制到歸還塊中,然后在MA這重新登記一個新組。顯示分組情況。
2.程序流程:
建立磁盤分配并初始化
調(diào)用功能選擇函數(shù)進(jìn)展分配或回收操作。3.數(shù)據(jù)構(gòu)造及各子程序〔1〕intMA[4];
/*空閑塊數(shù)組*/〔2〕intA[9][4]={{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}};
/*磁盤空間*/〔3〕intmark[9];
/*存放已分配的塊*/intNo=0;
/*已分配的塊數(shù)*/〔4〕voiddisplay():顯示分組情況
形參:無
返回參數(shù):無;〔5〕voidassign():分配空閑塊
形參:無
返回參數(shù):無;〔6〕voidcallback():回收空閑塊
形參:無
返回參數(shù):無;〔7〕voidmenu():功能選擇函數(shù)
形參:無
返回參數(shù):無;附:源程序
#include<stdio.h>intMA[4];
/*空閑塊數(shù)組*/
intA[9][4]={{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}};
/*磁盤空間*/
intmark[9];
/*存放已分配的塊*/
intNo=0;
/*已分配的塊數(shù)*/voiddisplay1()
{
inti,j,temp,count;
No=0;
if(MA[1]!=0)
{
i=MA[0];
printf("\ngroup1:");
for(j=1;j<=i;j++)
{
printf("%d
",MA[j]);
mark[++No]=MA[j];
}
temp=MA[1];
count=2;
while(A[temp][1]!=0)
{
printf("\ngroup%d:",count);
i=A[temp][0];
for(j=1;j<=i;j++)
{
printf("%d
",A[temp][j]);
mark[++No]=A[temp][j];
}
count++;
temp=A[temp][1];
}
printf("\ngroup%d:",count);
i=A[temp][0];
for(j=2;j<=i+1;j++)
if(A[temp][j]>0)
{
printf("%d
",A[temp][j]);
mark[++No]=A[temp][j];
}
}
else
{
i=MA[0];
if(i==1)
printf("\nTheblocksareallassigned");
else
{
printf("\ngroup1:");
for(j=2;j<=i;j++)
{
printf("%d
",MA[j]);
mark[++No]=MA[j];
}
}
}
}voiddisplay()
/*顯示分組情況*/
{
inti,j;
if(MA[0]!=0)
display1();
else
{
i=MA[1];
for(j=0;j<=3;j++)
MA[j]=A[i][j];
display1();
}
}voidassign()
/*分配空閑塊*/
{
ints,i;
if(MA[0]>1)
/*假設(shè)該組不止一個空閑塊*/
{
i=MA[0];
s=MA[i];
MA[0]--;
printf("\nnumberoftheblock:%d",s);
}
elseif(MA[0]==1)
/*只剩一個空閑塊*/
{
if(MA[1]!=0)
/*還有其它空閑塊組*/
{
s=MA[1];
for(i=0;i<=3;i++)
A[0][i]=A[s][i];
MA[0]--;
printf("\nnumberoftheblock:%d",s);
}
else
/*沒有其它空閑塊組*/
{
printf("\nThereisn'tanyspace");
return;
}
}
else
/*當(dāng)前組已分配完*/
{
for(i=0;i<=3;i++)
MA[i]=A[0][i];
assign();
}
display();
/*顯示分組情況*/
}voidcallback()
/*回收空閑塊*/
{
inti,j,temp;
printf("\ninputtheNo.oftheblockyouwanttocallback:");
scanf("%d",&j);
getchar();
/*得到待回收的空閑塊號*/
for(temp=1;temp<=No;temp++)
{
if(mark[temp]==j)
break;
}
if(temp<No+1)
/*假設(shè)該空閑塊已在,退出*/
{
printf("\nTheblockisinthedisk");
return;
}
if(MA[0]<3)
/*當(dāng)前組不滿3塊*/
{
i=MA[0];
MA[i+1]=j;
MA[0]++;
}
else
/*已有3塊*/
{
for(i=0;i<=3;i++)
A[j][i]=MA[i];
MA[0]=1;
MA[1]=j;
}
display();
/*顯示*/
}voidmenu()
/*功能選擇函數(shù)*/
{
intchoice;
charjudge;
printf("\ninputyourchoice:(1--assign,2--callback):");
scanf("%d",&choice);
getchar();
if(choice==1)
assign();
elseif(choice==2)
callback();
else
printf("\ninvalidcommand!");
printf("\ncontinueornot"(y--Yes,n--Not):");
scanf("%c",&judge);
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高端養(yǎng)老機構(gòu)餐飲服務(wù)與營養(yǎng)健康管理綜合服務(wù)合同
- 2025年度智能交通信號系統(tǒng)優(yōu)化升級改造服務(wù)合同
- 2025年醫(yī)院消防安全風(fēng)險評估與應(yīng)急預(yù)案編制及培訓(xùn)服務(wù)合同
- 2025年金融風(fēng)險管理專員招聘與職業(yè)行為準(zhǔn)則服務(wù)合同
- 新員工崗前消防知識培訓(xùn)
- 2025綜合性醫(yī)院信息安全管理保密合同
- 蔬菜加工業(yè)的競爭與突圍
- 2025年智能城市交通管理系統(tǒng)采購與維護(hù)合同
- (人教版)小學(xué)數(shù)學(xué)三年級下冊 期中測試及答案01
- 凈水基礎(chǔ)知識培訓(xùn)總結(jié)課件
- 2025年海南省公安廳招聘警務(wù)輔助人員考試試題(含答案)
- 2025年河北中考生物真題含答案
- 合肥國際馬拉松志愿者培訓(xùn)
- 空預(yù)器密封改造安裝工程施工方案
- 醫(yī)用放射性廢水衰變池設(shè)計623朱韜
- 探究高中生上課注意力不集中的原因及其對策-2019年精選文檔
- M2激光模式測量
- 網(wǎng)吧企業(yè)章程范本
- 全國農(nóng)牧漁業(yè)豐收獎經(jīng)濟(jì)效益計算辦法(共22頁)
- 甘肅鐵礦等34個礦種礦業(yè)權(quán)出讓收益場基準(zhǔn)價(優(yōu).選)
評論
0/150
提交評論