cat /proc/cpuinfoコマンドを実行するとどうなりますか?

cat /proc/cpuinfoコマンドを実行するとどうなりますか?

私が書くとどうなりますか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/123PID 123を使用するプロセスに関する情報を報告するファイルまたはディレクトリがあります。 Linuxは、システム状態を報告するより多くのエントリ(例を含む)を使用してprocファイルシステムを拡張します/proc/cpuinfo

以前は、Linuxは/procドライバに関する情報を提供するさまざまなファイルを入手しましたが、今は廃止されていますが、代わりに次のものを使用しています。/sys/proc今ゆっくり発展しています。以前のバージョンとの互換性のために、/proc/bus同じアイテムは元の場所に残りますが、より新しい、同様のインターフェイスが以下に作成されます。この回答では、Linuxに焦点を当てます。/proc/fs/ext4/sys

Linuxドキュメントの最初と2番目のエントリポイントは次/procのとおりです。

  1. これproc(5)マニュアルページ;
  2. ファイル/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/syssysctl。この階層のエントリを読み取ると、対応するsysctl値の値が返され、書き込まれるとsysctl値が設定されます。 sysctlのエントリポイントは次のとおりです。fs/proc/proc_sysctl.c。 Sysctlには自己登録システムがあります。register_sysctlそして友達。

おすすめ記事