あなたは非常に幅広い質問をしました。また、実際のファイル システムを実装する必要があるかどうかは明確ではありませんでしたが、教授が定義した一連の操作を実装する必要があるようです。
あなたが書く:
必要な構造のいくつかを知っています (ファイル制御ブロック、システム全体のオープン ファイル テーブル、プロセスごとのオープン ファイル テーブル、r+w バッファ、ディレクトリ構造)
あなたは間違ったことに焦点を合わせているように私には思えます。これらは、実際のオペレーティング システムがファイル システムへの効率的なアクセスをサポートするために使用するメモリ内構造です。
- ファイル制御ブロック- これのあなたのバージョンは非常に単純かもしれません
- システム全体で開いているファイル テーブル- 単一のユーザーをサポートするためにこれは必要ありません
- プロセスごとのオープン ファイル テーブル- 必要なものは 1 つだけで、非常に簡単です。
- r+w バッファー- これはパフォーマンスの向上であり、割り当てによって厳密に要求されるわけではなく、必要に応じて後で追加できます。
- ディレクトリ構造- ああ、今、あなたは何かに取り組んでいます。
割り当ての言及「ディレクトリ構造」は、ディスク上の構造を指していると読みました。そして、それはおそらくあなたが集中する必要があるものです. ストレージの大きなブロックが与えられ、小さな断片を配る必要があります。そのため、ストレージ アロケータを作成する必要があります。本当に難しいのは、ディスク上の構造を設計することです。どのブロックが空いているかを追跡する必要があります。ファイルは削除できるので、穴が開いてしまいます。2 つの簡単な方法は、ビット マップまたは連続する空き領域のリストを使用することです。どちらのアプローチを選択しても、他のアプローチを選択したいコードの一部になります。
名前を追跡するための構造も必要です。ユーザーがファイルを作成するとき、名前を付けます。後でファイルを開くために、彼は同じ名前を付けます。これをサポートするには、ディスク上の構造が必要です。他のメタデータもあります: 最終更新日 (あなたの割り当ては特にこれを必要とします)、ファイルサイズ、データの場所です。アロケーターを使用して、メタデータを保存するためのスペースを確保できます。
ファイルシステムをロードするために必要な構成情報と他のストレージへのポインターを保持するために、ストレージの先頭 (またはその近く) に固定ブロックを配置するのが一般的です。
Unix ファイルシステムの概念の概要については、Marshall Kirk McKusick と George V. Neville-Neil による「The Design and Implementation of the FreeBSD Operating System」の第 8 章 Local Filesystems をお勧めします。
http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452
具体的には、これらのサブチャプター:
- 8.8. ローカル ファイルストア
- 8.3. ネーミング
- 8.9。Berkeley 高速ファイルシステム
これは、ストレージの割り当てと命名について別々に考えるのに役立ちます。
あなたの課題ページには、いくつかの優れた参考文献が含まれています。私は、著者が惜しみなくオンラインに投稿したPractical File System Designに目を通す機会がありました。これらの章を特にお勧めします。
- 第 4 章 BFS のデータ構造
- 第 6 章 割り当てポリシー
さらに多分:
おそらく、あなたが抱えている問題は、プロジェクトが大きくて圧倒されているように見えることです。それを小さなパーツに分解することは本当に役に立ちます。それでもわからない場合は、最もよく理解している部分を実装することから始めてください。
任務の詳細に戻りましょう。次のファイルシステムの制約について言及しています。
- ファイルのサイズは最大16384 バイトです
- ディスク上の割り当て単位またはブロックは、それぞれ512 バイトです。
- 合計ストレージ領域は2 ~ 10 MB です
このコンテキストでの制約は悪いことではありません。対処しなければならないことを制限し、いくつかのコーナーをカットできるため、良いことです。(詳細を把握することがあなたの課題のポイントなので、これ以上は言いません。)
それでも問題が解決しない場合は、ソース コードを FAT などの単純なファイル システムに読み込むことができます。これは、FATの非常にアクセスしやすい説明です。
http://www.pjrc.com/tech/8051/ide/fat32.html
(ウィキペディアも参照してください。)
組み込みアプリケーション向けの FAT の C 実装へのリンクを次に示します。
http://ultra-embedded.com/?fat_filelib
ソースコードは約 5K 行のみです。
幸運を。