已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
浙江工業(yè)大學(xué)計(jì)算機(jī)學(xué)院模擬Unix文件系統(tǒng)實(shí) 驗(yàn) 報(bào) 告姓 名 傅攀 學(xué) 號(hào) 201426810803 班 級(jí) 計(jì)自1402 教 師 李波 22目錄一、 實(shí)驗(yàn)介紹1二、 實(shí)驗(yàn)環(huán)境3三、 實(shí)驗(yàn)設(shè)計(jì)31.文件系統(tǒng)的磁盤結(jié)構(gòu)的設(shè)計(jì)32.如何表示目錄33.如何表示文件44.關(guān)于超級(jí)塊55.空閑盤塊和空閑索引節(jié)點(diǎn)管理5四、 數(shù)據(jù)結(jié)構(gòu)61.基本數(shù)據(jù)結(jié)構(gòu)62.超級(jí)塊SuperBlock63.索引節(jié)點(diǎn) DINode74.目錄及目錄項(xiàng)Dentry、DentryTable85.其他數(shù)據(jù)結(jié)構(gòu)9五、 模塊詳解101.目錄查找模塊102.文件創(chuàng)建模塊113.目錄創(chuàng)建模塊134.文件或目錄刪除模塊135.文件讀取模塊14六、 實(shí)驗(yàn)演示156.實(shí)驗(yàn)完成功能列表157.各功能合并展示15七、 實(shí)驗(yàn)總結(jié)211.問題與解決212.實(shí)驗(yàn)體會(huì)22一、 實(shí)驗(yàn)介紹本次實(shí)驗(yàn)要求完成一個(gè) UNIX文件系統(tǒng)的子集的模擬實(shí)現(xiàn)。即通過文件模擬磁盤,在該“磁盤”上通過模擬UNIX文件系統(tǒng)創(chuàng)建文件、分配磁盤塊的方式實(shí)現(xiàn)一個(gè)模擬的UNIX文件系統(tǒng)的子集。它可以完成文件或目錄的創(chuàng)建、拷貝、修改、重命名等一系列操作。主要目的是學(xué)習(xí)操作系統(tǒng)是如何在磁盤上創(chuàng)建一個(gè)文件的,如何控制文件類型及權(quán)限的,并學(xué)習(xí)相關(guān)的一些數(shù)據(jù)結(jié)構(gòu)及其作用,了解掌握成組鏈接法等一些資源相關(guān)管理辦法。下面是實(shí)驗(yàn)具體要求與預(yù)期功能:(1) 文件卷結(jié)構(gòu)設(shè)計(jì)l 盤塊管理采用成組鏈接法。l 0#塊可省略l I節(jié)點(diǎn)棧及空間為20項(xiàng)l 塊大小為512字節(jié)l 卷盤塊數(shù)大于100l I節(jié)點(diǎn)盤塊數(shù)大于10塊(2) I節(jié)點(diǎn)結(jié)構(gòu)設(shè)計(jì)l 文件大小l 文件聯(lián)接計(jì)數(shù)l 文件地址l 文件擁有者l 文件所屬組l 文件權(quán)限及類別l 文件最后修改時(shí)間l 其中文件地址為六項(xiàng):四個(gè)直接塊號(hào),一個(gè)一次間址,一個(gè)兩次間址(3) 目錄結(jié)構(gòu)l 用16字節(jié)表示,其中14字節(jié)為文件名,2字節(jié)為I節(jié)點(diǎn)號(hào)(4) 用戶及組結(jié)構(gòu)l 用戶信息中包括用戶名、口令,所屬組,用戶打開文件表(文件樹結(jié)構(gòu)應(yīng)與用戶相對(duì)應(yīng):有每個(gè)用戶的HOME目錄)組信息中可只包含組名(5) 文件樹結(jié)構(gòu)l 除(4)要求外,適當(dāng)考慮UNIX本身文件樹結(jié)構(gòu)(6) 實(shí)現(xiàn)功能l ls顯示文件目錄l chmod改變文件權(quán)限l chown改變文件擁有者l chgrp改變文件所屬組l pwd顯示當(dāng)前目錄l cd改變當(dāng)前目錄l mkdir創(chuàng)建子目錄l rmdir刪除子目錄l mv改變文件名l cp文件拷貝l rm文件刪除l ln 建立文件聯(lián)接l cat連接顯示文件內(nèi)容l passwd修改用戶口令(7) 可考慮構(gòu)造一個(gè)簡(jiǎn)單的編輯器,用于創(chuàng)建文件根據(jù)上述實(shí)驗(yàn)要求明確開發(fā)目標(biāo),預(yù)期實(shí)現(xiàn)上述所有功能,但函數(shù)具體功能與Unix系統(tǒng)功能可能存在差異。爭(zhēng)取完成實(shí)驗(yàn)要求的功能(或簡(jiǎn)單或復(fù)雜)。由于所給實(shí)驗(yàn)要求較高,所以要實(shí)現(xiàn)這樣的功能所需的代碼量肯定很大,邏輯也不簡(jiǎn)單,所以在編寫代碼的時(shí)候采用整體思路是逐層次編寫,比如先寫最底層的塊分配等操作,最后編寫文件操作等,然后功能逐個(gè)添加,包括權(quán)限控制等方面。二、 實(shí)驗(yàn)環(huán)境本次實(shí)驗(yàn)的開發(fā)環(huán)境信息如下:l 操作系統(tǒng):Window 10 專業(yè)版 64位操作系統(tǒng)l 開發(fā)環(huán)境:Microsoft Visual Studio Community 2013l 開發(fā)語(yǔ)言:C+l 程序類型:Win32 控制臺(tái)應(yīng)用程序三、 實(shí)驗(yàn)設(shè)計(jì)1. 文件系統(tǒng)的磁盤結(jié)構(gòu)的設(shè)計(jì)現(xiàn)在已知,磁盤的第0塊為系統(tǒng)的引導(dǎo)塊,一般用于系統(tǒng)引導(dǎo)或空閑。第1塊為超級(jí)塊,用于存放文件卷的資源管理信息,包括整個(gè)文件卷的盤塊數(shù)、磁盤索引結(jié)點(diǎn)的盤塊數(shù)、空閑盤塊號(hào)棧和空閑盤塊號(hào)棧指針、空閑盤塊號(hào)棧鎖、空閑索引結(jié)點(diǎn)棧和空閑索引結(jié)點(diǎn)棧指針、空閑索引結(jié)點(diǎn)棧鎖等。從第2塊起存放磁盤索引結(jié)點(diǎn),直到第K塊。從第K+1塊起及其以后各塊,都存放文件數(shù)據(jù),直到文件卷的最后一塊。所以磁盤結(jié)構(gòu)如下:圖1 文件系統(tǒng)磁盤邏輯結(jié)構(gòu)本次實(shí)驗(yàn)中要通過文件來模擬磁盤,那么對(duì)應(yīng)的文件所需的數(shù)據(jù)結(jié)構(gòu)宏觀上看可以是連續(xù)的block128。至于詳細(xì)的數(shù)據(jù)結(jié)構(gòu)如何和對(duì)應(yīng)到塊呢,這個(gè)只需要使用對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)的類型指針指向?qū)?yīng)位置那么內(nèi)部指針自然就對(duì)齊了。2. 如何表示目錄提到目錄那么必須清楚兩個(gè)概念目錄文件和目錄項(xiàng)。目錄其實(shí)對(duì)應(yīng)著一個(gè)文件也就是目錄文件,而目錄文件又是有目錄項(xiàng)組成的好比目錄文件是一張表,目錄項(xiàng)是一個(gè)一個(gè)的表項(xiàng)。而目錄項(xiàng)對(duì)應(yīng)著一個(gè)文件,要是這個(gè)文件是目錄文件(就是前面提到的那張表)那這個(gè)目錄項(xiàng)就是一個(gè)目錄,否則它就是文件。這個(gè)問題用文字還是比較難以表達(dá)的,還是用圖來說明吧。圖2 目錄文件與目錄項(xiàng)可以發(fā)現(xiàn)目錄項(xiàng)與目錄文件存在相互依賴關(guān)系,目錄項(xiàng)指向目錄文件,目錄文件又包含目錄項(xiàng)。那么最初的目錄怎么知道呢?所以就需要一個(gè)根目錄項(xiàng)“/”,而這個(gè)目錄項(xiàng)就應(yīng)當(dāng)存儲(chǔ)在超級(jí)塊中。3. 如何表示文件如何表示目錄只是抽象的描述了一下目錄的結(jié)構(gòu),可以發(fā)現(xiàn)創(chuàng)建目錄的過程其實(shí)已經(jīng)包含了創(chuàng)建文件,比如建立一個(gè)目錄(或者說是文件夾)A,那么就必須創(chuàng)建一個(gè)目錄文件。那么文件又是如何表示的呢?在我們的印象中,文件是由文件名和文件內(nèi)容即文件數(shù)據(jù)組成的。那么在磁盤中文件是如表示、存儲(chǔ)的呢?在圖2中我們可以看到目錄項(xiàng)C指向了一個(gè)普通文件,其實(shí)僅憑目錄項(xiàng)是無法直接定位出磁盤中的文件數(shù)據(jù)的,但是目錄項(xiàng)C中存儲(chǔ)了文件名和可以指向文件的數(shù)據(jù)信息。依然是用一張圖來說明這個(gè)問題。圖3 根據(jù)目錄項(xiàng)取出文件4. 關(guān)于超級(jí)塊上面抽象的介紹了一些結(jié)構(gòu),下面細(xì)化介紹一下超級(jí)塊內(nèi)的主要數(shù)據(jù)及其功能。首先,對(duì)于磁盤這種存儲(chǔ)介質(zhì),我們可以根據(jù)默認(rèn)約定“第0塊是引導(dǎo)塊,第1塊是超級(jí)塊”定位讀取相關(guān)信息。但是不同的磁盤大小有所不同,那么索引節(jié)點(diǎn)個(gè)數(shù)與空閑盤塊個(gè)數(shù)就有所不同,而這些又是文件系統(tǒng)所必須的數(shù)據(jù),還有根目錄信息等。所以這些信息都必須存在于超級(jí)塊中。本次實(shí)驗(yàn)中簡(jiǎn)化了超級(jí)塊的結(jié)構(gòu)去除了超級(jí)塊鎖、設(shè)備信息等數(shù)據(jù),保留磁盤塊信息及索引節(jié)點(diǎn)信息。主要是存儲(chǔ)空閑塊棧和空閑索引節(jié)點(diǎn)棧,以及根目錄。這些數(shù)據(jù)或者說空間在文件系統(tǒng)中起著非常重要的作用。5. 空閑盤塊和空閑索引節(jié)點(diǎn)管理下面介紹超級(jí)塊中兩棧的管理方式,首先是空閑盤塊棧。空閑盤塊棧的管理方式是成組鏈接法,用于管理磁盤中可用的盤塊包括使用與回收。圖4 成組鏈接法管理空閑盤塊棧上圖是個(gè)人對(duì)成組鏈接法管理磁盤塊的理解,當(dāng)棧滿時(shí)仍有塊號(hào)要壓入時(shí)則將當(dāng)前站內(nèi)所有數(shù)據(jù)拷貝到即將入棧的盤塊號(hào)對(duì)應(yīng)的盤塊中,隨后將棧指針重置,塊號(hào)入棧。當(dāng)棧底盤塊號(hào)彈出時(shí),則將該盤塊號(hào)對(duì)應(yīng)的盤塊中的數(shù)據(jù)取出填入棧中,并將棧指針置于棧頂。當(dāng)創(chuàng)建或刪除文件時(shí)只需要重棧中彈出或向棧中壓入盤塊號(hào)即可??臻e索引節(jié)點(diǎn)棧的管理與空閑盤塊的管理有所不同,空閑索引節(jié)點(diǎn)棧在初始化完畢后,一般只有出棧的情況,當(dāng)??諘r(shí),則從索引節(jié)點(diǎn)區(qū)取出相應(yīng)個(gè)數(shù)的空閑索引節(jié)點(diǎn)號(hào)(根據(jù)索引節(jié)點(diǎn)內(nèi)的引用計(jì)數(shù)判斷該節(jié)點(diǎn)是否空閑)。四、 數(shù)據(jù)結(jié)構(gòu)1. 基本數(shù)據(jù)結(jié)構(gòu)首先介紹一些基本的數(shù)據(jù)結(jié)構(gòu):struct BlockBYTE byte512;struct MyFileSystemBlock block128;typedef unsigned short INodeIndex;/i節(jié)點(diǎn)索引號(hào) 16位typedef unsigned short BlockIndex;/塊號(hào)16位Block代表盤塊由512個(gè)字節(jié)組成,而MyFileSystem代表整個(gè)磁盤共128塊,所以整個(gè)模擬文件占64KB。2. 超級(jí)塊SuperBlock超級(jí)塊數(shù)據(jù)結(jié)構(gòu)如下:struct SuperBlockBlockIndex dataBlockIndex;/數(shù)據(jù)區(qū)第一個(gè)盤塊號(hào) 12 inode占10塊BlockIndex sizeOfBlocks;/盤塊數(shù)INodeIndex stackOfINode20;/空閑INode棧BlockIndex stackOfBlock50;/空閑block棧BYTE blockStackPointer;/block棧指針BYTE iNodeStackPointer;/iNode棧指針BlockIndex freeBlocksNum;/當(dāng)前空閑block總數(shù)INodeIndex freeINodesNum;/當(dāng)前空閑Inode總數(shù)Dentry root;/根目錄信息BYTE fill344;/填充至512byte;其中stackOfINode20即空閑索引節(jié)點(diǎn)棧,對(duì)應(yīng)棧指針iNodeStackPointer,棧大小為20。stackOfBlock50即空閑盤塊棧,對(duì)應(yīng)棧指針blockStackPointer,棧大小50。根目錄項(xiàng)Dentry root表示保存根目錄信息。3. 索引節(jié)點(diǎn) DINode又一個(gè)至為重要的結(jié)構(gòu)索引節(jié)點(diǎn),起著文件控制的作用,包括文件類型與用戶權(quán)限等。其中INode還管理著文件數(shù)據(jù)所在盤塊。/i節(jié)點(diǎn) 64bytestruct DINodeunsigned short mode; /文件類型及訪問權(quán)限標(biāo)志unsigned short owner; / 文件擁有者的用戶標(biāo)識(shí)unsigned short group; / 文件擁有者的組標(biāo)識(shí)unsigned int linkCount;/硬連接計(jì)數(shù) 判斷INODE是否空閑unsigned int size;/ 文件大小BlockIndex blockCount; / 文件塊數(shù)unsigned int visitTime;/ 文件最近一次訪問時(shí)間unsigned int modifyTime; / 文件最近一次修改時(shí)間unsigned int createTime; / 文件創(chuàng)建時(shí)間BlockIndex directBlock4;BlockIndex singleIndirect;BlockIndex doubleIndirect;BYTE fill20;/保證iNode區(qū) iNode連續(xù)存放;這里要說明的主要是變量mode文件類型及訪問權(quán)限和變量linkCount。mode的作用有二,其一區(qū)分文件類型,是目錄文件還是可執(zhí)行文件或者是普通文件。再者mode保存了用戶的操作權(quán)限包括擁有者、同組用戶、其他用戶的讀、寫、執(zhí)行權(quán)限。本次實(shí)驗(yàn)中權(quán)限設(shè)置對(duì)應(yīng)關(guān)系如下,與實(shí)際Unix系統(tǒng)有所差異,而這次文件類型主要用到目錄類型與普通類型。圖5 mode各位含意然后linkCount,也就是硬鏈接數(shù)。在系統(tǒng)中可以創(chuàng)建多個(gè)硬鏈接,也就是多個(gè)目錄項(xiàng)對(duì)應(yīng)同一個(gè)INode。INode中含有記錄實(shí)際數(shù)據(jù)塊的存儲(chǔ)位置的信息,所以通過上述任意一個(gè)文件名對(duì)INode的指向的數(shù)據(jù)塊進(jìn)行修改,都會(huì)對(duì)其他也會(huì)生效,因?yàn)樗鼈兪枪蚕磉@一個(gè)數(shù)據(jù)內(nèi)容的,所以創(chuàng)建新的硬鏈接也不會(huì)消耗實(shí)際的存儲(chǔ)空間。如果刪除文件,那INode會(huì)不會(huì)被釋放呢?那就需要看INode的linkCount的值了。當(dāng)鏈接數(shù)為0時(shí)就會(huì)被釋放,否則不會(huì)。directBlock4,4個(gè)直接地址,直接存放文件數(shù)據(jù)所在的磁盤塊號(hào)。singleIndirect一次間接地址,存放用于存放磁盤塊號(hào)的磁盤塊的塊號(hào),有些繞口。4. 目錄及目錄項(xiàng)Dentry、DentryTable/目錄項(xiàng) 用16字節(jié)表示,其中14字節(jié)為文件名,2字節(jié)為I節(jié)點(diǎn)號(hào)struct DentryINodeIndex inodeIndex;char name14;Dentry() inodeIndex = 0;Dentry(INodeIndex _index, string _name) inodeIndex = _index; strcpy(name, _name.c_str(); ;struct DentryTableint count;Dentry* head;DentryTable() count = 0; head = null; DentryTable() if (head != null&count!=0)delete head; ;Dentry即之前提到的目錄項(xiàng)結(jié)構(gòu),包含目錄名或文件名以及對(duì)應(yīng)文件的INode的索引號(hào)。同時(shí)Dentry是文件系統(tǒng)按名存取的關(guān)鍵結(jié)構(gòu),定位文件的關(guān)鍵都是找出Dentry然后定位INode及數(shù)據(jù)。DentryTable這個(gè)是抽象出來的目錄文件結(jié)構(gòu),當(dāng)然在存儲(chǔ)的時(shí)候head指針對(duì)應(yīng)的數(shù)據(jù)區(qū)會(huì)緊跟count(目錄項(xiàng)個(gè)數(shù))。5. 其他數(shù)據(jù)結(jié)構(gòu)然后還有一些其他數(shù)據(jù)結(jié)構(gòu),下面簡(jiǎn)單介紹一下。/下一組空閑盤塊 大小為一個(gè)blockstruct BlockIndexTabBlockIndex blockIndex50;BYTE fill412; ;struct singleIndirectBlockBlockIndex addr256;struct myFileint size;BYTE* head;myFile() size = 0; head = null; myFile() if (head != null&size!=0)deletehead; ;struct Userunsigned short uid;unsigned short ugroup;char name20;char pwd20;void initUser(unsigned short _uid, unsigned short _ugroup, string _name, string _pwd)uid = _uid;ugroup = _ugroup;strcpy(name, _name.c_str();strcpy(pwd, _pwd.c_str();struct UserTabint count;User * user;UserTab() if (user != null&count != 0) delete user; ;其中BlockIndexTab用于成組鏈接法保存一組空閑塊棧內(nèi)容,singleIndirectBlock一次間接地址塊,這些結(jié)構(gòu)都是為了快速定位或存儲(chǔ)內(nèi)容。然后myFile作為一個(gè)起著類似接口作用的數(shù)據(jù)結(jié)構(gòu),在進(jìn)行“磁盤”存儲(chǔ)文件時(shí)所有的“文件”都通過函數(shù)轉(zhuǎn)成myFile類型進(jìn)行數(shù)據(jù)塊分配。從INode獲取文件時(shí)的到的也都是myFile類型的文件,隨后轉(zhuǎn)換成對(duì)應(yīng)類型的文件。最后User結(jié)構(gòu)和UserTab結(jié)構(gòu)分別表示用戶和用戶表。五、 模塊詳解該部分介紹幾個(gè)主要模塊的執(zhí)行流程,其實(shí)各個(gè)模塊之間的依賴程度還是蠻高的,在各個(gè)模塊介紹時(shí)需要假定某個(gè)功能已經(jīng)實(shí)現(xiàn),就是這種情況“目錄查找需要建立在文件讀取功能之上,文件讀取又需要在文件創(chuàng)建之后,而創(chuàng)建文件又需要目錄查找的功能”。1. 目錄查找模塊目錄查找就是操作目錄文件和目錄項(xiàng),最終目的是定位出目標(biāo)目錄的目錄項(xiàng)。尋找過程大致如下:獲取尋找目標(biāo)路徑,比如“/A/B”;判斷是否是絕對(duì)路徑,是;將當(dāng)前尋找目錄設(shè)為根目錄/;截取外層目錄“A”,目標(biāo)路徑變?yōu)椤癇”;在根目錄下查找A目錄項(xiàng);若找到這將當(dāng)前尋找目錄設(shè)為“A”,繼續(xù)尋找“B”。而在一個(gè)目錄中尋找目錄的過程實(shí)際上是根據(jù)目錄項(xiàng)A的索引節(jié)點(diǎn)號(hào)尋找索引節(jié)點(diǎn),并加載文件,隨后在文件中查找目標(biāo)名稱的目錄項(xiàng)“B”。而根據(jù)目錄項(xiàng)對(duì)應(yīng)索引節(jié)點(diǎn)加載文件的過程在后面將詳細(xì)描述。而在目錄文件中查找目標(biāo)目錄項(xiàng)的過程是一個(gè)遍歷的過程,從前往后逐個(gè)比對(duì)名稱,若找到目標(biāo)目錄項(xiàng)則介紹查找,否則繼續(xù)查找直至最后一個(gè)目錄項(xiàng)。隨后返回結(jié)果。下面給出目錄查找流程圖:圖6 目錄查找流程圖2. 文件創(chuàng)建模塊文件創(chuàng)建功能建立在目錄尋找之后,根據(jù)輸入的父級(jí)目錄、文件名、文件數(shù)據(jù)分配或修改目錄項(xiàng)、索引節(jié)點(diǎn)、空閑盤塊。比如在A目錄下創(chuàng)建文件C(A目錄下原本沒有C),首先定位到目錄項(xiàng)A,創(chuàng)建新的目錄項(xiàng)C,并分配空閑索引節(jié)點(diǎn),將索引節(jié)點(diǎn)號(hào)寫入目錄項(xiàng)C。根據(jù)目錄項(xiàng)A,載入A對(duì)應(yīng)的目錄文件,修改目錄文件內(nèi)容后重新寫會(huì)對(duì)應(yīng)文件,即重新為A對(duì)應(yīng)的INode分配磁盤塊。然后為C對(duì)應(yīng)的索引節(jié)點(diǎn)分配空閑盤塊,隨后將數(shù)據(jù)寫入盤塊。下面是文件創(chuàng)建過程簡(jiǎn)單流程圖:圖7 文件創(chuàng)建簡(jiǎn)單流程圖3. 目錄創(chuàng)建模塊目錄創(chuàng)建模塊實(shí)際上與文件創(chuàng)建過程一樣,只不過創(chuàng)建的文件的數(shù)據(jù)是一個(gè)目錄文件。下面描述如何創(chuàng)建一個(gè)目錄文件,比如在“/A/”目錄下創(chuàng)建目錄B,首先獲取父級(jí)目錄項(xiàng)A,取出其索引節(jié)點(diǎn)號(hào)A_index。隨后創(chuàng)建目錄項(xiàng)B并分配空閑索引節(jié)點(diǎn),節(jié)點(diǎn)號(hào)B_index。然后創(chuàng)建另外兩個(gè)目錄項(xiàng)“.”,“.”它們的索引號(hào)分別為B_index和A_index,隨后將這兩個(gè)目錄項(xiàng)組成目錄表文件。最后將目錄項(xiàng)B寫入A的目錄文件中,將B的目錄文件分配到其索引節(jié)點(diǎn)對(duì)應(yīng)的磁盤塊中。4. 文件或目錄刪除模塊文件的刪除過程和目錄的刪除過程可以合并,只不過目錄的刪除過程更為復(fù)雜,需要遞歸將其下的目錄或文件刪除。刪除一個(gè)文件(硬鏈接為1的)實(shí)際上是刪除它所在的父目錄的目錄文件中的目錄項(xiàng),釋放目錄項(xiàng)對(duì)應(yīng)的索引節(jié)點(diǎn)(重置索引節(jié)點(diǎn)硬鏈接數(shù)),然后釋放索引節(jié)點(diǎn)中指向的數(shù)據(jù)盤塊號(hào)(盤塊號(hào)入空閑盤塊號(hào)棧)。還是舉例說明,刪除“/A/B”(假設(shè)存在),獲取父目錄“/A/”及目標(biāo)名稱“B”,找到“/A/”對(duì)應(yīng)的索引節(jié)點(diǎn)判斷是否有權(quán)限操作目錄A,假設(shè)有,找到A對(duì)應(yīng)目錄文件中的目錄項(xiàng)B,將其在A目錄文件中除去。判斷目錄項(xiàng)B對(duì)應(yīng)索引節(jié)點(diǎn)硬鏈接數(shù)是否為1,若不是則無需釋放索引節(jié)點(diǎn),只需將索引節(jié)點(diǎn)中鏈接數(shù)減一即可。若其硬鏈接數(shù)為1,則需釋放索引節(jié)點(diǎn)及其對(duì)應(yīng)的數(shù)據(jù)塊。此外還需判斷B是文件還是目錄,如果B是目錄,那還需要遞歸的向下釋放所有B下的目錄或文件。而目錄的最終直接釋放即遞歸終止條件是目錄對(duì)應(yīng)的目錄文件下只包含“.”、“.”兩個(gè)目錄項(xiàng)。下面是刪除文件的大致過程:圖8 刪除文件大致過程5. 文件讀取模塊對(duì)于文件讀取,顯然需要先找到對(duì)應(yīng)文件的目錄項(xiàng),隨后定位其索引節(jié)點(diǎn),然后根據(jù)索引節(jié)點(diǎn)內(nèi)的信息(文件大小、文件占用盤塊數(shù)、文件對(duì)應(yīng)盤塊號(hào)),進(jìn)行文件數(shù)據(jù)拼接或者叫讀取。六、 實(shí)驗(yàn)演示6. 實(shí)驗(yàn)完成功能列表l 用戶及權(quán)限控制l 顯示目錄下文件或目錄l 改變文件權(quán)限l 改變文件擁有者或所屬組l 顯示、改變當(dāng)前目錄l 創(chuàng)建子目錄l 刪除子目錄l 創(chuàng)建文件、修改文件l 改變文件或目錄名l 文件拷貝l 文件刪除l 建立硬鏈接l 顯示文件內(nèi)容l 修改用戶口令7. 各功能合并展示圖9 用戶登錄圖10 顯示當(dāng)前目錄下的文件、切換當(dāng)前目錄圖11 通過文件輸入在磁盤中創(chuàng)建文件圖12 文件創(chuàng)建成功、顯示文件內(nèi)容圖12 復(fù)制文件圖13 重命名及刪除文件圖14 建立文件硬鏈接圖15 創(chuàng)建子目錄、重名子目錄、修改目錄權(quán)限圖16 修改文件內(nèi)容圖17 權(quán)限控制圖18 系統(tǒng)所有命令七、 實(shí)驗(yàn)總結(jié)1. 問題與解決a) 去哪找根目錄?回顧一下整個(gè)開發(fā)過程中遇到的一些麻煩。從接到具體任務(wù)書后,在老師的將解下大致了解了磁盤結(jié)構(gòu)和成組鏈接法的這么一個(gè)概念。通過查閱各種博客或者文檔然后陪PPT發(fā)現(xiàn)成組鏈接法并不是很難。那么接下來就是實(shí)現(xiàn)老師提示過的以及任務(wù)書內(nèi)的數(shù)據(jù)結(jié)構(gòu)。在這部分前幾個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)并不是很難,因?yàn)檫@方面的博客也不少。很快便實(shí)現(xiàn)了SuperBlock 和DINode、Dentry、Block這些結(jié)構(gòu),但是問題就出現(xiàn)在這由于SuperBlock是參考其他資料的,很多資料里面都沒有提到SuperBlock里面有根目錄的信息,所以也不敢妄自添加或者因?yàn)樗季S定式就沒想過去添加。那么要實(shí)現(xiàn)按名存取,不知道根目錄怎么找,然后是各種百度,由于這問題描述也比較難,所以百度的結(jié)果不盡人意。一直尋找根目錄信息是如何獲取的方法,這個(gè)問題阻擋了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村土地承包經(jīng)營(yíng)權(quán)流轉(zhuǎn)與農(nóng)業(yè)科技創(chuàng)新與應(yīng)用合同
- 二零二五年度文化旅游合作協(xié)議樣本3篇
- 2025年度農(nóng)業(yè)農(nóng)機(jī)安全監(jiān)管與服務(wù)合同3篇
- 2025年度能源企業(yè)運(yùn)維檢修派遣服務(wù)合同模版3篇
- 二零二五年度高空作業(yè)安全事故處理與保障協(xié)議3篇
- 2025年度農(nóng)機(jī)購(gòu)置與農(nóng)業(yè)廢棄物資源化利用合同3篇
- 2025編號(hào)建設(shè)工程設(shè)計(jì)合同
- 二零二五年度公積金租房管理服務(wù)協(xié)議范本3篇
- 2025年度兼職協(xié)議書-電子商務(wù)平臺(tái)運(yùn)營(yíng)助手服務(wù)合同3篇
- 二零二五年度農(nóng)村山塘承包合同(水資源保護(hù)與農(nóng)業(yè)現(xiàn)代化)3篇
- 【合同范本】補(bǔ)充協(xié)議-面積差補(bǔ)款-預(yù)售版
- 鐵路工程-軌道工程施工工藝及方案
- 福建省福州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 《高中語(yǔ)文文言斷句》一等獎(jiǎng)優(yōu)秀課件
- 上海市中小學(xué)生學(xué)籍信息管理系統(tǒng)
- (完整版)自動(dòng)感應(yīng)門施工方案
- [QC成果]提高剪力墻施工質(zhì)量一次合格率
- 8站小車呼叫的plc控制
- _ 基本粒子與宏觀物體內(nèi)在聯(lián)系
- 象棋比賽積分編排表
- 小學(xué)贛美版六年級(jí)美術(shù)上冊(cè)第二十課向往和平課件(16張)ppt課件
評(píng)論
0/150
提交評(píng)論