Procfsとsysfsの違いは何ですか?なぜファイルシステムとして作成されるのですか?私が理解しているように、procはシステムで実行中のプロセスに関する即時情報を格納するためのものにすぎません。
Procfsとsysfsの違いは何ですか?
proc
は古いもので、多かれ少なかれルールと構造がありません。そして、ある時点で、proc
は少し無秩序で、新しい方法が必要であると判断されました。
次にsysfs
が作成され、追加された新しいものがsysfs
にデバイス情報のように入れられました。
つまり、ある意味では同じですが、sysfs
はもう少し構造化されています。
なぜファイルシステムとして作成されるのですか?
UNIXの哲学では、すべてが「ファイル」であり、ファイルとして動作するように作成されています。
私が理解しているように、procはシステムで実行中のプロセスに関する即時情報を格納するためのものにすぎません。
これらのパーツは常に存在しており、おそらくsysfs
に移動することはありません。
ただし、proc
には、移動されていない古いものがあります。
初めに(Unixでさかのぼって)、システムで実行中のプロセスについてプログラムが見つけた方法は、カーネルメモリからプロセス構造を直接読み取る(/ dev/memを開き、生データを直接解釈する)ことでした。これが、最初の「ps」コマンドの動作方法です。時間の経過とともに、一部の情報はシステムコールを介して利用できるようになりました。
ただし、システムデータを/ dev/memを介してユーザー空間に直接公開するのは不適切な方法であり、新しいプロセスデータをエクスポートするたびに常に新しいシステムコールを作成するのは不愉快なので、新しいメソッドが作成されましたユーザー空間アプリケーションの構造化データにアクセスして、プロセス属性について調べる。これは/ procファイルシステムでした。/procを使用すると、カーネルの基礎となるデータ構造が変更されても、インターフェイスと構造(ディレクトリとファイル)を同じに保つことができます。これは以前のシステムよりもはるかに脆弱ではなく、より適切に拡張されました。
/ procファイルシステムは、もともとプロセス情報と 'ps'、 'top'、 'free'およびその他のいくつかのシステムユーティリティに必要ないくつかの主要なシステム属性を公開するために設計されました。ただし、(カーネル側とユーザー空間側の両方から)使いやすいため、あらゆる範囲のシステム情報の捨て場になりました。また、設定を調整し、カーネルまたはそのさまざまなサブシステムの動作を制御するために使用される読み取り/書き込みファイルを取得し始めました。ただし、制御インターフェースの実装方法はアドホックであり、/ procはまもなく混乱に陥りました。
Sysfs(または/ sysファイルシステム)は、この混乱に構造を追加し、システム情報と制御ポイント(設定可能なシステムおよびドライバー属性)をカーネルからユーザー空間に公開する統一された方法を提供するように設計されました。現在、カーネルのドライバーフレームワークは、ドライバーが登録されると、ドライバータイプとそのデータ構造の値に基づいて、/ sysの下にディレクトリを自動的に作成します。これは、特定のタイプのドライバーはすべて、sysfsを介して公開される同じ要素を持つことを意味します。
従来のシステム情報と制御ポイントの多くは引き続き/ procでアクセスできますが、すべての新しいバスとドライバーはsysfsを介してそれらの情報と制御ポイントを公開する必要があります。
procfsは任意の_file_operations
_を許可し、sysfsはより制限されます
procfsエントリは_file_operations
_構造体を受け取ります。これには、すべてのファイルベースのシステムコールに何が起こるかを決定する関数ポインタが含まれています。 open
、read
、mmap
などであり、それらから任意のアクションを実行できます。
最小限の例:
sysfsは、次の意味でより制限されています。
show
、store
、open
、close
、read
を実装するために使用するwrite
とlseek
の2つのメソッドのみを実装します。参照: ファイル操作をプラットフォームドライバーのsysfs属性にアタッチする方法?|スタックオーバーフローkobject
と密結合sysfsは、2.6カーネルリリースサイクル中に作成された仮想ファイルシステムであり、procfsがこのタイプの情報を適切に処理しなかったため、デバイス情報を表示します。
メモリなどはsysfsに移植されていません。そのタイプの情報を示すことは意図されていなかったため、移植される可能性はほとんどありません。
ここにも追加したいので.../procは古いバージョンなので、その期間のカーネルデバイスの情報が含まれています。sysfsには2.6カーネルバージョンが付属しているので、デバイスドライバーの情報により、独自のディレクトリが作成されます。少し構造化されており、簡単にアクセスできます。