マルチタスク - kentakozuka/yetos GitHub Wiki

ここでいうマルチタスクとは「複数のタスク(仕事)を「同時」に処理すること」を指します。また、コンテキストとは「あるタスクを処理するために必要なデータや変数をまとめたもの」を意味しています。

マルチタスクの実現方法

マルチタスクには2つの方法がある

  • 各コンテキストを別々のCPUコアで動作させる(複数のコンテキストが真に動く:並列処理)
  • CPUコアで実行するコンテキストを時分割で切り替える(コンテキストが同時に動いているように言える:並行処理)

時分割で切り替える

CPUはあくまでも、レジスタの値を参照して機械語を1つずつ実行しているだけ

  1. RIPが指すメモリ領域から機械語を読み取り
  2. RIPを次の命令を指すように更新
  3. 機械語を実行する

レジスタの値を変更することで、CPUが実行するコンテキストを切り替える

  • RIP: 次の命令のアドレスを指す
  • RSP: スタックの先頭アドレスを保持

時分割マルチタスクの種類

  • 協調的マルチタスク: 1つのタスクがCPUを独占することなく,適切なタイミングでコンテキストを切り替える処理を呼び出す
  • プリエンプティブマルチタスク: CPUの割り込みを使って強制的にタスクを切り替える

優先度

  • マウスのタスクを優先する

スリープ

  • やるべきことがなくなったらhltする

  • 実行可能状態

  • 実行状態

  • スリープ状態