




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
http://blog.163.eom/zhengjingwei1211@126/blog/static/6149928020108217422645/磁盤存儲空間的分配和回收(空閑表)#defineN5structEmpty//空閑表結(jié)構(gòu)體{intseq;//序號intstart;//起始塊號intcount;//空閑塊個數(shù)charstate;//狀態(tài),F(xiàn)為未分配,E為空表目};structPan//磁盤結(jié)構(gòu)體{intZhuSeq;//柱面號intLapSeq;//磁道號intNoteSeq;//物理記錄號intZhuNum;//柱面?zhèn)€數(shù)intLapNum;〃磁道個數(shù)intNoteNum;//物理記錄個數(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<<"請輸入所建立文件的記錄塊數(shù):〃;cin>>Block;for(i=0;i<N;i++)(if(i>=N-1&&E[i].count<Block)(//當(dāng)比較到最后一個未找到空閑塊大小符合所要分配的文件大小時cout<<"磁盤空間不足!"<<endl;}if(E[i].count>Block)(//當(dāng)文件大小小于磁盤空閑塊大小時,只改變空閑表中起始塊號與空閑塊個數(shù)M=E[i].start/P.NoteNum;P.ZhuSeq=M/P.ZhuNum;//計算柱面號P.LapSeq二M%P.ZhuNum;//計算磁道號P.NoteSeq=E[i].start%P.NoteNum;//計算物理記錄號E[i].start+=Block;//起始塊號改變,增加量為文件大小E[i].count-二Block;〃空閑塊個數(shù),減少量為文件大小cout<<endl;cout<<"成功為文件分配了磁盤空間!"<<endl;cout<<〃為文件分配的物理地址為:〃<<endl;//顯示為文件分配的物理地址cout<<"柱面號:"<<P.ZhuSeq<<endl;cout<<"磁道號:"<<P.LapSeq<<endl;cout<<"物理記錄號:"<<P.NoteSeq<<endl;break;}else(if(E[i].count==Block)(//文件大小與空閑塊號個數(shù)剛好相等M=E[i].start/P.NoteNum;P.ZhuSeq=M/P.ZhuNum;//計算柱面號P.LapSeq二M%P.ZhuNum;〃計算磁道號P.NoteSeq=E[i].start%P.NoteNum;//計算物理記錄號E[i].seq=N;〃將剛分配出去的空間序號改為最后一項,等待將其插入到表末尾E[i].state='E';〃將狀態(tài)改為“空表目”cout<<endl;cout<<"成功為文件分配了磁盤空間!"<<endl;cout<<〃為文件分配的物理地址為:〃<<endl;//顯示為文件分配的物理地址cout<<"柱面號:"<<P.ZhuSeq<<endl;cout<<"磁道號:"<<P.LapSeq<<endl;cout<<"物理記錄號:"<<P.NoteSeq<<endl;e=E[i];//記錄下剛分配出去的空閑塊j=i;for(i=j;i<N;i++)(//將狀態(tài)為“空表目”的一項插入到表末尾E[i]=E[i+1];--E[i].seq;〃向前移一項,序號減1E[N-1]=e;}break;}}}}voidCCiPan::DeleteFile(EmptyE[],PanP)(inti,j,m,k,n;Emptye,y;cout<<"請輸入柱面號:〃;cin>>P.ZhuSeq;cout<<"請輸入磁道號:〃;cin>>P.LapSeq;cout<<"請輸入物理記錄號:〃;cin>>P.NoteSeq;cout<<"請輸入塊號:〃;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;//計算起始塊號E[i].count=m;//計算空閑塊個數(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回收文件后的起始塊號為:〃空閑塊個數(shù)為:〃<<E[j].count<<endl:e=E[j+l];k=j+l;for(n=k;n<N;n++){//將狀態(tài)為“空表目”的一項插入到表末尾E[n]=E[n+1];—E[n],seq;〃向前移一項,序號減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回收文件后的起始塊號為:〃空閑塊個數(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<<"回收文件后的起始塊號為:〃<<E[j+1].start<<〃空閑塊個數(shù)為:"<<E[j+1].count<<endl;}else//都不臨(if(E[i].start>E[j].start&&E[i].start<E[j+1].start)(cout<<"既不上臨又不下臨"<<endl;cout<<"回收文件后的起始塊號為:〃<<E[i].start<<〃空閑塊個數(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<<"回收文件后的起始塊號為:〃<<E[i].start<<〃空閑塊個數(shù)為:"<<E[i].count<<endl;}}}}}break;}}}voidCCiPan::Display(EmptyE[])(inti;cout<<"序號\t〃<<〃起始空閑塊號\t〃<<〃空閑塊個數(shù)\t〃<<〃狀態(tài)〃<<endl;for(i=0;i<N;i++
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品設(shè)計與開發(fā)委托合同
- 生物學(xué)遺傳基因測試題庫及答案
- 公路運輸合同基本知識
- 嵌入式系統(tǒng)的數(shù)據(jù)采集技術(shù)試題及答案
- 公路工程安全施工知識考點試題及答案
- 中國石拱橋的試題及答案
- 理解數(shù)據(jù)處理的時間復(fù)雜度試題及答案
- 2025年礦山無人作業(yè)技術(shù)智能化安全防護(hù)技術(shù)研究報告
- 合同簽字協(xié)議書范本圖片
- 工業(yè)互聯(lián)網(wǎng)平臺數(shù)據(jù)庫融合技術(shù)2025年技術(shù)創(chuàng)新與產(chǎn)業(yè)應(yīng)用對接報告
- 配電箱巡檢表
- 風(fēng)洞試驗與強度驗證
- 3人股份協(xié)議書模板
- GB 20182-2024商用車駕駛室外部凸出物
- GB/T 24067-2024溫室氣體產(chǎn)品碳足跡量化要求和指南
- 2024年安徽省高考物理試卷(真題+答案)
- 陜2023TJ077 住宅廚房、衛(wèi)生間裝配式L型構(gòu)件排氣道系統(tǒng)圖集
- 紅色教育項目財務(wù)分析(3篇模板)
- 二手房買賣合同范本下載可打印
- 山東省煙臺市萊州市2023-2024學(xué)年八年級下學(xué)期期中數(shù)學(xué)試題
- 中國加速康復(fù)外科臨床實踐指南(2021)解讀
評論
0/150
提交評論