I/Oと割り込み
プロセッサが制御することのできるI/Oデバイスには様々な種類がある。
どのようなデバイスも次の3種類のレジスタを持つ。
I/Oデバイスに対する指令を書き込む。I/Oデバイスはこのレジスタの内容に従って動作する。
入出力装置の状態を表すレジスタである。プロセッサはこのレジスタの内容でI/Oデバイスの状態を判断する
I/Oデバイスとプロセッサ間でやりとりするデータを書き込む。
例:入力装置の場合は入力データ,出力装置の場合は出力データ
プロセッサにI/Oデバイスの動作が完了したことを伝える仕組みとしては
次のような仕組みがある。
プロセッサが入出力装置を監視し続ける
入出力装置がプロセッサに「割り込み信号」を送る。
割り込みの実装
割り込みはハードウエアで実現されている。入出力装置からプロセッサ
へはIRQ(割り込み要求線)と呼ばれる配線があり、プロセッサはIRQを
一つの命令の実行が終わる毎に確認し、割り込みが着ていれば割り込みハンドラと呼ばれるコードを呼び出す。
例;キーボード入力の場合:
キーを入力するとデータレジスタにキーコードが格納され、割り込みが
起こる。プロセッサはデータレジスタを参照し、キーコードを読み出す
多重割り込み、割り込みベクタ
割り込み番号に対応する割り込みハンドラのアドレスを保持する
テーブルを割り込みベクタと呼ぶ。割り込みベクタはメモリ上に存在し、そのアドレスは割り込みベクタレジスタに保持される。
IRQは複数存在するために同時に割り込みが起こる場合もある。
そのために割り込みには優先度が存在し、優先度の高い割り込みの
ハンドラから順に実行される。これを多重レベル割り込みと呼ぶ。
優先度の低い割り込みを割り込み禁止にすることをマスクするという。
例外
不正な命令や不正なメモリアクセス、不正な除算を行った時にも割り込みが発生する。これを例外と呼ぶ。
データの転送
プログラムI/O方式
プロセッサと入力装置の間でデータの転送を行う。プロセッサ自身が
データを入出力装置に転送し、制御レジスタを書き換える
DMA方式
入出力装置がメモリとの間で直接データを転送する。プロセッサが仲介しないために高速である。DMAによるデータの転送完了は割り込みによって通知される。
入出力装置への動作依頼
入出力装置を指定する方法として次の2つがある。
I/Oポートと呼ばれる領域に入出力装置が張り付いている。専用命令を用いてアクセスする。x86ではin命令,out命令
入出力装置内のレジスタがメモリの一部に張り付いているかのように
動作する。メモリを読み書きすることでレジスタの読み書きを行うことができる。
デバイスドライバ
デバイスの種類は豊富であるためにOSがすべてのデバイスのための制御ソフトを用意することはできない。よってデバイスドライバと呼ばれる各デバイスメーカーが開発する専用のソフトを使う。デバイスドライバはカーネルモードで動作するためにバグが残っていると致命的なことになる。
最終更新:2009年07月06日 21:02