Linuxでは、ユーザープログラムは常にオペレーティングシステムカーネルへのシステムコールを使用してデバイスドライバに間接的にアクセスしますか?
ドライバがロード可能およびアンロード可能モジュールとして実装されている場合、ユーザープログラムはカーネルへのシステムコールなしでドライバに直接アクセスできますか?
ベストアンサー1
ユーザーはシステム呼び出しを囲むライブラリ関数を呼び出します(通常のプログラマーにとっては、生のシステム呼び出しは非常にまれです)。モジュールコードはとにかくカーネルモードで実行されるため、ある時点でユーザー空間からカーネル空間へのコンテキスト切り替えが必要です。理想的には、ほとんどのモジュールは標準化されたインタフェース(デバイスノード、netlinkソケット、またはinetソケット)を使用しているため、ユーザー側の対話は主にシステムコールを介して行われread()
ますwrite()
(ioctl
標準のシステムコールではなく「追加」設定を扱うため、一般的です) )。バッファはコールの数を減らしますが、最終的にはシステムコールが含まれます。