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

procfs と sysfs の違いは何ですか?

当初 (Unix にさかのぼります)、プログラムがシステム上で実行中のプロセスを検出する方法は、カーネル メモリからプロセス構造を直接読み取ることでした (/dev/mem を開き、生データを直接解釈します)。これが最初の 'ps' コマンドがどのように機能したかです。時間の経過とともに、一部の情報はシステム コールを介して利用できるようになりました。

ただし、/dev/mem を介してシステム データをユーザー空間に直接公開するのは不適切な形式であり、新しいプロセス データをエクスポートするたびに常に新しいシステム コールを作成するのは不快なので、新しいメソッドが作成されました。ユーザー空間アプリケーションの構造化データにアクセスして、プロセス属性を調べる。これは /proc ファイルシステムでした。 /proc を使用すると、カーネル内の基礎となるデータ構造が変更されても、インターフェイスと構造 (ディレクトリとファイル) を同じに保つことができます。これは以前のシステムよりもはるかに脆弱ではなく、拡張性にも優れていました。

/proc ファイルシステムは、もともと、プロセス情報と、「ps」、「top」、「free」、およびその他のいくつかのシステム ユーティリティで必要とされるいくつかの重要なシステム属性を公開するために設計されました。ただし、(カーネル側とユーザー空間側の両方から) 使いやすいため、あらゆる範囲のシステム情報のゴミ捨て場になりました。また、設定を調整し、カーネルまたはそのさまざまなサブシステムの動作を制御するために使用される読み取り/書き込みファイルを取得し始めました。しかし、制御インターフェイスを実装する方法論はその場しのぎで、/proc はすぐに複雑な混乱に発展しました。

sysfs (または /sys ファイルシステム) は、この混乱に構造を追加し、システム情報と制御ポイント (設定可能なシステムおよびドライバー属性) をカーネルからユーザー空間に公開する統一された方法を提供するように設計されました。現在、カーネルのドライバー フレームワークは、ドライバーの登録時に、ドライバーの種類とデータ構造の値に基づいて、/sys の下にディレクトリを自動的に作成します。これは、特定のタイプのドライバーはすべて、sysfs を介して公開される同じ要素を持つことを意味します。

従来のシステム情報と制御ポイントの多くは、引き続き /proc でアクセスできますが、すべての新しいバスとドライバーは、sysfs を介して情報と制御ポイントを公開する必要があります。


<ブロック引用>

procfs と sysfs の違いは何ですか?

proc は古いもので、多かれ少なかれルールや構造がありません。そしてある時点で proc と決定されました 少し混沌としていて、新しい方法が必要でした。

次に sysfs が作成され、追加された新しいものが sysfs に入れられました

ある意味では同じことをしますが、sysfs はもう少し構造化されています。

<ブロック引用>

なぜファイルシステムとして作られているのですか?

UNIX の哲学では、すべてが「ファイル」であるため、ファイルとして動作するように作成されています。

<ブロック引用>

私が理解しているように、proc は、システムで実行されているプロセスを直前に保存するためのものです。

それらの部分は常にそこにあり、おそらく sysfs に移動することはありません .

しかし、proc にはもっと古いものがあります。 、それは移動されていません。


procfs は任意の file_operations を許可します 、sysfs はより制限されています

  • procfs エントリは file_operations を受け取ります struct には、すべてのファイルベースのシステム コールに何が起こるかを決定する関数ポインタが含まれています。 openreadmmap などで、それらから任意のアクションを実行できます。

    最小限の例:

    • /proc/* はどのように機能しますか 仕事? | |スーパーユーザー
    • proc_create() カーネルモジュールの例 |スタック オーバーフロー
  • sysfs は、次の意味でより制限されています:

    • 実装するメソッドは 2 つだけ show そして store 、Linux が open を実装するために使用します 、 closereadwrite および lseek あなたのために。参照:プラットフォーム ドライバーの sysfs 属性にファイル操作をアタッチする方法| |スタック オーバーフロー
    • kobject と密結合

    最小限の例:Linux カーネル v3.2 で単純な sysfs クラス属性を作成する方法 |スタック オーバーフロー


Linux
  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. Cのstrtok_rとstrtok_sの違いは何ですか?

  3. fsck と e2fsck の違いは何ですか?

  1. ls と l はどう違いますか?

  2. $(CC) と $CC の違いは何ですか?

  3. unlink と rm の違いは何ですか?

  1. 停止コマンドとシャットダウンコマンドの違いは?

  2. GettyとAgettyの違いは?

  3. adduser と useradd の違いは何ですか?