私が理解しているように、カーネルは主に、ユーザー空間がカーネルで何かを行うための 2 つのインターフェイスを提供します。これらは、システム コールと仮想ファイル システム (procfs、sysfs など) です。私が本で読んだことによると、VFS は内部的に System Call も使用しています。
だから私は知りたいのですが、これら2つはどのように正確に接続されていますか? また、VFS over System Call を使用する必要がある状況と、その逆の状況はどのようなものですか。
私が理解しているように、カーネルは主に、ユーザー空間がカーネルで何かを行うための 2 つのインターフェイスを提供します。これらは、システム コールと仮想ファイル システム (procfs、sysfs など) です。私が本で読んだことによると、VFS は内部的に System Call も使用しています。
だから私は知りたいのですが、これら2つはどのように正確に接続されていますか? また、VFS over System Call を使用する必要がある状況と、その逆の状況はどのようなものですか。
システム コールは、ユーザー空間プロセスがユーザー空間モードからカーネル モードに切り替えるための一般的な機能です。
これは、カーネルに常駐し、可変数のパラメーターを使用してユーザー空間から呼び出される関数呼び出しのようなものです。最も重要なものは syscall 番号です。
カーネルは、サポートされているシステム コール (= カーネル関数) のアーキテクチャ固有の配列を常に維持し、基本的に、ユーザー空間から渡されたシステム コール番号に基づいて、ユーザー空間からのシステムコールを正しい関数にディスパッチします。
仮想ファイル システムは、ファイルと見なすことができるあらゆるものを処理するための標準機能を提供するファイル システムの単なる抽象化です。したがって、たとえば、このファイルが保存されているファイルシステムを気にせずに、任意のファイルに対して「open」、「close」、「read」などを呼び出すことができます。
ここでの VFS と syscall の関係は、VFS は基本的にカーネルに常駐するコードであり、カーネルにアクセスする唯一の方法は syscall を使用することです (「open」は syscall であり、「close」も同様です)。