Linux では /proc/self はどのように実装されていますか?

Linux では /proc/self はどのように実装されていますか?

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 をバッファに格納します。

関連情報