基於UNIX V6 設計的二級檔案系統

2021-09-27 11:05:43 字數 1331 閱讀 3369

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

為 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 函式將該記憶體空間的值 重新寫入「磁碟檔案」中,這樣就儲存了本次執行的一系列操作,在下一次再進入二級檔案 系統時能夠繼續操作。

基於redis的二級快取

以下內容是在github上專案hibernate redis 的基礎上做的優化,優化的版本號為1.6.1。關於二級快取的配置方法和使用方法可以參考github上的專案。在hibernate二級快取需要實現的主要介面有 regionfactory region regionaccessstrategy...

基於C 實現的構建二級檔案模擬系統

1 需求分析 題目 構建二級檔案模擬系統 題目說明 使用乙個普通的大檔案 如 c mydisk.img 稱之為一級檔案 來模擬 unix v6 的乙個檔案卷 乙個檔案卷實際上就是一張邏輯磁碟,磁碟中儲存的資訊以塊為單位。每塊 512 位元組。磁碟檔案結構 定義自己的磁碟檔案結構,superblock...

基於C 實現的構建二級檔案模擬系統

1 需求分析 題目 構建二級檔案模擬系統 題目說明 使用乙個普通的大檔案 如 c mydisk.img 稱之為一級檔案 來模擬 unix v6 的乙個檔案卷 乙個檔案卷實際上就是一張邏輯磁碟,磁碟中儲存的資訊以塊為單位。每塊 512 位元組。磁碟檔案結構 定義自己的磁碟檔案結構,superblock...