資源描述:
《nachos實(shí)驗(yàn)10設(shè)計(jì)并實(shí)現(xiàn)具有二級(jí)索引地文件資料系統(tǒng)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實(shí)用標(biāo)準(zhǔn)文案實(shí)驗(yàn)?zāi)康腘achos系統(tǒng)原有的文件系統(tǒng)只支持單級(jí)索引,最大能存取NumDirect*SectorSize的大小的文件,本次試驗(yàn)的目的:理解文件系統(tǒng)的組織結(jié)構(gòu)擴(kuò)展原有的文件系統(tǒng),設(shè)計(jì)并實(shí)現(xiàn)具有二級(jí)索引的文件系統(tǒng)。實(shí)驗(yàn)環(huán)境linux操作系統(tǒng),Nachos操作系統(tǒng)實(shí)驗(yàn)分析已知在文件頭的定義中描述了:#defineNumDirect((SectorSize-2*sizeof(int))/sizeof(int))為了說明方便,經(jīng)過實(shí)際計(jì)算,NumDirect=30.二級(jí)索引的文件系統(tǒng)的filehdr首先
2、,通過觀察Nachos原有的filehdr(即上圖左邊的部分),可知Nachos的單級(jí)索引的文件系統(tǒng)最大只支持存取29個(gè)扇區(qū)大小的文件。為了擴(kuò)展二級(jí)索引,取數(shù)組的最后一個(gè)dataSectors[29]作為存取新的dataSectors數(shù)組塊的索引,定義dataSectors[0]-dataSectors[28]存取數(shù)據(jù)所在的塊號(hào),dataSectors[29]==-1表示無二級(jí)索引塊,為正值表示二級(jí)索引dataSectors2所在的索引塊。當(dāng)文件超過原dataSectors數(shù)組所能能夠存取的大小28的時(shí)候
3、,通過bitmap為文件頭的dataSectors2分配空間,返回的Sector號(hào)存在dataSectors[29]中。fileSys每次讀取filehdr的時(shí)候,仍然只讀取原filehdr,如果想要訪問和修改dataSectors2中的內(nèi)容,則在filehdr中先通過dataSectors[29]獲取到dataSectors2的扇區(qū)號(hào),通過調(diào)用synchDisk->ReadSector(dataSectors[lastIndex],(char*)dataSectors2),讀入dataSectors2的
4、內(nèi)容,然后再進(jìn)行dataSectors數(shù)組29-62號(hào)所對(duì)應(yīng)的數(shù)據(jù)塊的讀取。因?yàn)楸敬螌?shí)驗(yàn)是在實(shí)驗(yàn)5的基礎(chǔ)上進(jìn)行更改的,即支持文件的擴(kuò)展,這就要求不僅要有讀取dataSectors2數(shù)組的方法,還要可以重新寫入dataSectors2的方法。實(shí)現(xiàn)方法也就是首先如果需要訪問dataSectors2,那么首先調(diào)用synchDisk->ReadSector(dataSectors[lastIndex],(char*)dataSectors2),讀入dataSectors2的內(nèi)容,然后進(jìn)行各種應(yīng)用程序的讀寫操作,最
5、后調(diào)用synchDisk->WriteSector(dataSectors[lastIndex],(char*)dataSectors2),將更改后的結(jié)果寫回。由分析可知,文件系統(tǒng)的二級(jí)索引功能的擴(kuò)展只針對(duì)filehdr,所有的修改的都只在filehdr.cc中進(jìn)行,連頭文件filehdr.h也不涉及。精彩文檔實(shí)用標(biāo)準(zhǔn)文案關(guān)鍵源代碼及注釋——filehdr.cc?????????????????????????????????????????????????????????????????????????
6、??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????在頭文件中添加dataSectors2的大小定義:#defineNumDirect2(SectorSize/sizeof(int))更改MaxFileSize:#defineMaxFileSize((NumDirect+NumDirect2)*SectorSize)
7、轉(zhuǎn)向filehdr.cc進(jìn)行說明,所有函數(shù)體中綠色部分均為本次實(shí)驗(yàn)的注釋(建議看Allocate和Deallocate就好了,其他的原理類似,appSectors涉及實(shí)驗(yàn)5的部分)://filehdr.cc//省略無數(shù)責(zé)任聲明////@LiZhen17/11/09////Extendsthefilesystemtodoublethemaxfilesizethat//Nachoscanstore#include"copyright.h"#include"system.h"#include"filehdr.h
8、"Allocate//----------------------------------------------------------------------//FileHeader::Allocate//Initializeafreshfileheaderforanewlycreatedfile.//Allocatedatablocksforthefileoutofthemapoffreediskblocks.//Ret