私たちはプログラムがプロセスであることを知っています(例:gedit、ssh ...など)。
カーネルとドライバはどうですか?
別のプロセスですか?
前任者:
カーネルコードを実行するプロセスです。
プロセスBはドライバfooを実行する。
答え1
Unixスタイルのコンテキストでは、一部の人々はカーネルを「プロセス0」(プロセス1より前init
)と考えています。しかし、これは正確ではありません。これは、カーネルがプロセスとは異なる方法で予約されているためです。
通常、Unixスタイルのカーネルは特定のイベントに応答してのみ実行されます。これらのイベントは2つの3つのカテゴリに分類されます。
システムコール:プロセスがシステムコールを呼び出すと、これは呼び出しプロセスのコンテキスト内で発生し、他のプロセスは含まれません。
ハードウェア割り込み:ハードウェアがメインCPUの注意を必要とするときにハードウェア割り込みを発行し、それを処理するためにカーネルを呼び出します。オペレーティングシステムごとに異なる処理を行いますが、ほとんどの場合、初期割り込み処理には新しいプロセスは含まれません。
エラー(ハードウェア割り込みの一形態と考えることができます):問題が発生してCPUに「責任ある大人」の注意が必要な場合は、エラーを発生させ、それを処理するためにカーネルを呼び出します。これは失敗プロセスのコンテキストで発生します。たとえば、プロセスがマップされていないメモリにアクセスすると発生します。プロセスがそのように許可されている場合、カーネルは欠落しているメモリをマップし、それをプロセスに返します。そうでない場合、カーネルはプロセスを終了します。
一部のカーネルは、いくつかのタスクを実行するためにプロセスを使用します。Linux はプロセスを使用して長期実行タスクを実行します。。これにはデバイスドライバが含まれます。、長期実行ジョブの場合、すべてのデバイスドライバが使用されるわけではありません。ほとんどのシステムでは、デバイスドライバはカーネルとは別に実行されません。ロードされるとカーネルの一部になります。
また、見ることができますLinuxカーネルは、どのプロセスがシステムコールを行ったかどうかを知ることができますか?
上記のすべては、一般的なUnixスタイルの大きなカーネルを想定しています。マイクロカーネル別のアプローチをとると、一般的にカーネル責任の多くはプロセスによって処理されると考えられます。バラよりハード例えば。