
Linuxのファイルシステムをいじっていたら/proc
、現在のプロセスのプロセスディレクトリへのシンボリックリンクである に遭遇しました/proc/self
。これがどのように実装されているのか知りたいです。1つの解決策は、そのシンボリックリンクを次のように変更することです。あらゆるコンテキストスイッチただし、ディスク アクセスが伴うため、コストが非常に高くなります。
答え1
http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482現在の実装です。
ファイルproc
システムは完全に仮想化されており、内部 VFS が特別なシンボリックリンクを適切な場所に委任するように実装されています。そのため、コンテキストスイッチごとにではなく、読み取り/トラバース時にreadlink
何を指すかを計算します。self
答え2
のファイルは/proc
ディスクに保存されず、カーネルによってオンザフライで生成されます。/proc を開いて読み取ると何が起こりますか?
プログラミングに興味があるなら、の実装/proc
をカーネルソースコードの内容は/proc/self
シンボリックリンクは、関数呼び出しプロセスの PID をバッファに格納します。