こんにちは、インフラエンジニアです。
現場の先輩エンジニアから、「OSは"i-node"という機能でファイルを管理しているよ」という話を聞きました。
i-nodeについて調べてみたのをきっかけに、改めてLinuxの構造に感動したので備忘録として書き残しておこうと思います。
i-nodeとは
i-nodeとは、UNIX系やLinuxなどのOSがファイルの実体を管理するためのファイルディスクリプタです。
https://e-words.jp/w/inode.html
記憶装置上のどこの住所にファイルが存在するのか、OSが認識するための電話帳のようなものです。
i-node番号という一意の識別子に個々のファイルを紐づけてファイル管理が行われています。
Linuxでは"ls"コマンドに"i"オプションを付けるとi-node番号を確認することができます。
i-nodeの実体としては構造体らしいのたぶんこんな感じ?
C言語の練習中なので調べて書いてみる。
typedef struct
{
mode_t i_mode; // ファイルタイプとアクセス権
uid_t i_uid; // 所有者のユーザーID
gid_t i_gid; // 所有者のグループID
off_t i_size; // ファイルのサイズ(バイト単位)
time_t i_mtime; // 最終修正時間
unsigned int i_block[15]; // ファイルデータへのポインタ
// etc...
} inode;
何に感動したのか
ここまでなら、「OSは"i-node"っていう電話帳でファイル管理をしているよ」っていうだけの話ですが、調べているうちに以下のサイトに辿り着きました。
書いてある内容としては、UNIX系OSやLinuxは全てのインターフェイスがファイルとして抽象化されているということ。
※もはやi-nodeの機能に限った範囲の話ではない笑。興味のある方はぜひ読んでみてください。
・Linuxの標準入出力の流れをまとめたサイト
https://zenn.dev/ganariya/articles/linux-file-system
・↑のサイトのリンクから見つけたUnixをまとめたサイト
https://uc2.h2np.net/index.php?title=%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
何がすごいって、
"ハードディスクはじめNIC、CDやDVDのドライブとか、なんならターミナルまで含めて全てのI/Oに関わる機能が、ファイルという形式でアクセスできるようになっている" んです!!
これに尽きます。
だめだ、書いてみると当たり前のことしか言ってないな笑
さっきまでこの12月一番の感動に震えていたのに...
とにもかくにも
OSのカーネルが認識できるようにするため、現実世界で実体を持つ物体が、OSの中では「ファイル」という統一された形で保管されていて、かつその現実世界にある物体が処理命令の通りに動作するよう作り込まれているって、改めてよくできているなって感動しました。
やはり普段意識することなく触れているデバイス中で動いている仕組みが少しでもわかると面白いですね。
また今回書いた内容は処理や機能が抽象化された後の話ですが、今後はそのような部分とデバイスのより物理的で電気的な動作が行われている部分の境目で、どのような処理が行われているのか、解像度を高めることができたらもっと面白そうだなと思いました。