カーネルブートローダーコードのセクションを読んでいます(スタンフォードのCS140 Pintos OSから):
# Configure serial port so we can report progress without connected VGA.
# See [IntrList] for details.
sub %dx, %dx # Serial port 0.
mov $0xe3, %al # 9600 bps, N-8-1.
# AH is already 0 (Initialize Port).
int $0x14 # Destroys AX.
プロセッサはこれらの命令をリアルアドレスモードで実行しています。おそらく、割り込みは、割り込みベクタテーブルの21番目(インデックス= 0x14)のエントリを見つけ、そこでハンドラを実行することによって処理されます。このソースによると、割り込みテーブルはリアルモードのBIOSによって初期化されます。このウィキペディアのページには、上記で使用したものを含め、使用可能なBIOS割り込みが一覧表示されています。
私の混乱は、リストされている割り込み例外番号が、Intelリファレンス(20-6ページ)のリアルモード予約割り込みの説明と実質的に矛盾しているという事実から来ています(また、このWikipediaページでも繰り返されています)
これらの割り込み番号はどのように競合を解消しますか?
伝説は、IBMがPCを作ったときにIntelアーキテクチャのマニュアルをわざわざ読んでいなかったことに遡ると思います。Intelは、最初の8086から、ハードウェア用に最初の32個のベクトルを予約しました。IBMはこれを無視してPCBIOSを指定し、16でサービスを開始しました(0x10-ビデオサービス)。ビデオ画面の現在のページを印刷するためのベクトル5に1つの奇妙なものがあります。ベクトル5は、境界チェック命令によって使用されます。
割り込み0x10は、「コプロセッサエラー」として存続します。浮動小数点プロセッサがオプションの補助チップだったときの名残。
あなたに関係する割り込み0x14は、シリアルポート処理のBIOSによって定義されました。仮想化の例外としてCPUによって。
リアルモードの場合、仮想化はありません。したがって、競合はありません。仮想実行モードで、int $ 0x14を実行する場合、CPUはidtの後に続きます。以来、実際の仮想例外は、仮想マシンにアクセス違反によって生じ、そして引き起こす終了仮想マシンモニタにを。[ exitは、仮想マシンの実行を停止させる条件に対してハイパーバイザーの人々が使用する用語です]。
したがって、あいまいさはなく、不適切に構築されたインターフェイスへのややばかげた順守だけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加