第71章 Linux のファイルシステム

目次

71.1. カーネルヘッダー ( /usr/src/ )
71.2. カーネルソースのアーカイブ
71.3. super_block (カーネル)
71.4. inode (カーネル)
71.5. dentry (カーネル)
71.6. file (カーネル)

 プロセスアドレス空間は、仮想アドレス(もしくはリニアアドレス)なので、物理アドレスではないです。

 また mmap でメモリーマッピングをする際には、当然ながらハードディスクをマウントしたファイルシステムにもアクセスする必要があります。

 Linux では Virtual File System (VFS) というカーネル内のレイヤーを通してマウントしている(ファイルシステム)デバイスであるハードディスク等にアクセスします。

 VFS を構成するオブジェクトはカーネル好き以外は理解する必要はないですが、一応まとめておきます。

struct file
「open file description」として知られる。プロセスが開くファイルの抽象化。ファイル記述子テーブルに入る。
struct dentry
「directory entry」の略。ディレクトリーを抽象化したオブジェクト。inodeへのポインターを保持。
struct inode
「index node」の略。ファイル、ディレクトリー、FIFOといったファイルシステムオブジェクトを実装したオブジェクトです。ブロックデバイスであれば、ハードディスク、疑似ファイルシステムであればメモリーにあります。一つの inode は複数の dentry から指される(pointed to by)ことができます。(例:ハードリンク)
struct super_block
マウントされたファイルシステムの抽象化をしたオブジェクト。

 これを図にすると以下のような感じになりますね。

img/filesystem.png

 読者のようなソフトウェア開発者が mmap を使う際には、ファイルよりも、ファイルを開いて作ったファイル記述子からメモリー領域( memory region )へのマッピングしか意識することはないでしょう。

 ここら辺の理解は mmap を使うためには必須ではないですが、抑えておくとデバッグが捗ると思います。

Copyright 2018-2019, by Masaki Komatsu