マルチタスク - kentakozuka/yetos GitHub Wiki
ここでいうマルチタスクとは「複数のタスク(仕事)を「同時」に処理すること」を指します。また、コンテキストとは「あるタスクを処理するために必要なデータや変数をまとめたもの」を意味しています。
マルチタスクの実現方法
マルチタスクには2つの方法がある
- 各コンテキストを別々のCPUコアで動作させる(複数のコンテキストが真に動く:並列処理)
- CPUコアで実行するコンテキストを時分割で切り替える(コンテキストが同時に動いているように言える:並行処理)
時分割で切り替える
CPUはあくまでも、レジスタの値を参照して機械語を1つずつ実行しているだけ
- RIPが指すメモリ領域から機械語を読み取り
- RIPを次の命令を指すように更新
- 機械語を実行する
レジスタの値を変更することで、CPUが実行するコンテキストを切り替える
- RIP: 次の命令のアドレスを指す
- RSP: スタックの先頭アドレスを保持
時分割マルチタスクの種類
- 協調的マルチタスク: 1つのタスクがCPUを独占することなく,適切なタイミングでコンテキストを切り替える処理を呼び出す
- プリエンプティブマルチタスク: CPUの割り込みを使って強制的にタスクを切り替える
優先度
- マウスのタスクを優先する
スリープ
-
やるべきことがなくなったらhltする
-
実行可能状態
-
実行状態
-
スリープ状態