Unixファイルシステムおよびpwdコマンドの実装詳細
1. ユーザーにとって、Unix システムのハードディスク上のファイルはディレクトリツリーを形成しています。各ディレクトリには、ファイルや他のサブディレクトリを含めることができます。
ディレクトリツリーの深さにはほとんど制限はありませんが、あまりに深いディレクトリツリーを作成すると、範囲外であることを警告して実行を停止します。
真の間
する
mkdir deep_well
cd deep_well
完了
数秒間実行したところ、ディレクトリツリーの範囲を超えているとして、割り込みシステムがプロンプトを表示しました。
2. ディスクはN個のセクタに分割することができ、各セクタは512バイトである。セクタはディスクの基本的な記憶単位であり、各セクタに番号を振って、ディスクは次のようになる。
番号が振られたブロックの連続。
3. ディスクブロックにファイルを格納する場合、一定のパターンに従って格納される。
ファイルシステムは、スーパーブロック、i-nodeテーブル、データエリアの3つの部分に分かれています。
スーパーブロック:各領域のサイズや、未使用のディスクブロックの情報など、ファイルシステム自体の情報を保持します。(バージョンによって若干異なる)
i-nodeテーブル。各ファイルはその属性、サイズ、最終修正時刻などをino_t構造体に格納しており、すべてのi-nodeは同じサイズである。
(テーブルの各i-nodeはその位置によってマークされ、例えば2とマークされたi-nodeはファイルシステムのi-nodeテーブルの3番目に位置する)
データブロック : ファイルの内容を保持する。ブロックの大きさは一定であるため、1つのファイルが複数のディスクにまたがっていることもある。
4. ファイルを作成する4つのステップ
属性の保存:カーネルはまず空のi-nodeを見つけ、ファイルの属性に関する情報でそれを埋める。
データを格納する:ディスクから空きブロックを探し、そこにファイルデータをコピーする。
割り当ての記録:カーネルはi-nodeのディスク分配領域にちょうどディスク番号を記録する
ディレクトリにファイル名を追加:(i-node番号, ファイル名)をディレクトリに追加する。
5. catやmoreなど、いくつかのコマンドを実装することです。
猫名
ディレクトリ内のファイル名を検索する
対応するファイル名のi-node番号を探す。
中のi-node番号に従ってファイルの属性を取得し、パーミッションをチェックし、パーミッションが十分でない場合、open()関数は1を返し、オープンに失敗し、停止します。
i-node内のディスク位置に応じて、ファイル位置のデータブロックにアクセスします。
readを何度も呼び出してデータを読み込む(バッファに格納可能)
6. 大容量ファイルの保存
あるファイルの保存に14個の番号付きディスクブロックが必要だが、i-nodeの値には13個の項目の割り当てチェーンテーブルが含まれているとすると、最初の10個をi-nodeに入れ、残りの4個をi-nodeの最初のデータブロックに入れます。
i-nodeの11ビットは、その4つの数字を保持するブロックに書き込まれます。そして、実際には10+4+1個のデータブロックを使用し、余分な1個は間接ブロックと呼ばれます。
同様に、間接ブロックが飽きたら、第二の間接ブロックを設定すればいいわけで...。
7. ディレクトリ内のファイルの意味
ディレクトリには(i-node番号, ファイル名)のエントリが含まれる。つまり、ディレクトリにはファイルへの参照が含まれ、各アプリケーションはリンクと呼ばれる。
8. サブディレクトリを含むディレクトリの意味
ディレクトリには、サブディレクトリのi-nodeへのリンクが含まれています。
9. ディレクトリが親を持つことの意味。
ディレクトリには、親ディレクトリへのリンクである.が含まれています。
10. ファイルは名前を持たず、i-node番号のみを持つが、リンクは名前を持つことができ、1つのファイルは複数のリンクを持つことができる(それらの名前は異なっていても良いが、それらは1つのファイルを指しており、それらに対する操作はソースファイルに対する操作である)。
11. Unixシステムは複数のファイルシステムを含むことができ、それぞれがルートディレクトリを持つ独立したツリーですが、システムはそれらを1つの大きなツリーに統合することができます、つまり、あるツリーのルートが別の番号のあるノードにロードされます。
12 シンボリックリンクは、ファイルシステム全体またはディレクトリに対して、ファイル名でファイルを参照します。ウィンドウズでいうショートカットに相当する。
ハードリンクは、ディレクトリとツリーをリンクさせるポインターであると同時に、ファイル名とファイル自身をリンクさせるポインターでもある。ファイルはi-node番号の組で参照される。
13 . ディレクトリツリーに関連するコマンドとシステムコール
コマンド mkdir
実装ヘッダーファイル #include
関数プロトタイプ[...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]
関連
-
Unixのdotコマンドの説明
-
grub2 boot freebsdの説明
-
USB フラッシュドライブを使って FreeBSD をインストールするための簡単なチュートリアル
-
Unixとは何ですか?UnixとLinuxの違いは何ですか?
-
freebsd9.2 postfix の smtp 認証を設定する手順 (図解)
-
Freebsd+IPFWの組み合わせで、小規模なDDOS攻撃を防ぐ設定方法を採用。
-
FreeBSD 8.1 で Git サーバーを構築する手順
-
Unix OSのコマンドと設定ファイルによる知識共有の保護
-
UNIXでのユーザーアカウントの作成・削除・管理
-
UNIXファイルシステムの解析と比較考察
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
FreeBSD 10のカーネルソースコードインストール方法の説明
-
FreeBSDのシステム使用法の説明
-
AIXでrootvgをクローンする方法
-
Unixシステムにおけるハードリンクとソフトリンクの説明
-
FreeBSD 9.3が正式にリリースされ、公式ダウンロードアドレスが公開されました。
-
FreeBSD FreeNASインストール図チュートリアル
-
freebsd 時間設定サブセクション詳細
-
FreeBSDにBugzillaをインストールするにはどうしたらいいですか?
-
FreeBSD 上で Mac のファイルとタイムマシンのバックアップサービスを構築する。
-
freebsd9.1ソースコードからapache, mysql, php環境をインストールする(pro side by side)