v6read#4
TRANSCRIPT
オペ―レーティングシステムの読み書き#4
2011/11/21
Nagoya geekbar
今回は
アドレス空間の切り替え
コンテキストの退避・復元
割り込みが起こると……..
text
data
bss
stack
CPU PC
text
data
bss
stack
PSWのモードがカーネルモードに変わり、空間が切り替わる。割り込みの種類に応じて、ベクターテーブルの値がPCに書き込まれる
① ②
③
割り込みの種類に応じて、ベクターテーブルの値がPCに書き込まれる
アプリケーション カーネル
struct user
空間の切り替え 1
text
data
bss
stack
CPU PC
text
data
bss
アプリケーション カーネル PSW
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
00: カーネルモード
11: ユーザモード
11用 00用
stack
I/Oレジスタ
アプリケーションの動作時
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
•PSWのモードはユーザ
•PCはアプリのtextセグメントを指す
1
PSW PC
kstack kstack kstack kstack
割り込みの発生-空間の切り替え
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
•PSWのモードがカーネルに
•アドレス空間の制御レジスタがカーネルモードに切り替わる
1
PSW PC
kstack kstack kstack kstack
text
data
bss
割り込みの発生-割り込みベクタ
text
data
bss
stack
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
•割り込みベクタのエントリを選択してPCに
1
PSW PC
kstack kstack kstack kstack
•1のアドレスと割り込み時のレジスタを退避
text
data
bss
割り込みの発生-割り込みベクタ
text
data
bss
stack
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
•割り込みベクタのエントリを選択してPCに
1
PSW PC
kstack kstack kstack kstack
Vector device
004 Bus Timeout
010 Illegal instruction
014 Bpt-trace
024 iot
034 Power failur
114 Emulator tarp
instruction
240 11/10 parity
244 Floting point error
250 Segmentation violation
Vector device entry
060 Teletype input klin
064 Teletype output klou
070 Paper tape input pcin
074 Paper tape output pcou
100 Line clock kwlp
104 Programmable clock kwlp
200 Line printer lpou
220 RK disk driver rkio
割り込みの発生ーハンドラの処理
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
2
PSW PC
kstack kstack kstack kstack
割り込みの発生ーハンドラの処理
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
1
PSW PC
kstack kstack kstack kstack
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
カーネル用
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
アプリ用
•処理が終わったら、退避したレジスタ、PCを復元して、PSWをアプリモードに
•割り込み時点に復帰
以上の説明は、割り込み発生時から、復帰までにプロセスの切り替えが発生しない場合
条件によっては以下の処理でプロセスの切り替えが発生
1. procの検索と選択
2. user構造の切り替え
3. User構造+kstackに退避した状態の復元
4. アプリへの復帰
プロセスの切り替えー選択
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
PSW PC
kstack kstack kstack kstack
Procの検索(スケジューラ)
↑次に動かすアプリ(プロセス)のprocを見つける
プロセスの切り替えーuserの切り替え
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
PSW PC
kstack kstack kstack kstack
proc
プロセスの切り替えーuserの切り替え
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
PSW PC
kstack kstack kstack kstack
proc
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
アプリ用 空間管理用のレジスタを更新
プロセスの切り替えーモードの切り替え
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
PSW PC
kstack kstack kstack kstack
proc
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
アプリ用
•PSWをユーザに切り替え
•PCを復元
•退避していた、PCとレジスタを復元
プロセスの切り替えー完了
text
data
bss
stack
text
data
bss
user
IOレジスタ
text
data
bss
stack
user
text
data
bss
stack
user
text
data
bss
stack
user
PSW PC
kstack kstack kstack kstack
proc
APR0
APR1
APR2
APR3
APR4
APR5
APR6
APR7
アプリ用
おわり