2011-12-29 12 views
2

2つのプロセス環境で、1つのプロセスがカーネルによって実行されるようにスケジュールされ、RAMで使用できないデータが要求されたとします。したがって、CPUはカーネルに何かが利用できないことを示し、プロセスは中断されます。その後、カーネルがCPUを介して実行する第2のプロセスをロードし、第2のメモリ位置(仮想メモリ)内のデータについて調査を開始し、それを取得した後、現在非アクティブであるメモリデータへのスワップによってメインメモリに戻し、プロセスを実行可能キューに戻して実行します。cpuがプロセスを実行している場合、誰がカーネルを実行していますか?

私たちは、コンピュータシステム内のすべてが唯一のCPUによって操作され得ることを知っているとCPUが継続的にプロセスコードを実行ビジー状態であるならば、誰がカーネルによって行われたタスクを実行するために、カーネルのコードを実行していますか? シナリオを説明できるかどうかお知らせください。

答えて

3

  1. ユーザーモードでの処理を実行されます。
  2. (システムコールの読み取り/書き込みが発行されたときなど)previleged命令やアクセスハードウェアを実行するためにカーネルモードでの処理に代わって実行します。
  3. ハードウェア割り込みをrepsonseで実行しています。すなわち割り込みコンテキストで動作する。 (特にプロセスには関係しません)、カーネルモードではyesです。
  4. soft irqのような遅延作業を処理するためにいくつかのカーネルスレッドを実行しています。何も実行することがない場合はCPUアイドルスレッドを実行する(タスクレット/のsoftirq)

あなたがスケジュールについて尋ね特にある場合、

  1. は、プロセスが実行され、今では、プロセスがCPUから削除され、たとえば、ハードディスクからデータを取得するために、読み取りコールを発行したと仮定カーネルはschedule()関数を呼び出します。そこでここでは、最初のプロセスがシステムコールを読み出すため、ユーザモードからカーネルモードに切り替わります。プロセスに代わって実行しているカーネルがハードディスクの読み取り操作を準備してからschedule()関数を呼び出す
  2. ハードウェア割り込みが発生し、現在実行中のプロセスが削除され、その割り込みの割り込みサービスハンドラが開始されるカーネルモードで実行します(明らかに)。

基本的に、カーネルはユーザプロセスの間に実行されます!

今すぐ削除?

シャーシ

+0

はい。ありがとうShash .. – ChandanK

4

カーネルは、ハードウェア割り込みの結果として、または何かをするプロセスによって呼び出された結果としてのいずれかで動作します。どちらの場合も、その時点で実行していたコードは、カーネルがそのジョブを終了するまで実行を停止します。

これは関数呼び出しと似ています。関数Aが関数Bを呼び出すと、関数Aは関数Bが何をして終了するのを待たなければならず、関数Aに制御を返します。複数のCPU、またはこれを達成するための魔法のようなものです。

+0

ありがとうございます。だから、私が得たことはすべてがCPUを通過しているということです。したがって、健全な状況では、カーネルコードはタスクを管理し、ユーザーに並列処理の錯覚を与えるオーバーヘッドであると想定できます。 – ChandanK

+0

@ckj正確に。 –

+0

しかし、真実は、複数のCPUで、または複数のコアを持つ単一のCPUであっても、並列処理は錯覚ではなく、現実のものです。また、カーネルは、各プロセスが実行されるようにするだけでなく、他のことも行います。 –

2

CPUは、連続処理コードを実行していません。 CPUが中断され、さまざまな操作が実行されます。割り込みはさまざまな理由で発生する可能性があります。リソースが使用可能になったり、前のアクションが完了したり、単にタイマーが消えたりします。

私はより詳細な情報については、ビデオのこのシリーズをお勧めします:時間、CPU(/秒)の任意の時点でhttp://academicearth.org/courses/operating-systems-and-system-programming

関連する問題