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


71

procfsとsysfsの違いは何ですか?なぜファイルシステムとして作られているのですか?私が理解しているように、procはシステムで実行中のプロセスに関する即時情報を保存するためのものです。

回答:


61

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

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

その後sysfs、作成され、追加された新しいものがsysfsデバイス情報のように入れられました。

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

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

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

私が理解しているように、procはシステムで実行中のプロセスに関する即時情報を保存するためのものです。

それらの部分はいつもそこにありました、そして、彼らはたぶん入りませんsysfs

しかし、にある古いものにprocはまだ移動されていないものがあります。


2
答えてくれてありがとう。しかし、なぜcpuinfoとmeminfoがprocfsで維持されているのか?なぜそれらをsysfsに移動できないのですか?
セン

5
彼らはsysfsに新しいものを入れて、ある程度の後方互換性を保つために古いものをそのままにしていると思います。procの中でそれらのものに依存して多くのものがあります...
ヨハン・

75

当初(Unixに戻って)、システムで実行中のプロセスをプログラムが発見する方法は、カーネルメモリからプロセス構造を直接読み取る(/ dev / memを開き、生データを直接解釈する)ことでした。これが、最初の「ps」コマンドの仕組みです。時間が経つにつれて、いくつかの情報がシステムコールを介して利用可能になりました。

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

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

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

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


8
それは使用するために、「悪い形」だという理由の一つ/dev/mem/dev/kmem彼らはrootアクセスを必要とすることであるので、それらを使用するアプリケーションがsetuidでなければなりません。
バーマー14

2
多くのUnixシステムおよびLinuxでは、これらのデバイスファイルはグループによってグループ所有されてkmemおり、ツールpsはSGID kmemです。
カウンター

2
実際、ユーザーモードプロセスは単にRAMを読み取るだけでファイルを取得し、すべての情報を取得できるため、カーネルに直接アクセスする古い方法/dev/memまたは/dev/kmemカーネルの方が高速でしたmmap/procファイルシステムから任意の情報を取得するには、1つのシステムコールopenと別のシステムコールが必要にreadなるため、はるかに遅くなります。ただし、/procメモリを読み取るためにカーネル固有のハックを必要とせず、ユーザーモードプロセスに機密性の低いデータを公開します。
ミッコランタライネン

10

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


3

sysfsは、2.6カーネルのリリースサイクル中に作成された仮想ファイルシステムであり、procfsはこのタイプの情報を適切に実行しなかったため、デバイス情報を表示します。

メモリなどはsysfsに移植されていません。これは、そのタイプの情報を表示することを意図したものではないため、まったく移植されそうにないためです。


メモリなどはsysfsに移植されていません そして、なぜそのような情報を表示することを意図していなかったのですか?説明してください。
セン

移植とは、メモリなどをsysfsに移動するかどうかの質問に対する答えである移動を意味します。また、デバイス情報を表示することだけが意図されていましたが、それはprocfsがうまくいかなかったため、procfsは他の種類の情報にとっても優れています。
kemra102

1

ここにも追加したい... / procは古いバージョンであるため、その期間のカーネルデバイスの情報が含まれます。少し構造化されており、簡単にアクセスできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.