私が書くとどうなりますかcat /proc/cpuinfo
?これは、CPU情報を動的に読み込み、呼び出されるたびにそのテキストを生成するパイプ(またはその他)と呼ばれるオペレーティングシステムですか?
ベストアンサー1
からファイルを読み込むたびに、/proc
カーネルの一部のコードが呼び出され、ファイルの内容として読み取られるテキストが計算されます。コンテンツが動的に生成されるという事実は、ほぼすべてのファイルの時間が現在報告され、サイズが0として報告される理由を説明します。ここで、0は「不明」と読み取る必要があります。通常のファイルシステムとは異なり、マウントされたファイル/proc
システムプロセスファイルシステム、ディスクなどの記憶媒体(FAT、ext2、zfsなど)またはネットワーク(NFS、Sambaなど)を介してデータをロードせず、ユーザーコード(例:ヒューズ)。
Procfs は BSD ではなくほとんどの unice に存在します。 AT&T Bell Labsで誕生しました。Unixバージョン8プロセスに関する情報を報告する方法(ps
しばしば情報を読むためのきれいなプリンタ/proc
)。ほとんどのprocfs実装には、/proc/123
PID 123を使用するプロセスに関する情報を報告するファイルまたはディレクトリがあります。 Linuxは、システム状態を報告するより多くのエントリ(例を含む)を使用してprocファイルシステムを拡張します/proc/cpuinfo
。
以前は、Linuxは/proc
ドライバに関する情報を提供するさまざまなファイルを入手しましたが、今は廃止されていますが、代わりに次のものを使用しています。/sys
、/proc
今ゆっくり発展しています。以前のバージョンとの互換性のために、/proc/bus
同じアイテムは元の場所に残りますが、より新しい、同様のインターフェイスが以下に作成されます。この回答では、Linuxに焦点を当てます。/proc/fs/ext4
/sys
Linuxドキュメントの最初と2番目のエントリポイントは次/proc
のとおりです。
- これ
proc(5)
マニュアルページ; - ファイル
/proc
システム内部にカーネル文書。
文書で扱われない場合、3番目のエントリポイントは次のとおりです。ソースコードを読む。コンピュータにソースコードをダウンロードできますが、これは巨大なプログラムです。LXLinux相互参照は大きな助けになります。 (LXRにはさまざまなバリエーションがあります。lxr.linux.no
現在実行中のバージョンが最善ですが、残念ながらサイトが頻繁にダウンします。)少しCの知識が必要ですが、不思議な値を追跡するためにプログラマになる必要はありません。
項目の主な処理は/proc
次のとおりです。fs/proc
目次。すべてのドライバはに項目を登録できるので/proc
(言及したように、現在は使用されてい/sys
ない)で目的の項目が見つからない場合は、fs/proc
他の場所を探してください。ドライバが宣言された関数を呼び出します。include/linux/proc_fs.h
。カーネルバージョン最大3.9関数create_proc_entry
といくつかのラッパー(特にcreate_proc_read_entry
)とカーネルバージョンを提供する3.10以上proc_create
(およびそれ以上)のみ使用できますproc_create_data
。
たとえば/proc/cpuinfo
、検索すると"cpuinfo"
電話がかかりますproc_create("cpuinfo, …")
。fs/proc/cpuinfo.c
。このコードはほぼ定型句と同じであることがわかります。ほとんどのファイルは/proc
一部のテキストデータをダンプするため、これを行うヘルパー関数があります。単一seq_operations
構造、本物の肉が入っています。cpuinfo_op
アーキテクチャに関連するデータ構造は、通常arch/<architecture>/kernel/setup.c
(時には他のファイル)で定義されます。 x86を例にとると、arch/x86/kernel/cpu/proc.c
。主な機能は、show_cpuinfo
必要なファイルの内容を印刷することです。残りのインフラストラクチャは、読み取りプロセスによって要求された速度でデータを読み取りプロセスに供給します。動的に計算された数値を含む、カーネルのさまざまな変数のデータから動的に結合されたデータを表示できます。CPU周波数。
その大部分は/proc
プロセス固有の情報です/proc/<PID>
。この項目は以下に登録されています。fs/proc/base.c
、内部にtgid_base_stuff
大量に;ここに登録されている一部の機能は他のファイルで定義されています。これらのアイテムを作成する方法の例をいくつか見てみましょう。
cmdline
によって生成されますproc_pid_cmdline
同じファイルに。プロセスでデータを見つけて印刷します。clear_refs
今まで見た項目と異なり、書き込みは可能ですが、読み取ることはできません。だからproc_clear_refs_operations
構造は以下を定義します。clear_refs_write
機能はありますが、読み取り機能はありません。cwd
次のシンボリックリンク(やや魔法)です。proc_cwd_link
、どちらプロセスの現在のディレクトリを見つけるリンクコンテンツとして返します。fd
サブディレクトリです。ディレクトリ自体に対する操作は、以下で定義されます。proc_fd_operations
データ構造(項目を列挙する関数を除くすべては定型句です。proc_readfd
、プロセスの開かれたファイルを列挙する)、項目に対する操作は次の場所にあります。`proc_fd_inode_タスク。
もう一つの重要な分野は直接的なインターフェース/proc
です。/proc/sys
sysctl
。この階層のエントリを読み取ると、対応するsysctl値の値が返され、書き込まれるとsysctl値が設定されます。 sysctlのエントリポイントは次のとおりです。fs/proc/proc_sysctl.c
。 Sysctlには自己登録システムがあります。register_sysctl
そして友達。