我目前的操作系統課程是設計和實現一個基本的文件系統。我已經閱讀了我們關於文件系統的書中的章節,但是我迷失在從哪裏開始。我知道一些需要的結構(文件控制塊,系統級打開文件表,每進程打開文件表,r + w緩衝區,目錄結構)以及我需要支持的操作(打開,讀取,寫入,刪除,創建,關閉)。實現文件系統的基礎知識
我已經提供了一個10MB'驅動器'來實現文件系統內部。 任何資源或直接答案的幫助將不勝感激。
我目前的操作系統課程是設計和實現一個基本的文件系統。我已經閱讀了我們關於文件系統的書中的章節,但是我迷失在從哪裏開始。我知道一些需要的結構(文件控制塊,系統級打開文件表,每進程打開文件表,r + w緩衝區,目錄結構)以及我需要支持的操作(打開,讀取,寫入,刪除,創建,關閉)。實現文件系統的基礎知識
我已經提供了一個10MB'驅動器'來實現文件系統內部。 任何資源或直接答案的幫助將不勝感激。
你問了一個非常廣泛的問題的鏈接。目前還不清楚你是否需要實現一個真正的文件系統,但現在看起來你需要實施一些你的教授定義的操作。
你寫:
的我知道一些必要的結構(文件控制塊,全系統打開文件表,每個進程打開文件表,R + W緩衝器,目錄結構)
在我看來,你專注於錯誤的事情。這些是真實操作系統用來支持文件系統高效訪問的內存結構。
我讀到作業提到的「目錄結構」,指的是磁盤結構。這就是你可能需要關注的問題。你被賦予了一大塊存儲空間,你需要分發一些小塊。所以你將需要編寫一個存儲分配器。困難的部分確實是在設計磁盤結構。你必須跟蹤哪些塊是空閒的。文件可以被刪除,所以你會漏洞。兩個簡單的方法是使用位圖或連續空閒空間列表。無論您選擇哪種方法,它們都會成爲您希望選擇其他方法的代碼的一部分。
您還需要一個結構來跟蹤名稱。當用戶創建一個文件時,他將其命名。稍後打開文件,他會給出相同的名稱。磁盤結構需要支持這一點。還有其他元數據:最後修改日期(您的分配特別需要此),文件大小,數據位置。你可以使用你的分配器來獲得存儲元數據的空間。
在存儲開始處(或靠近)存儲固定塊以保存配置信息和指向加載文件系統所需的其他存儲的指針是很常見的。
爲了全面瞭解Unix文件系統的概念,我可以推薦Marshall Kirk McKusick和George V. Neville-Neil的第8章Local Filesystems的「FreeBSD操作系統的設計和實現」。
http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452
具體這些子章節:
這有助於人們分別考慮存儲分配和命名。
你的任務頁面包含一些很好的參考。我有機會看看Practical File System Design,作者慷慨地在網上發佈。我特別推薦以下章節:
加上可能:
也許你開心的問題克是這個項目看起來很大而且壓倒一切。它真的有助於將其分解成更小的部分。如果你仍然迷失,開始實施你最瞭解的部分。
讓我們回到你的任務的細節。它提到這些文件系統約束:
約束在這種情況下不壞,the're好,因爲它們限制你必須處理,讓你切幾個小錢什麼。 (我不再說了,因爲搞清楚細節是你任務的重點。)
如果你仍然陷入困境,你可以閱讀源代碼到像FAT這樣的簡單文件系統。下面是FAT的一個相當接近的描述:
http://www.pjrc.com/tech/8051/ide/fat32.html
(還檢查了維基百科。)
下面是一個鏈接到一個C實現FAT的用於嵌入式應用:
http://ultra-embedded.com/?fat_filelib
的源代碼是僅約5K線。
祝你好運。
這甚至不是「真正的問題」。這僅僅是「不是問題」。我建議libfuse,但我不確定它是什麼後你是 – sehe
對不起,我沒有提出'真正的問題'的原因是因爲我不知道我在找什麼。我見過類似的問題,比如我在這個論壇上提出的問題,但是響應通常是像libfuse這樣的提供API的鏈接。我已經得到一個大文件來實現這個文件系統,但是當涉及到獲取僞代碼和程序結構時,我不知道從哪裏開始。 – user1837165
文件系統將如何被驅動?誰將請求訪問並存儲對象?它必須是(子集)POSIX兼容?它應該是內核模式嗎? – sehe