みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイル/bin/catへのアクセス

オペレーティングシステムに関する話です。

UNIXの木構造のファイルシステムにおいて、
ファイル/bin/catのデータブロックへのアクセスはファイルシステムの内部では具体的にどの様に行われるか、分かる方教えて頂けませんか?

投稿日時 - 2011-01-28 13:05:44

QNo.6480785

すぐに回答ほしいです

質問者が選んだベストアンサー

それじゃあ伝統的な UFS のイメージで説明します。

ファイルのモード、オーナー、サイズ、リンクカウント、各種時刻などの属性情報は i-node で管理されてます。 これは一つのファイルシステム上では一意な ID になってます。ls -i や find の -inum で指定できる番号です。

ディレクトリも一種のファイルで、/bin のディレクトリエントリに、cat の実体への i-node が格納されてます。ファイル名が格納されてるのはディレクトリエントリの方で、i-node にはファイル名は入ってません。その代りリンクカウントを +1 します。これは ln のハードリンクに相当します。ディレクトリ自身の . とその親 .. もこの機能を使ってます。パスを / からフルパスで辿るようなことも、このリンクを順にサーチすることで、最終的に目的のファイルへの i-node に辿り着きます。もちろん途中でパーミッションのチェックも行なわれます。

ちなみに rm は実際はファイルを消すのではなくて、i-node 中のリンクカウントを -1 してるだけで、このカウントがゼロになると、i-node も消されてファイルの実体もフリーされます。

一方データブロックも番号で管理されていて、i-node には複数のブロック番号を格納できます。初めのうちは直接ブロック番号を追加していきますが、ある程度からは間接参照して格納可能なサイズを伸ばすようにします。すなわち参照先のブロックに、さらにその先へのデータブロック番号が格納されるようになります。ファイルサイズが大きくなると、これが 1段、2段、3段と続きます。このブロックと i-node の関係は newfs のオプションで調整できます。

あと、これは通常ファイルの事です。デバイスファイルとかはまた別。
ファイルは穴開きもあり得る
実際はいろんな拡張がされてる。journal, logging, softupdate, mksnap, etc
こんなものか。もっと詳細が知りたければ、wikipedia あたりから調べるか、書籍を漁るかしてくれ。

投稿日時 - 2011-01-29 13:41:06

このQ&Aは役に立ちましたか?

18人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

/bin/cat と特定することには意味があるの?

そうじゃなく単にファイルはなんでもいいから、ディレクトリエントリ見て、i-node 見て、データ本体を辿ってくというのが知りたい?

概念以上の詳細はファイルシステムによって違う、ufs, ext?, zfs, ntfs, etc

投稿日時 - 2011-01-28 17:13:10

お礼

お返事ありがとうございます。

>単にファイルはなんでもいいから、ディレクトリエントリ見て、i-node 見て、データ本体を辿ってくというのが知りたい?

はい、ファイルは何でもいいので、ファイルシステムの内部で具体的にどの様に行われているか知りたいです。

投稿日時 - 2011-01-28 17:24:57

あなたにオススメの質問