回答:
procfsとsysfsの違いは何ですか?
proc
それは古いものであり、それは多かれ少なかれルールや構造がありません。そしてある時点で、それはproc
少し混tooとしたものであり、新しい方法が必要であることが決定されました。
その後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を介して情報と制御ポイントを公開する必要があります。
/dev/mem
と/dev/kmem
彼らはrootアクセスを必要とすることであるので、それらを使用するアプリケーションがsetuidでなければなりません。
kmem
おり、ツールps
はSGID kmem
です。
/dev/mem
または/dev/kmem
カーネルの方が高速でしたmmap
。/proc
ファイルシステムから任意の情報を取得するには、1つのシステムコールopen
と別のシステムコールが必要にread
なるため、はるかに遅くなります。ただし、/proc
メモリを読み取るためにカーネル固有のハックを必要とせず、ユーザーモードプロセスに機密性の低いデータを公開します。
procfsは任意を許可しfile_operations
、sysfsはより制限されています
procfsのエントリが受け取るfile_operations
すべてのファイルベースのシステムコールに何が起こるかを判別関数ポインタ、例えば含まれている構造体、open
、read
、mmap
、などを、あなたはそれらの中から任意のアクションを取ることができます。
最小限の例:
sysfsは、次の意味でより制限されています。
show
してstore
、Linuxが実装するために使用するopen
、close
、read
、write
そしてlseek
あなたのために。参照:プラットフォームドライバーでsysfs属性にファイル操作をアタッチする方法 | スタックオーバーフローkobject
sysfsは、2.6カーネルのリリースサイクル中に作成された仮想ファイルシステムであり、procfsはこのタイプの情報を適切に実行しなかったため、デバイス情報を表示します。
メモリなどはsysfsに移植されていません。これは、そのタイプの情報を表示することを意図したものではないため、まったく移植されそうにないためです。