GNU/Linux >> Linux の 問題 >  >> Linux

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

cat /proc/cpuinfoと書くとどうなりますか 。これは、CPU情報をその場で読み取り、呼び出すたびにそのテキストを生成するOSへの名前付きパイプ(または他の何か)ですか?

承認された回答:

/procの下のファイルを読み取るときはいつでも 、これは、ファイルコンテンツとして読み取るテキストを計算するカーネル内のコードを呼び出します。コンテンツがオンザフライで生成されるという事実は、ほとんどすべてのファイルの時間が現在と報告され、サイズが0と報告される理由を説明しています。ここでは、0を「わからない」と読む必要があります。通常のファイルシステムとは異なり、/procにマウントされているファイルシステム はprocfsと呼ばれ、ディスクやその他のストレージメディア(FAT、ext2、zfsなど)またはネットワーク経由(NFS、Sambaなど)からデータをロードせず、ユーザーコードを呼び出しません(FUSEとは異なります)。 。

Procfsはほとんどの非BSDユニスに存在します。プロセス(およびps)に関する情報を報告する方法として、UNIX第8版のAT&Tのベル研究所で誕生しました。 多くの場合、/procを介して読み取られる情報のきれいなプリンタです。 )。ほとんどのprocfs実装には、/proc/123というファイルまたはディレクトリがあります。 Linuxは、例の/proc/cpuinfoを含む、システムの状態を報告するさらに多くのエントリでprocファイルシステムを拡張します。 。

過去には、Linuxの/proc ドライバーに関する情報を提供するさまざまなファイルを取得しましたが、/sysを優先して、この使用は廃止されました。 、および/proc 今はゆっくりと進化します。 /proc/busのようなエントリ および/proc/fs/ext4 下位互換性のためにそのままにしておきますが、/sysの下に新しい同様のインターフェイスが作成されます。 。この回答では、Linuxに焦点を当てます。

/procに関するドキュメントの最初と2番目のエントリポイント Linuxの場合:

  1. proc(5) マニュアルページ;
  2. /proc カーネルドキュメントのファイルシステム 。

ドキュメントに記載されていない場合の3番目のエントリポイントは、ソースを読むです。 。ソースをマシンにダウンロードできますが、これは巨大なプログラムであり、Linuxの相互参照であるLXRは大きな助けになります。 (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周波数など、オンザフライで計算されたいくつかの数値を含む、カーネル内のさまざまな変数のデータから、オンザフライでアセンブルされているデータを確認できます。

関連:lsの-Fオプション?

/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_operationsにあります。

/procのもう1つの重要な領域 /proc/sysです 、sysctlへの直接インターフェースです 。この階層のエントリから読み取ると、対応するsysctl値の値が返され、書き込むとsysctl値が設定されます。 sysctlのエントリポイントはfs/proc/proc_sysctl.cにあります 。 Sysctlには、register_sysctlを使用した独自の登録システムがあります。 と友達。


Linux
  1. Linuxでの‘/ usr / bin / [‘[角かっこ]コマンドの使用法は何ですか?

  2. Linux – / proc / cpuinfoのフラグはどういう意味ですか?

  3. Linux – / proc/mntを/proc/ mountsにリンクしますか?

  1. Unix / Linux でプロセスのパスを取得するにはどうすればよいですか

  2. FreeBSD v8.1 の /proc/cpuinfo に相当するものは何ですか?

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. シェルでファイルを実行するとどうなりますか?

  3. ls -l /proc/[PID]/fd の出力の anon_inode は何ですか?