CPUアーキテクチャ(4-1)
CPU(central processing unit)
・制御装置
・・・命令を解読し、実行させる
・ALU(arithmetic and logic unit)
・PC(program counter)
・・・プログラムを実行するときに使われるのがPC。次の命令のアドレスが入っています。
・CPU状態(CPU status)
・・・CPUがどんな状態になっているか。(OSにとって重要)
・汎用レジスタ(general purpose register)
<<重要>>
◎OSのプログラムが動くときのCPU状態と、userのプログラムが動くときのCPU状態は違う!!!
◎OSのプログラムが動くときのモード(状態)を「特権モード(マスターモード)」
userのプログラムが動くときのモード(状態)を「非特権モード(スレームモード)」という。
◎「特権モード」はすべてのことができ、「非特権モード」はやれることが制限されている。
割込み(4-2)
「割込み(interrupt)」とは、実行しているプログラムを打ち切ることです。たとえば、あなたが本を読んでいるとき、途中で電話がかかってきたとしたら、それは電話に「割り込まれた」ことになります。
割込みには「フォルト(内部割込み)」と「外部割込み」の2つの種類があります。
☆ちなみに、内部…CPUそのもの+メモリ、 外部…I/O関係
フォルト(fault)の割込み理由には、
(1) 障害発生 … 「メモリがなにか変だぞ(故障)」とか
(2) 記憶侵入 … 多重プログラミングの時、お互いのデータに悪さ(データを書き換えられたり)をすること
(3) 不正命令の実行 …1.不正命令=定義されていない命令
(命令コードを8ビットで表すと256種類の状態(命令)が作れますが
実際は200しか定義されていない場合に、56種類は何も定義されていません)
2.自分で命令を壊してしまった場合
(4) SVC(supervisor call)命令の実行…トラップ命令ともいう
があり、数字がそのまま優先順位になります。
外部割込みの割込み理由には、
(2) 時間的要因 … コンピュータは必ずタイマ(お風呂の水をためるときに使うものだと考えてください)を
持っていて、15秒と設定すると15秒ごとに割込みをかけてくれる。
(3) オペレータ要求 … オペレータがボタンを押すなどして割込む
(4) 入出力の完了 … 計算と入出力を並行して行うと、入出力はCPUに比べて時間がかかるため時間短縮に
なる。そのとき、CPUが逐一入出力が終わったかを調べにいく(ポーリング)のは
激しくダルイので、処理が終わったことを割込みで知る。
があり、数字がそのまま優先順位になります。
Q:なぜ、タイマ(時間的要因)が入出力割込みより優先されるのでしょうか?
例えば、お風呂に水をためていたとします。時間が経過したとき、水を止めに行かないと水があふれちゃう。
しかし、入出力は処理が終わったあと、ちょっとくらい待たせても入出力が消えるわけではないので、しばらく
放っておいても大丈夫だから。
Q:ユーザーがOSに何かを要求したいときはどぅするの?
userは非特権モードで動いています。でも、userがOSに何かを要求したいときには、「トラップ命令」を
実行して、割込み(フォルト)を起こす。(userがOSに電話をかけて処理を要求する、みたいな感じです)
割込みビットとマスクビット(4-3)
「割込みが起きたかどうかを、CPUはどうやって分かるのか?」について考えます。
「割込みビット」と「マスクビット」が(例えば)6ビットずつあります。 割込みが発生すると割込みビットの
(それぞれ1番上はタイマ割込み用とか2番目はオペレータ要求用などと割込みの種類に対応しています)その
対応しているビットが1に変わります(通常は0になっている)。
CPUはマスクビットを「あるタイミング」で調べに行きます。(調べるタイミングが重要!!)
↓
割込みはすべて独立で動いているため、もしかしたら6つ全部が同時に起る可能性もあります
↓
(そのとき、CPUはどれを見に行く?)
(優先度の高いビットから調べたい・・・でもその優先度はどうやって調べる?)
↓
そのとき使われるのが、「マスクビット」です!(マスク=目隠し)
マスクビット(mask bit)
0のときはマスクがかかっていて見えない、1のときはマスクがはずされ見える。と考えます。
マスクビットが0のときは、割込みビットが1になっても見えないので検出されません。ほったらかす。
◎優先度1位は、いつも見えるようにしておきます(=1にしておく)。
割込みビットもマスクビットも1のとき(以後、このことをAとします)、他の割込みがかかったときには
そっちをやらなくてはいけません。しかし、Aの割込みより優先順位が低いものはマスクビットを0にして
しまうことで、割込みがかかっても無視することができます。
◎優先度が低い割込みをやっているときは、マスクビットをすべて1にしておけばオッケ〜♪
- マスクビットの働きはなにか。
- マスクビットがないとどうなるか。
- 優先順位の高い割込みをしているのに優先順位の低い割込みに切り替わってしまう。
割込みの検査(4-4)
「割込みがなかったら、PCで指定されたアドレスにある命令を実行」は、1つの命令が終わる度に割込みを調べに
行くことを意味しています。つまり、一定時間ごとに調べにいくのではない(=1つの機械語の命令でも実行時間は
まちまち)ということ。
「割込みがあったら、PCの内容とCPUの状態を(メモリへ)待避し、
割込み処理ルーチンの先頭アドレスをPCに入れ、PCで指定されたアドレスにある命令を実行する」
割込み発生時(4-5)
図の通り。そのまんま。
|