[原始碼和文件分享]基於UNIX V6++設計的二級檔案系統
一、課程設計基礎任務描述
為 LINUX 設計一個簡單的二級檔案系統。本實驗用某個大檔案,如 c:\myDisk.img , 儲存整個檔案卷中的所有資訊。一個檔案卷實際上就是一張邏輯磁塊盤,磁碟中儲存的資訊以塊為單位。每塊 512 位元組。 複習並深入領會 UNIX V6 檔案管理系統的核心設計思想。 要求做到以下幾點:
可以實現下列基礎 API void ls();
列目錄
Int fopen(char *name, int mode);
Void fclose(int fd); Int fread(int fd, char *buffer, int length);
Int fwrite(int fd, char *buffer, int length);
Int flseek(int fd, int position);
Int fcreat(char *name, int mode);
Int fdelete(char *name)
同時做到建立目錄,進入目錄等簡單的輔助功能,同樣對應三個 API:
Void mkdir(char* dirname);
Void cd(char* dirname);
Void backDir()
二、設計思想說明
2.1 任務分析
一個檔案系統從功能上劃分程式為四個部分:
-
第一部分是有關高速緩衝區的管理程式,主要實現了對硬碟等塊裝置進行資料高速存取的函式
-
第二部分程式碼描述了檔案系統的底層通用函式,說明了檔案索引節點的管理、磁碟資料塊的分配和釋放以及檔名與 i 節點的轉換演算法
-
第三部分程式是有關對檔案中資料進行讀寫操作,包括對字元裝置、管道、塊讀寫檔案中資料的訪問
-
第四部分的程式與檔案的系統呼叫介面的實現有關,主要涉及檔案開啟、關閉、建立以及有關檔案目錄操作等的系統呼叫
二級檔案系統不專門設計驅動程式,要模擬檔案系統的設計、實現和功能,就不能把它 直接作為作業系統實際的檔案系統進行掛接。鑑於此,我在實際的硬碟上建立一個檔案,把它作為我們的檔案系統的磁碟進行各種對磁碟的模擬操作,這樣做的好處是可以對它進行連 續操作,只要在退出檔案系統時,及時儲存它的狀態。
為了達到這樣的效果,能方便該“磁碟檔案”的操作,我們在實際的程式中呼叫 mmap 函式,將“磁碟檔案”對映到記憶體中,將對映到的大記憶體空間當作整個二級檔案系統的磁碟,直接對它進行操作。在退出或手動重新整理磁碟內容時,只需呼叫 msync 函式將該記憶體空間的值 重新寫入“磁碟檔案”中,這樣就儲存了本次執行的一系列操作,在下一次再進入二級檔案 系統時能夠繼續操作。
參考文件和完整的文件和原始碼下載地址: