デバイス ドライバについて読んでいて、すべてをファイルとして扱うという UNIX の哲学に関連する質問があります。
ユーザーがファイルを開くなどのコマンドを発行すると、システム コールとファイル操作のどちらが実行されるのでしょうか。
sys_open
はシステムコールでopen
あり、ファイル操作です。トピックについて詳しく教えてください。
前もって感謝します。
デバイス ドライバについて読んでいて、すべてをファイルとして扱うという UNIX の哲学に関連する質問があります。
ユーザーがファイルを開くなどのコマンドを発行すると、システム コールとファイル操作のどちらが実行されるのでしょうか。
sys_open
はシステムコールでopen
あり、ファイル操作です。トピックについて詳しく教えてください。
前もって感謝します。
簡単な答え、私はそれが役立つことを願っています:
すべてのシステムコールは同じように機能します。システムコール番号は、システムコールパラメータとともにどこかに(たとえばレジスタに)格納されます。オープンシステムコールの場合、パラメータは次のとおりです。ファイル名と権限文字列へのポインタ。次に、open関数は、適切な命令を使用してソフトウェアの中断を発生させます(syscall
、int
...、HWによって異なります)。
中断については、カーネルが呼び出され(カーネルモードで)、中断が処理されます。システムは、割り込みがシステムコールによって引き起こされたことを検出し、レジスタ内のシステムコール番号を読み取り、それが開いているシステムコールであることを確認し、カーネルメモリにファイル記述子を作成し、ドライバを開いて実際にファイルを開きます。働き。次に、ファイル記述子IDがレジスタに格納され、ユーザーモードに戻ります。
次に、ファイル記述子がレジスタから取得され、によって返されopen()
ます。
「開いている各ファイル (ファイル構造によって内部的に表されますが、これについてはすぐに調べます) は、(file_operations 構造を指す f_op というフィールドを含めることによって) 独自の関数セットに関連付けられています。操作は主に、したがって、システム コールは、open、read などの名前が付けられます。 "
これは、LDD の章の Character Driver からのものです。最後の行の意味を誰か詳しく教えてください。