プロセスとは動いているプログラム
プロセスとは、メモリに読み込まれて動いているプログラムのことです。OS(オペレーティングシステム)は、少ないプロセッサを、たくさんのプロセスで順番に分け合います。
コンビニのレジが1台で、客が5人並んでいる場面を考えてください。1人ずつ短い時間で順に会計すれば、どの客も少しずつ前に進みます。OSがプロセッサでしているのは、これと同じことです。
このレッスンのゴール
メモ
OSがプロセッサをプロセスで分け合うしくみを、説明することができる。
キーワード
| ことば | いみ |
|---|---|
| プロセス | 動いているプログラム |
| レディキュー | 実行できる準備ができたプロセスの待ち行列 |
| タイムスライス | 1回にプロセッサを使える最大の時間 |
| コンテキストスイッチ | プロセッサを使うプロセスを入れかえること |
| PCB | プロセスの状態や番号を記録するOSの表 |
| スケジューラ | 次に動かすプロセスを選ぶOSの部分 |
学生が入力するセルは、このプレビューでは空白です。
プロセスは状態を行き来する
プロセスは、いつも動いているわけではありません。ふつう、次の3つの状態のどれかにあります。
実行中は、プロセッサを使っている状態です。実行可能は、動ける準備ができて、順番を待っている状態です。待ちは、ディスクやネットワークが終わるのを待っている状態です。待っている間は、プロセッサを使いません。
Linuxで自分の状態を見る
Linux では、/proc/self/status というファイルが、今そのコマンド自身のプロセスの情報を見せます。
次のコマンドは、その中の State の行だけを出します。読んでいる grep が今動いているので、R (running) と出ます。R は実行中の頭文字です。
今のプロセスの状態を出す
grep State /proc/self/statusここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
切りかえるのがコンテキストスイッチ
プロセッサを別のプロセスに渡すとき、OSは今のプロセスの途中経過を保存します。プログラムカウンタとレジスタです。これをPCBに書きます。
次に、渡す相手のPCBから途中経過を読み戻します。この入れかえがコンテキストスイッチです。切りかえている間、利用者の仕事は進みません。
PCBに入っているもの
| 項目 | 例 | 役目 |
|---|---|---|
| PID | 4162 | プロセスを指す番号 |
| 状態 | 実行可能 | 今どの状態か |
| プログラムカウンタ | 次の命令の番地 | 再開する場所 |
| レジスタの値 | 計算の途中の数 | 再開したときに元に戻す |
| メモリの情報 | ページテーブルの場所 | このプロセスのメモリの地図 |
| 開いているファイル | 3つ | 使っているファイルの一覧 |
学生が入力するセルは、このプレビューでは空白です。
切りかえの回数もLinuxは数える
Linux は、プロセスごとに切りかえの回数を数えています。自分から手放した回数と、時間切れで取り上げられた回数の2つです。
次のコマンドは、その2つの行の名前だけを出します。回数は動かすたびに変わるので、名前だけを取り出します。
切りかえ回数の項目名を出す
grep ctxt /proc/self/status | cut -d: -f1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「プロセッサが1つでも、たくさんのプロセスが同時に実行される」と考える人が多くいます。1つの核は、ある一瞬には1つのプロセスしか実行しません。切りかえが速いので、同時に見えるだけです。本当に同時に動かせる数は、核の数までです。
ラウンドロビンは順番に少しずつ
ラウンドロビンは、レディキューの先頭から順に、決まった時間だけ動かす方法です。使い切って仕事が残るプロセスは、キューの最後に戻ります。
例として、必要な時間が5、3、1のプロセスP0、P1、P2を、タイムスライス2で動かします。次の表の通りです。
例: 5、3、1を、2ずつ
| 順 | 動いたプロセス | 動いた時間 | 残り | そのあとのキュー |
|---|---|---|---|---|
| 1 | P0 | 2 | 3 | P1, P2, P0 |
| 2 | P1 | 2 | 1 | P2, P0, P1 |
| 3 | P2 | 1 | 0 (終了) | P0, P1 |
| 4 | P0 | 2 | 1 | P1, P0 |
| 5 | P1 | 1 | 0 (終了) | P0 |
| 6 | P0 | 1 | 0 (終了) | (空) |
学生が入力するセルは、このプレビューでは空白です。