286におけるプロテクトモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/24 06:19 UTC 版)
「プロテクトモード」の記事における「286におけるプロテクトモード」の解説
「Intel 80286」も参照 最初に導入された80286においては24ビットの物理アドレス空間へのアクセス、そして1セグメントあたり最大64キロバイトの空間を提供していた。これまでに述べた機能を使ってセグメントレジスタを意識したセグメント方式の仮想記憶を使ったOS環境を作成することが可能になった。しかし286リリース当時、プロテクトモードはすぐに広く使われたわけではない。プロセッサをリセットする以外にリアルモードに戻ることができないため、BIOSまたはDOSコールにアクセスすることができないなどの欠点があり、幅広い採用が妨げられた。幅広い採用が見送られた他の要因として、286 では4本のセグメントレジスタでそれぞれ16ビットのセグメントしかアクセスできなかった。すなわち一度にアクセスできるメモリの範囲は 4*216 バイト(256キロバイト)に限られていた。 286 は 8086 との互換性を保つため、起動時にはリアルモードで動作を開始するようになっていた。リアルモードでは 8086 と全く同じ動作をするので、古いソフトウェアも 286 で修正せずに動作することができる。286 の拡張機能にアクセスするには、オペレーティングシステムがプロセッサをプロテクトモードに移行させる必要がある。それによって24ビット・アドレッシングが可能になり、224 バイト(16メガバイト)のメモリにアクセス可能となる。 286のプロテクトモードではセグメントディスクリプタの「Presentビット」の属性を使用した仮想記憶管理が行われる。OSがセグメントの内容をハードディスクにスワップアウトすると、「Presentビット」を0にする。アプリケーションプログラムがこのセグメントの値をセグメントレジスタにロードすると「セグメント不在例外(Not Present)」INT#11が発生する。OSはハードディスクからセグメントの内容をスワップインし、「Presentビット」を1にする。その後アプリケーションプログラムは実行を再開する。 プロテクトモードではプログラムのバグによってプロテクトモードのルールに反する不正な値をセグメントレジスタにロードした場合「一般保護例外 (General Protetion Fault)」INT#13 が発生するが、OSやCPUは、アプリケーションプログラムが本来ロードしようとしていた正しい値がわからず、再実行ができない状態になる。 80386では、セグメントリミットが4GBのフラットモデルを使用すれば、アプリケーションプログラムがセグメントレジスタのロードを行う必要はなくなる。
※この「286におけるプロテクトモード」の解説は、「プロテクトモード」の解説の一部です。
「286におけるプロテクトモード」を含む「プロテクトモード」の記事については、「プロテクトモード」の概要を参照ください。
- 286におけるプロテクトモードのページへのリンク