タスク管理
https://kazusfhino.com/2024/09/15/jobmanagement/
OS が複数のプログラムや タスク(ジョブ)を効率的に実行するために、各ジョブの投入から完了までを行う機能
シングルコア・マルチコアを問わず発生する
処理フロー
e.g. grep 'hello' largetReadme.md の
from Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス
1. OS は新しい プロセス を生成する
2. OS はプロセスを レディキュー に投入する
3. スケジューラ がプロセスを CPU に割り当て、プロセスが CPU で実行を開始する
4. CPU ではプロセスの命令を実行し、ファイルの読み込みが必要になると、プロセスは 待機状態 となり I/O待ちキュー に入る
5. デバイスは I/O 操作(テキストからいくらかのバイトを読み込む)を実行する
6. I/O 操作が完了したら、OS はプロセスを レディキュー に移動する
7. CPU に空きができると、スケジューラはプロセスを再び CPU に割り当て、ファイルから読み込まれたデータを検索する処理を実行する
warning.icon このタイミングで、プロセスの実行中に 割り込み が発生する可能性がある
8. スケジューラのアルゴリズム(ラウンドロビンなど)に従い、プロセスをレディキューに戻して他のプロセスを実行したり、再度レディキューから取り出して実行したりを繰り返す
9. (テキストサイズや他のプロセス数にもよるが、)プロセスの実行が完了するまで、4 ~ 8 を繰り返す
10. 検索処理が終了し、プロセスは終了する
7 や 8 では コンテキストスイッチ が発生する
#OS