OSTEP: 要約: プロセス
このシリーズは主に、オペレーティング システム入門 (オペレーティング システム: 3 つの簡単なピース)の放課後の宿題を完了するものであり、各章の要約と洞察も含まれています。ほとんどの質問には標準的な答えがありません。学生は、次のことを見つけることができます。論争や誤りについては、一緒に話し合ってください。
関連リソース
ウェブサイト:http://www.ostep.org/
宿題:https://github.com/remzi-arpacidusseau/ostep-宿題/
演習の答え
注: この章の演習を続行するには、Python をインストールする必要があります。
まず -H コマンドを使用して、process-run.py 内のいくつかのオプションを表示します。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -h
Usage: process-run.py [options]
Options:
-h, --help show this help message and exit
-s SEED, --seed=SEED the random seed
-P PROGRAM, --program=PROGRAM
more specific controls over programs
-l PROCESS_LIST, --processlist=PROCESS_LIST
a comma-separated list of processes to run, in the
form X1:Y1,X2:Y2,... where X is the number of
instructions that process should run, and Y the
chances (from 0 to 100) that an instruction will use
the CPU or issue an IO
-L IO_LENGTH, --iolength=IO_LENGTH
how long an IO takes
-S PROCESS_SWITCH_BEHAVIOR, --switch=PROCESS_SWITCH_BEHAVIOR
when to switch between processes: SWITCH_ON_IO,
SWITCH_ON_END
-I IO_DONE_BEHAVIOR, --iodone=IO_DONE_BEHAVIOR
type of behavior when IO ends: IO_RUN_LATER,
IO_RUN_IMMEDIATE
-c compute answers for me
-p, --printstats print statistics at end; only useful with -c flag
(otherwise stats are not printed)
1. IO 操作がなく、すべての CPU 使用率が使用されているため、100% である必要があります。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 5:100,5:100 -c -p
Time PID: 0 PID: 1 CPU IOs
1 RUN:cpu READY 1
2 RUN:cpu READY 1
3 RUN:cpu READY 1
4 RUN:cpu READY 1
5 RUN:cpu READY 1
6 DONE RUN:cpu 1
7 DONE RUN:cpu 1
8 DONE RUN:cpu 1
9 DONE RUN:cpu 1
10 DONE RUN:cpu 1
Stats: Total Time 10
Stats: CPU Busy 10 (100.00%)
Stats: IO Busy 0 (0.00%)
2.4(プロセス0) + 6(プロセス1 IO) + 1 = 11
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 4:100,1:0 -c -p
Time PID: 0 PID: 1 CPU IOs
1 RUN:cpu READY 1
2 RUN:cpu READY 1
3 RUN:cpu READY 1
4 RUN:cpu READY 1
5 DONE RUN:io 1
6 DONE WAITING 1
7 DONE WAITING 1
8 DONE WAITING 1
9 DONE WAITING 1
10 DONE WAITING 1
11* DONE RUN:io_done 1
Stats: Total Time 11
Stats: CPU Busy 6 (54.55%)
Stats: IO Busy 5 (45.45%)
3. プロセス 1 が IO と対話したときに CPU の制御が解放され、プロセス 0 が直接実行できるようになったため、7 秒しかかかりませんでした。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 1:0,4:100 -c -p
Time PID: 0 PID: 1 CPU IOs
1 RUN:io READY 1
2 WAITING RUN:cpu 1 1
3 WAITING RUN:cpu 1 1
4 WAITING RUN:cpu 1 1
5 WAITING RUN:cpu 1 1
6 WAITING DONE 1
7* RUN:io_done DONE 1
Stats: Total Time 7
Stats: CPU Busy 6 (85.71%)
Stats: IO Busy 5 (71.43%)
4. CPU と IO は同時に動作できないため、再び 11S に戻ります。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 1:0,4:100 -c -p -S SWITCH_ON_END
Time PID: 0 PID: 1 CPU IOs
1 RUN:io READY 1
2 WAITING READY 1
3 WAITING READY 1
4 WAITING READY 1
5 WAITING READY 1
6 WAITING READY 1
7* RUN:io_done READY 1
8 DONE RUN:cpu 1
9 DONE RUN:cpu 1
10 DONE RUN:cpu 1
11 DONE RUN:cpu 1
Stats: Total Time 11
Stats: CPU Busy 6 (54.55%)
Stats: IO Busy 5 (45.45%)
5. 質問 3 と同じ 7S に戻ります。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 1:0,4:100 -c -p -S SWITCH_ON_IO
Time PID: 0 PID: 1 CPU IOs
1 RUN:io READY 1
2 WAITING RUN:cpu 1 1
3 WAITING RUN:cpu 1 1
4 WAITING RUN:cpu 1 1
5 WAITING RUN:cpu 1 1
6 WAITING DONE 1
7* RUN:io_done DONE 1
Stats: Total Time 7
Stats: CPU Busy 6 (85.71%)
Stats: IO Busy 5 (71.43%)
6. プロセス 0 が最初の IO の実行を終了した後、すぐには実行されず、他のプロセスの実行が完了するのを待ってから IO の実行を続行するため、効果的に使用することはできません。その結果、IO と CPU が最初の IO の実行時に使用されなくなります。一部の時間は同じ時間であり、時間の無駄です。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 3:0,5:100,5:100,5:100 -c -p -S SWITCH_ON_IO -I IO_RUN_LATER
Time PID: 0 PID: 1 PID: 2 PID: 3 CPU IOs
1 RUN:io READY READY READY 1
2 WAITING RUN:cpu READY READY 1 1
3 WAITING RUN:cpu READY READY 1 1
4 WAITING RUN:cpu READY READY 1 1
5 WAITING RUN:cpu READY READY 1 1
6 WAITING RUN:cpu READY READY 1 1
7* READY DONE RUN:cpu READY 1
8 READY DONE RUN:cpu READY 1
9 READY DONE RUN:cpu READY 1
10 READY DONE RUN:cpu READY 1
11 READY DONE RUN:cpu READY 1
12 READY DONE DONE RUN:cpu 1
13 READY DONE DONE RUN:cpu 1
14 READY DONE DONE RUN:cpu 1
15 READY DONE DONE RUN:cpu 1
16 READY DONE DONE RUN:cpu 1
17 RUN:io_done DONE DONE DONE 1
18 RUN:io DONE DONE DONE 1
19 WAITING DONE DONE DONE 1
20 WAITING DONE DONE DONE 1
21 WAITING DONE DONE DONE 1
22 WAITING DONE DONE DONE 1
23 WAITING DONE DONE DONE 1
24* RUN:io_done DONE DONE DONE 1
25 RUN:io DONE DONE DONE 1
26 WAITING DONE DONE DONE 1
27 WAITING DONE DONE DONE 1
28 WAITING DONE DONE DONE 1
29 WAITING DONE DONE DONE 1
30 WAITING DONE DONE DONE 1
31* RUN:io_done DONE DONE DONE 1
Stats: Total Time 31
Stats: CPU Busy 21 (67.74%)
Stats: IO Busy 15 (48.39%)
7. プロセス 0 は IO 終了直後に実行され、次の IO ラウンドの実行を継続します。このとき、他のプロセスは CPU を使用でき、IO と CPU の両方が同時に使用できるようにしようとします。
yzy@yzy-virtual-machine:~/ostep-homework/cpu-intro$ python3 process-run.py -l 3:0,5:100,5:100,5:100 -c -p -S SWITCH_ON_IO -I IO_RUN_IMMEDIATE
Time PID: 0 PID: 1 PID: 2 PID: 3 CPU IOs
1 RUN:io READY READY READY 1
2 WAITING RUN:cpu READY READY 1 1
3 WAITING RUN:cpu READY READY 1 1
4 WAITING RUN:cpu READY READY 1 1
5 WAITING RUN:cpu READY READY 1 1
6 WAITING RUN:cpu READY READY 1 1
7* RUN:io_done DONE READY READY 1
8 RUN:io DONE READY READY 1
9 WAITING DONE RUN:cpu READY 1 1
10 WAITING DONE RUN:cpu READY 1 1
11 WAITING DONE RUN:cpu READY 1 1
12 WAITING DONE RUN:cpu READY 1 1
13 WAITING DONE RUN:cpu READY 1 1
14* RUN:io_done DONE DONE READY 1
15 RUN:io DONE DONE READY 1
16 WAITING DONE DONE RUN:cpu 1 1
17 WAITING DONE DONE RUN:cpu 1 1
18 WAITING DONE DONE RUN:cpu 1 1
19 WAITING DONE DONE RUN:cpu 1 1
20 WAITING DONE DONE RUN:cpu 1 1
21* RUN:io_done DONE DONE DONE 1
Stats: Total Time 21
Stats: CPU Busy 21 (100.00%)
Stats: IO Busy 15 (71.43%)
8. ランダムテスト
概要と洞察
- プロセスは実行中のプログラムです。これにはいくつかのマシン状態があり、その中心となるのはメモリとレジスタ (プログラム カウンタ、スタック ポインタなど) です。
- プログラムを実行すると、オペレーティング システムはまずコードと静的データをプロセスのメモリに読み込みます。次に、プロセスのランタイム スタックにメモリの一部を割り当てます(ローカル変数、関数パラメータ、戻りアドレスなどを保存するために使用されます)。プロセスのヒープに一部のメモリを割り当てます(要求された動的に割り当てられたデータ、グローバル変数などを表示します)。IO の初期化など、他の初期化タスクを実行します。
- プロセスのステータスは、実行中、準備完了、ブロックに分けられます。