連續(xù)磁盤存儲(chǔ)空間的分配和回收_第1頁(yè)
連續(xù)磁盤存儲(chǔ)空間的分配和回收_第2頁(yè)
連續(xù)磁盤存儲(chǔ)空間的分配和回收_第3頁(yè)
連續(xù)磁盤存儲(chǔ)空間的分配和回收_第4頁(yè)
連續(xù)磁盤存儲(chǔ)空間的分配和回收_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

http://blog.163.eom/zhengjingwei1211@126/blog/static/6149928020108217422645/磁盤存儲(chǔ)空間的分配和回收(空閑表)#defineN5structEmpty//空閑表結(jié)構(gòu)體{intseq;//序號(hào)intstart;//起始?jí)K號(hào)intcount;//空閑塊個(gè)數(shù)charstate;//狀態(tài),F(xiàn)為未分配,E為空表目};structPan//磁盤結(jié)構(gòu)體{intZhuSeq;//柱面號(hào)intLapSeq;//磁道號(hào)intNoteSeq;//物理記錄號(hào)intZhuNum;//柱面?zhèn)€數(shù)intLapNum;〃磁道個(gè)數(shù)intNoteNum;//物理記錄個(gè)數(shù)};classCCiPan{public:EmptyE[N];〃空閑表結(jié)構(gòu)體數(shù)組PanP; 〃磁盤public:voidDisplay(EmptyE[]);〃顯示空閑表voidDeleteFile(EmptyE[],PanP);〃刪除文件,回收磁盤voidCreateFile(EmptyE[],PanP);〃創(chuàng)建文件,分配磁盤空間CCiPan();virtual~CCiPan();};空閑表信息如下表:#include#include#include#include#include#include"CiPan.h”"stdio.h”"iostream.h”#defineN5////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CCiPan::CCiPan()(//初始化空閑表E[0].seq=1;E[0].start=5;E[0].count=6;E[0].state='F';E[1].seq=2;E[1].start=14;E[1].count=3;E[1].state='F';E[2].seq=3;E[2].start=21;E[2].count=30;E[2].state='F';E[3].seq=4;E[3].state='E';E[4].seq=5;E[4].state='E';P.ZhuNum=200;//柱面數(shù)為200P.LapNum=20;〃磁道數(shù)為20P.NoteNum=6;//物理記錄數(shù)為6}CCiPan::~CCiPan()(}voidCCiPan::CreateFile(EmptyE[],PanP)(intBlock;Emptye;inti,j,M;cout<<"請(qǐng)輸入所建立文件的記錄塊數(shù):〃;cin>>Block;for(i=0;i<N;i++)(if(i>=N-1&&E[i].count<Block)(//當(dāng)比較到最后一個(gè)未找到空閑塊大小符合所要分配的文件大小時(shí)cout<<"磁盤空間不足!"<<endl;}if(E[i].count>Block)(//當(dāng)文件大小小于磁盤空閑塊大小時(shí),只改變空閑表中起始?jí)K號(hào)與空閑塊個(gè)數(shù)M=E[i].start/P.NoteNum;P.ZhuSeq=M/P.ZhuNum;//計(jì)算柱面號(hào)P.LapSeq二M%P.ZhuNum;//計(jì)算磁道號(hào)P.NoteSeq=E[i].start%P.NoteNum;//計(jì)算物理記錄號(hào)E[i].start+=Block;//起始?jí)K號(hào)改變,增加量為文件大小E[i].count-二Block;〃空閑塊個(gè)數(shù),減少量為文件大小cout<<endl;cout<<"成功為文件分配了磁盤空間!"<<endl;cout<<〃為文件分配的物理地址為:〃<<endl;//顯示為文件分配的物理地址cout<<"柱面號(hào):"<<P.ZhuSeq<<endl;cout<<"磁道號(hào):"<<P.LapSeq<<endl;cout<<"物理記錄號(hào):"<<P.NoteSeq<<endl;break;}else(if(E[i].count==Block)(//文件大小與空閑塊號(hào)個(gè)數(shù)剛好相等M=E[i].start/P.NoteNum;P.ZhuSeq=M/P.ZhuNum;//計(jì)算柱面號(hào)P.LapSeq二M%P.ZhuNum;〃計(jì)算磁道號(hào)P.NoteSeq=E[i].start%P.NoteNum;//計(jì)算物理記錄號(hào)E[i].seq=N;〃將剛分配出去的空間序號(hào)改為最后一項(xiàng),等待將其插入到表末尾E[i].state='E';〃將狀態(tài)改為“空表目”cout<<endl;cout<<"成功為文件分配了磁盤空間!"<<endl;cout<<〃為文件分配的物理地址為:〃<<endl;//顯示為文件分配的物理地址cout<<"柱面號(hào):"<<P.ZhuSeq<<endl;cout<<"磁道號(hào):"<<P.LapSeq<<endl;cout<<"物理記錄號(hào):"<<P.NoteSeq<<endl;e=E[i];//記錄下剛分配出去的空閑塊j=i;for(i=j;i<N;i++)(//將狀態(tài)為“空表目”的一項(xiàng)插入到表末尾E[i]=E[i+1];--E[i].seq;〃向前移一項(xiàng),序號(hào)減1E[N-1]=e;}break;}}}}voidCCiPan::DeleteFile(EmptyE[],PanP)(inti,j,m,k,n;Emptye,y;cout<<"請(qǐng)輸入柱面號(hào):〃;cin>>P.ZhuSeq;cout<<"請(qǐng)輸入磁道號(hào):〃;cin>>P.LapSeq;cout<<"請(qǐng)輸入物理記錄號(hào):〃;cin>>P.NoteSeq;cout<<"請(qǐng)輸入塊號(hào):〃;cin>>m;for(i=0;i<N;i++)(if(E[i].state=='E')(E[i].start=(P.ZhuSeq*P.LapNum+P.LapSeq)*P.NoteNum+P.NoteSeq;//計(jì)算起始?jí)K號(hào)E[i].count=m;//計(jì)算空閑塊個(gè)數(shù)E[i].state='F';//回收后將狀態(tài)改為“未分配”y=E[i];for(j=0;j<i;j++)if(E[j].start+E[j].count==E[i].start)//上臨{if(E[i].start+E[i].count==E[j+l].start)//既上臨又下臨{E[j].count=E[i].count+E[j].count+E[j+l].count;E[j+1].count二’’;E[j+1].start=,';E[j+1].state二'E';E[j+1].seq=N;E[i].start=,';E[i].count二'';E[i].state二'E';cout<</z既上臨又下臨/z<<endl:cout?/z回收文件后的起始?jí)K號(hào)為:〃空閑塊個(gè)數(shù)為:〃<<E[j].count<<endl:e=E[j+l];k=j+l;for(n=k;n<N;n++){//將狀態(tài)為“空表目”的一項(xiàng)插入到表末尾E[n]=E[n+1];—E[n],seq;〃向前移一項(xiàng),序號(hào)減1E[N-l]=e;else//只上臨{E[j].count+=E[i].count:E[i].start=,';E[i].count二'';E[i].state二'E';cout<〈〃只上臨〃〈<endl;cout?/z回收文件后的起始?jí)K號(hào)為:〃空閑塊個(gè)數(shù)為:〃<<E[j].count<<endl:else{if(E[i].start+E[i].count==E[j+l].start)//只下臨{E[j+1].count+=E[i].count;E[j+1].start=E[i].start:E[i].start=’’;E[i].count='';E[i].state='E';cout<<〃只下臨"<<endl;cout<<"回收文件后的起始?jí)K號(hào)為:〃<<E[j+1].start<<〃空閑塊個(gè)數(shù)為:"<<E[j+1].count<<endl;}else//都不臨(if(E[i].start>E[j].start&&E[i].start<E[j+1].start)(cout<<"既不上臨又不下臨"<<endl;cout<<"回收文件后的起始?jí)K號(hào)為:〃<<E[i].start<<〃空閑塊個(gè)數(shù)為:"<<E[i].count<<endl;for(intt=i;t>j+1;t--)//(E[t]=E[t-1];E[t].seq++;}E[j+1]=y;}else(if(E[i].start==E[j+1].start)(E[j+1].start=E[i].start;E[j+1].count=E[i].count;E[j+1].state=E[i].state;cout<<"既不上臨又不下臨"<<endl;cout<<"回收文件后的起始?jí)K號(hào)為:〃<<E[i].start<<〃空閑塊個(gè)數(shù)為:"<<E[i].count<<endl;}}}}}break;}}}voidCCiPan::Display(EmptyE[])(inti;cout<<"序號(hào)\t〃<<〃起始空閑塊號(hào)\t〃<<〃空閑塊個(gè)數(shù)\t〃<<〃狀態(tài)〃<<endl;for(i=0;i<N;i++

溫馨提示

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

評(píng)論

0/150

提交評(píng)論