Skip to content

Latest commit

 

History

History
27 lines (26 loc) · 1.76 KB

README.md

File metadata and controls

27 lines (26 loc) · 1.76 KB

MULTIPLE USER MODE

このステップでは複数の user mode プログラムを同時に実行する方法を説明します. すでに, タイマー割り込み, 仮想アドレス上で user mode プログラムを実行する方法, の2つを説明をしています. それら2つを組み合わせ, タイマー割り込み発生のタイミングでプログラムを切り替える実装を行います.

タスク

今回の実装から実行される user mode プログラムをタスクと呼ぶようにします. これまでのステップでは実行される user mode プログラムは1つだけでしたが, 今後は(同じ) user mode プログラムを複数同時に動作させることになるため, user mode プログラムのインスタンスの意味でタスクという呼び名を使います.

memory layout

今回のステップではタスクは2つ存在しそれぞれタスク0(=task[0]), タスク1(=task[1]) と呼ぶことにします. どちらのプログラムも同じ ELF で, タスク0は物理アドレス 0x80100000, タスク1は物理アドレス 0x80200000 にロードされます. どちらも仮想アドレス 0x0 から始まる領域で動作します. 仮想アドレスを使用することで全く同じプログラムを複数同時に実行することが可能になります.

 +--------+
 |        |
 |task[1] |
 |        |
 +--------+ 0x80200000 -+
 |        |             |
 |task[0] |             |
 |        |             |
 +--------+ 0x80100000 -+   +--------+
 |        |             |   |        |
 | kernel |             |   |  task  |
 |        |             |   |        |
 +--------+ 0x80000000  +-> +--------+ 0x0
     pa                         va
multiple tasks - memory layout