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

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

/procLinuxでファイルシステムを変更するとき、/proc/self現在のプロセスのプロセスディレクトリを指すシンボリックリンクであることがわかりました。どのように実装されるのか知りたいです。 1つの解決策はシンボリックリンクを変更することですすべてのコンテキスト切り替えしかし、これはディスクアクセスに関連しているため、非常に費用がかかります。

答え1

http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482現在の実装です。

ファイルシステムはproc完全に仮想であり、readlink特別なシンボリックリンクの正しい場所の内部 VFS デリゲートとして実装されます。したがって、selfすべてのコンテキスト遷移ではなく読み取り/巡回時に指す内容を計算します。

答え2

ファイルは/procディスクに保存されず、カーネルによって動的に生成されます。バラより/procを開いて読むとどうなりますか?

/procプログラミングに興味がある場合は、次の実装について読むことができます。カーネルソースコード。コンテンツ/proc/selfシンボリックリンクは次のように作成されます。機能呼び出しプロセスのpidでバッファを埋めます。

関連情報