差分

移動先: 案内検索

プロセス管理

130 バイト除去, 2008年11月20日 (木) 13:33
/* プロセスの基本的概念 */
プログラムが動作する実行実体がプロセスです。もっとも単純化して説明すると、プログラムの実行のことです。それではあまりなので、もうちょっと概念的にどのような位置づけなのか考えてみます。プログラムが動作する実行実体のことをプロセスと呼びます。単純化して説明すると、プログラムの実行のことです。それで説明が終わるのはあんまりなので、もうちょっと概念的にどのような位置づけなのか考えてみます。
ここではリソース(計算資源)という言葉を使って説明してみます。プログラムが実行する際のいろいろなリソースの1つとして、CPUリソースがあります。まずそのCPUリソースで考えてみましょう。円周率πという視点から説明してみます。プログラムが実行する際のいろいろなリソースの1つとして、CPUリソースがありますが、まずそのCPUリソースで考えてみましょう。円周率π
<ref> GNU/Linux上で円周率の計算をおこなう http://h2np.net/pi/</ref>
を小数点以下3300万桁まで求めるプログラムがここにあるとします。このπを求めるには、数分、数十分という具合に長いCPU実行時間が必要です。を小数点以下3300万桁まで求めるプログラムがここにあるとします。このπを求めるには、数分、数十分という具合に長いCPU実行時間が必要です。
ユーザ側の視点から見てみましょう。CPUを1つしか搭載していないシステム上でユーザがπを求めるプログラムを3つ同時に動かしたユーザ側の視点から見てみましょう。CPUを1つしか搭載していないシステム上でユーザがπを求めるプログラムを3つ同時に動かした
<ref>同じ答えを3つも必要ないというツッコミはここではなし。</ref>
とします。もちろん遅いでしょうが計算は3つ同時に動いているように見えます。
;補足: 話を複雑にしないために、ここではマルチコアとかハイパースレティングなどの能力も持っていない単純なCPUとします。話を単純化するために、ここではマルチコアとかハイパースレティングなどの能力も持っていない単純なCPUとします。
もう一度ユーザ側視点に戻って、この状態を見てみると、仮想的なリソースとしてのCPUリソースはプログラムに割り当てられ、使っているユーザは同時に3つのプログラムが並行して動いているように見えます。もう一度ユーザ側視点に戻って、この状態を見てみると、仮想的なリソースとしてのCPUリソースはプログラムに割り当てられ、使っているユーザは同時に3つのプログラムが並行して動いているように見えます。
==== カーネル側から見る ====
今度はカーネル側から見てみましょう。物理的なCPUが1個しかありません。ですから、まったく同時に複数のプログラムが処理できているわけではありません。1つの物理的なCPUを専有できるのは1つのプログラムです。今度はカーネル側から見てみましょう。物理的なCPUが1個しかありません。ですから、まったく同時に複数のプログラムが処理できているわけではありません。ある一瞬においては1つの物理的なCPUを専有できるのは1つのプログラムだけです。また、その実行のためにCPUリソース以外にも必要なリソースも割り当てられています。
オペレーティングシステムは何らかのやりくりをして、本当は1つしかない物理的CPUを個々のプログラムのCPUリソースに割り当てなければなりません。個々のプログラムはあたかも自分が専有しているようなCPUリソースを持っているように見せかける必要があります。概念的に、この割り当てられたリソースを使って、実行する主体をプロセスと呼ぶことができます。この時、この割り当てられたリソースを使って実行する主体をプロセスと呼ぶことができます。
;調べてみよう:個々のプロセスの持っているデータ構造はsched個々のプロセスのデータ構造はsched.hに定義されているstruct task_structです。。個々のプロセスが保持する情報(とリソース)にはどのようなものがあるかチェックしてみよう。
スケジュリング実行リソースを個々のプログラム実行に割り当てて、実行単位プロセスの説明は済みました。しかし、今度はプロセスを実際にCPUに割り当てていく必要があります。その割り当てるためにスケジュール(予定)を立て処理を進めていく必要があります。それがスケジュリングです。スケジュリングはこう少し先で説明します。実行するために必要なリソースを個々のプログラム実行に割り当てて、実行単位プロセスの説明を試みました。さて、今度はプロセスを実際にCPUに割り当てていくことを考えてみましょう。プロセスを割り当てるためにスケジュール(予定)を立て処理を進めていく必要があります。それがスケジュリングです。スケジュリングを説明するまえに、もう少しプロセスをみてみましょう。
=== プロセス・タスク・スレッド ===
匿名利用者