版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗報告課程:操作系統(tǒng)班級:姓名:學(xué)號:成績:指導(dǎo)教師:實驗日期:實驗密級:預(yù)習(xí)程度:實驗時間:儀器組次:必修/選修:實驗序號:實驗名稱:UNIX磁盤空間管理算法實驗?zāi)康呐c要求:目的:掌握UNIX外存空間管理中的分組鏈接算法。要求:在程序運行的結(jié)果中應(yīng)包含磁盤塊的分配與回收操作。可根據(jù)輸入的文件名、文件大小進(jìn)行模擬磁盤分配,并在每次分配與回收后顯示分配與回收是否成功,以及分配、回收的磁盤塊號。在程序執(zhí)行過程中,至少應(yīng)包含分配不成功一次的信息??梢圆榭串?dāng)前磁盤塊的使用情況:哪些塊空閑,哪些塊被哪些文件占用。實驗儀器:名稱型號數(shù)量微機(jī)1實驗三UNIX磁盤空間管理算法一、實驗內(nèi)容編寫C語言程序,模擬UNIX磁盤空間管理中使用的分組鏈接法。定義一個記錄磁盤塊號的堆棧S—free[10],以及記錄棧中現(xiàn)有磁盤塊數(shù)的變量S—nfree。定義一個由40個元素構(gòu)成的結(jié)構(gòu)數(shù)組block[40]用作磁盤塊存放。structsize{intblocl[10];}structblocd{structsizea[10];〃用于在空閑磁盤塊號鏈中存放磁盤塊號}block[40];假設(shè)系統(tǒng)中文件的最大容量為100個磁盤塊,且最多只有5個文件,定義一個由5個元素構(gòu)成的結(jié)構(gòu)數(shù)組file[5]用于記錄各個文件占用的磁盤塊,。structFile{intfileblocd[100];〃用于記錄分別分配給文件的磁盤塊號}file[5];編寫函數(shù)init()完成空閑磁盤塊號堆棧、空閑磁盤塊號隊列及記錄文件占用磁盤塊狀態(tài)的file結(jié)構(gòu)數(shù)組。編寫函數(shù)alloc(fileno,blockd),完成磁盤塊的分配操作。其中的參數(shù)fileno為文件序號,用于指定需要分配的文件。編寫函數(shù)free(fileno),完成文件占用磁盤塊的釋放操作。其中的參數(shù)fileno為文件序號,用于指定需要釋放磁盤塊的文件。編寫main()函數(shù)完成下列操作:調(diào)用init()函數(shù)完成初始設(shè)置。從終端輸入命令,控制磁盤塊的分配與回收操作。二、實驗要求在程序運行的結(jié)果中應(yīng)包含磁盤塊的分配與回收操作??筛鶕?jù)輸入的文件名、文件大小進(jìn)行模擬磁盤分配,并在每次分配與回收后顯示分配與回收是否成功,以及分配、回收的磁盤塊號。在程序執(zhí)行過程中,至少應(yīng)包含分配不成功一次的信息??梢圆榭串?dāng)前磁盤塊的使用情況:哪些塊空閑,哪些塊被哪些文件占用。三、實驗思路成組鏈接法:按照題目要求,首先把文件存儲設(shè)備中的所有空閑快按每10塊分為一組,每組的第一塊用來存放前一組中各塊的塊號和總塊數(shù)。按照題目要求進(jìn)行分組之后,系統(tǒng)可根據(jù)申請者的要求進(jìn)行空閑塊的分配和回收。首先確定結(jié)構(gòu)體:1)用作磁盤塊存放的結(jié)構(gòu)數(shù)組:structsize{intblocl[10];}structblocd{structsizea[10];〃用于在空閑磁盤塊號鏈中存放磁盤塊號}block[40];每10塊為一組,分為40組。每塊中有10個空閑塊。2)各文件占用的磁盤塊結(jié)構(gòu)體:structfile{intfileblocd[100];intlength;}file[5];每個文件的最大容量是100個磁盤塊fileblocd[100],最多5個文件,length表示文件長度。確定全局變量:ints_free[10];〃記錄磁盤塊號的堆棧
〃記錄棧中現(xiàn)有磁盤塊數(shù)的變量〃分配或回收的文件號ints_nfree=〃記錄棧中現(xiàn)有磁盤塊數(shù)的變量〃分配或回收的文件號intn;intm;〃分配的文件大小intCurrent=39;〃表示當(dāng)前外存最后組號3.初始化函數(shù)init()在初始化時,需要記錄每組空閑塊的塊號,并且將最后一組空閑塊的塊號信息送入內(nèi)存數(shù)組s_free[10]中,因為分配時是從最后一組開始的。在此,我把每組的最后一塊的10個空間用來記錄這一組空閑塊的塊號,如第一組的最后一塊十個數(shù)0-9:block[1].a[9].blocl[0]=0,block[1].a[9].blocl[1]=1……block[1].a[9].blocl[9]=9分別表示這一組的十個空閑塊塊號是0-9。此外,在初始化時,還需要將文件塊號的數(shù)組清零:for(intq=0;q<=4;q++){〃文件塊號的數(shù)組清零for(intp=0;p<=99;p++){file[q].fileblocd[p]=0;}file[q].length=0;}完成之后,需要調(diào)整當(dāng)前外存最后組號和棧中現(xiàn)有的磁盤塊數(shù)。分配函數(shù)voidalloc(intm_alloc,intn_alloc),其中m_alloc為需要分配的塊數(shù),n_alloc為文件號:在分配時,按照后進(jìn)先出的原則,分配程序在取走s_nfree所指的塊號后,做s_nfree=s_nfree-1的操作。分配時以10個空閑塊為一組進(jìn)行分配,當(dāng)文件所需要的塊數(shù)不足10個時,直接分配,并將剩余的空閑塊保存在內(nèi)存堆棧中,以便于下次分配或釋放使用;當(dāng)文件所需要的塊數(shù)超過10個時,每分配完10個(s_nfree==-1時),再從外存中讀取10個空閑塊進(jìn)入內(nèi)存堆棧進(jìn)行分配,剩余部分保存在內(nèi)存堆棧中。具體實現(xiàn)如下:for(inti=0;i<m_alloc;i++){if(s_nfree==-1){for(intk=0;k<=9;k++){s_free[k]=block[Current].a[9].blocl[k];block[Current].a[9].blocl[k]=0;}Current--;s_nfree=9;}file[n_alloc].fileblocd[i]=s_free[s_nfree];s_nfree--;}回收函數(shù)free(intm_free,intn_free),其中m_free表示需要回收文件的長度,n_free表示需要回收的文件號:在回收空閑塊時,同樣利用文件管理堆棧進(jìn)行,首先將需要回收的空閑塊釋放到內(nèi)存堆棧中,把需要回收的物理塊號放入s_nfree+1的位置處,再做s_nfree++操作,當(dāng)內(nèi)存堆棧滿了之后(s_nfree==9時),表示回收結(jié)束,并將文件長度置為0。如果此時還有新的物理塊需要回收,將剛剛回收的10個塊號寫入外存中,然后將s_nfree置為-1,并將Current+1另起一個新堆棧。具體實現(xiàn)如下:for(inti=0;i<m_free;i++){if(s_nfree==9){Current++;for(intk=0;k<=9;k++){block[Current].a[9].blocl[k]=s_free[k];s_free[k]=0;}s_nfree=-1;}s_free[s_nfree+1]=file[n_free].fileblocd[i];printf("%d",file[n_free].fileblocd[i]);file[n_free].fileblocd[i]=0;s_nfree++;}
main()函數(shù):調(diào)用init()函數(shù)初始化,并設(shè)計目錄(分配、回收、查看、退出),控制磁盤的分配和回收,在此要注意防止用戶的非法輸入。四、運行結(jié)果
10211813415016618219821423024610211813415016618219821423024626227829431032639838210310410510610710810911011111211311411511611711912012112212312412512612712812913013113213313513613713813914014114214314414514614714814915115215315415515615?15815916016116216316416516?1681691701711721731741?517617?1?81?9180181183184185186187188189190191192193194195196197199200201202203204205206207208209210211212213215216217218219220221222223224225226227228229231232233234235236237238239240241242243244245247248249250251252253254255256257258259260261263264265266267268269270271272273274275276277279280281282283284285286287288289290291292293295296297298299300301302303304305306307308309311312313314315316317318319320321322323324325327328329330331332333334335336337338339340399397396395394393392391390389388387386385384383123456789101112131415161?181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666?6869707172737475767778798081828384858687888990919293949596979899100101381377內(nèi)存緩沖區(qū)中的空閑塊號:377380379378未分配空間的文件:芻分配空間的文件:t青選擇操作:1、分配2、回收L查看4、退出4Press己nykeytocontinue五、實驗體會通過這次實驗,我對外存空間管理的成組鏈接法有了更深刻的了解,充分掌握了成組鏈接法的工作原理,對于互斥操作也有了進(jìn)一步了解。附錄:#include<stdio.h>structsize{intblocl[10];};structblock{structsizea[10];}block[40];structfile{intfileblocd[100];intlength;}file[5];ints_free[10];ints_nfree=0;intn;intm;intCurrent=39;〃每個塊10個〃每組10個塊,共40組〃文件長度〃記錄磁盤塊號的堆?!ㄓ涗洍V鞋F(xiàn)有磁盤塊數(shù)的變量〃分配或回收的文件號〃分配的文件大小〃表示當(dāng)前外存最后組號voidinit();voidshow();voidalloc(intm_alloc,intn_alloc);voidfree(intm_free,intn_free);//初始化函數(shù)for(inti=0;i<=39;i++){〃將每組的塊號放到最后一塊的10個數(shù)中for(intk=0;k<=9;k++){block[i].a[9].blocl[k]=i*10+k;}}for(intq=0;q<=4;q++){〃文件塊號的數(shù)組清零for(intp=0;p<=99;p++){file[q].fileblocd[p]=0;}file[q].length=0;}for(intb=0;b<=9;b++){〃將最后一組的信息送入內(nèi)存s_free[b]=block[Current].a[9].blocl[b];block[Current].a[9].blocl[b]=0;}Current--;s_nfree=9;}voidshow()〃查看{intb=0;printf("\n外存的空閑塊號為:\n");if(s_nfree==-1)Current--;for(inti=0;i<=Current;i++){for(intk=0;k<=9;k++){if(block[b].a[9].blocl[1]!=0)printf("%d",block[i].a[9].blocl[k]);elsegotonext;}}next:printf("\n內(nèi)存緩沖區(qū)中的空閑塊號:\n");if(s_nfree==-1){Current++;for(intq=0;q<=9;q++)printf("%d",block[Current].a[9].blocl[q]);}elsefor(intq=0;q<=s_nfree;q++)printf("%d",s_free[q]);printf("\n未分配空間的文件:\n");for(intp=0;p<=4;p++){if(file[p].length==0)printf("%d",p);}printf("\n已分配空間的文件:\n");for(intq=0;q<=4;q++){if(file[q].length!=0)printf("%d",q);}printf("\n");}voidalloc(intm_alloc,intn_alloc)〃分配函數(shù){file[n_alloc].length=m_alloc;if(m_alloc>=Current*10-1+s_nfree)printf("外存空間不足山");else{for(inti=0;i<m_alloc;i++){if(s_nfree==-1){for(intk=0;k<=9;k++){s_free[k]=block[Current].a[9].blocl[k];block[Current].a[9].blocl[k]=0;}Current--;s_nfree=9;}file[n_alloc].fileblocd[i]=s_free[s_nfree];s_nfree--;}printf("文件%d分配的塊號:\n”,n_alloc);for(intq=0;q<m_alloc;q++)printf("%d",file[n_alloc].fileblocd[q]);printf("\n文件分配成功!\n");}}voidfree(intm_free,intn_free)〃回收函數(shù){printf("文件%d釋放的塊號:\n",n_free);for(inti=0;i<m_free;i++){if(s_nfree==9){Current++;for(intk=0;k<=9;k++){block[Current].a[9].blocl[k]=s_free[k];s_free[k]=0;}s_nfree=-1;}s_free[s_nfree+1]=file[n_free].fileblocd[i];printf("%d",file[n_free].fileblocd[i]);file[n_free].fileblocd[i]=0;s_nfree++;}printf("\n文件釋放成功!\n");file[n_free].length=0;}intmain(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈室內(nèi)課程設(shè)計
- 二零二五年辣椒深加工副產(chǎn)品回收利用合同3篇
- 二零二五版智能廣告牌安裝及運營服務(wù)合同3篇
- 2025年旅游景區(qū)停車場地租賃與導(dǎo)游服務(wù)合同3篇
- 2025年新型廠房水電安裝與綠色照明工程合同4篇
- 二零二五年鋼筋市場調(diào)研與營銷服務(wù)合同2篇
- 二零二五年度企業(yè)員工股權(quán)參與計劃合作協(xié)議3篇
- 二零二五年度科研基地場地租賃與科技成果轉(zhuǎn)化合同2篇
- 第一單元活動1、社會實踐與社區(qū)服務(wù)背景及方案 說課稿 2023-2024學(xué)年粵教版《綜合實踐活動》八年級001
- 二零二五年度軟件開發(fā)項目階段性成果驗收合同3篇
- 副總經(jīng)理招聘面試題與參考回答(某大型國企)2024年
- PDCA循環(huán)提高護(hù)士培訓(xùn)率
- 2024年工程咨詢服務(wù)承諾書
- 青桔單車保險合同條例
- 車輛使用不過戶免責(zé)協(xié)議書范文范本
- 《獅子王》電影賞析
- 2023-2024學(xué)年天津市部分區(qū)九年級(上)期末物理試卷
- DB13-T 5673-2023 公路自愈合瀝青混合料薄層超薄層罩面施工技術(shù)規(guī)范
- 河北省保定市定州市2025屆高二數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 哈爾濱研學(xué)旅行課程設(shè)計
- 2024 smart汽車品牌用戶社區(qū)運營全案
評論
0/150
提交評論