1. 程式人生 > >[原始碼和文件分享]基於UNIX V6++設計的二級檔案系統

[原始碼和文件分享]基於UNIX V6++設計的二級檔案系統

一、課程設計基礎任務描述

為 LINUX 設計一個簡單的二級檔案系統。本實驗用某個大檔案,如 c:\myDisk.img , 儲存整個檔案卷中的所有資訊。一個檔案卷實際上就是一張邏輯磁塊盤,磁碟中儲存的資訊以塊為單位。每塊 512 位元組。 複習並深入領會 UNIX V6 檔案管理系統的核心設計思想。 要求做到以下幾點:

可以實現下列基礎 API void ls();

列目錄

  1. Int fopen(char *name, int mode);
  2. Void fclose(int fd); Int fread(int fd, char *buffer, int length);
  3. Int fwrite(int fd, char *buffer, int length);
  4. Int flseek(int fd, int position);
  5. Int fcreat(char *name, int mode);
  6. Int fdelete(char *name)

同時做到建立目錄,進入目錄等簡單的輔助功能,同樣對應三個 API:

  1. Void mkdir(char* dirname);
  2. Void cd(char* dirname);
  3. Void backDir()

二、設計思想說明

2.1 任務分析

一個檔案系統從功能上劃分程式為四個部分:

  • 第一部分是有關高速緩衝區的管理程式,主要實現了對硬碟等塊裝置進行資料高速存取的函式

  • 第二部分程式碼描述了檔案系統的底層通用函式,說明了檔案索引節點的管理、磁碟資料塊的分配和釋放以及檔名與 i 節點的轉換演算法

  • 第三部分程式是有關對檔案中資料進行讀寫操作,包括對字元裝置、管道、塊讀寫檔案中資料的訪問

  • 第四部分的程式與檔案的系統呼叫介面的實現有關,主要涉及檔案開啟、關閉、建立以及有關檔案目錄操作等的系統呼叫

二級檔案系統不專門設計驅動程式,要模擬檔案系統的設計、實現和功能,就不能把它 直接作為作業系統實際的檔案系統進行掛接。鑑於此,我在實際的硬碟上建立一個檔案,把它作為我們的檔案系統的磁碟進行各種對磁碟的模擬操作,這樣做的好處是可以對它進行連 續操作,只要在退出檔案系統時,及時儲存它的狀態。

為了達到這樣的效果,能方便該“磁碟檔案”的操作,我們在實際的程式中呼叫 mmap 函式,將“磁碟檔案”對映到記憶體中,將對映到的大記憶體空間當作整個二級檔案系統的磁碟,直接對它進行操作。在退出或手動重新整理磁碟內容時,只需呼叫 msync 函式將該記憶體空間的值 重新寫入“磁碟檔案”中,這樣就儲存了本次執行的一系列操作,在下一次再進入二級檔案 系統時能夠繼續操作。


參考文件和完整的文件和原始碼下載地址:

https://www.write-bug.com/article/1367.html