open("/dev/mydrievr")
複数のプログラムでデバイスドライバを複数回呼び出すとどうなりますか?
各通話のプロセスを作成しますか?
プロセスの代わりにスレッドをインスタンス化できますか?
ベストアンサー1
ほとんどの場合、カーネル要求は新しいプロセスやスレッドを生成しません。呼び出しスレッドのコンテキストでサービスを提供します。つまり、システムコールはスケジューリングの観点からカーネルに切り替えられません。カーネルは、必要に応じて呼び出される別個のプロセスではありません。あなたの例では、各呼び出しはopen
呼び出しプログラムのコンテキストで処理されます。
一部のデバイスドライバは、プロセスコンテキスト以外のタスクを処理できる必要があります。例えば処理時間が長くなる中断を処理します。このタイプのドライバはジョブキュー。カーネルでは、ジョブキューはスレッドを効果的に使用しますが、外部ではプロセスとして表示されます。 Linuxでは、プロセスとスレッドの区別は、カーネルスレッドの文脈ではあまり意味がありません。それらはすべて同じアドレス空間を共有し、スケジューリングの観点から見ると、プロセスとスレッドはとにかく同じです。