リアルモード(リアルアドレスモードとも呼ばれる)は、すべてのx86互換CPUの動作モードです。このモードの名前は、リアルモードのアドレスが常にメモリ内の実際の位置に対応するという事実に由来しています。リアルモードの特徴は、20ビットのセグメント化されたメモリアドレス空間(1MBのアドレス指定可能なメモリ)と、すべてのアドレス指定可能なメモリ、I/Oアドレス、および周辺ハードウェアへの無制限の直接ソフトウェアアクセスです。リアルモードでは、メモリ保護、マルチタスク、またはコード特権レベルはサポートされません。
80286のリリースでプロテクトモードが導入される前は、x86 CPUで利用できるモードはリアルモードのみでした。[ 1 ]また、後方互換性のために、すべてのx86 CPUはリセット時にリアルモードで起動しますが、他のモードで起動した場合でも、他のシステムでリアルモードをエミュレートすることは可能です。
80286アーキテクチャでは、ハードウェアレベルのメモリ保護などを可能にするプロテクトモードが導入されました。しかし、これらの新機能を使用するには、プロテクトモード専用に設計された新しいオペレーティングシステムが必要でした。x86マイクロプロセッサの主要な設計仕様は、それ以前のすべてのx86チップ用に書かれたソフトウェアとの完全な後方互換性を持つことであるため、286チップは「リアルモード」で起動するように作られました。つまり、新しいメモリ保護機能をオフにして、8086および8088用に書かれたオペレーティングシステムを実行できるようにしたモードです。2018年現在、現在のx86 CPU(x86-64 CPUを含む)は、リアルモードのオペレーティングシステムを起動でき、エミュレーションや仮想化なしで、ほぼすべての以前のx86チップ用に書かれたソフトウェアを実行できます。2023年、インテルはX86S仕様で将来のCPUからリアルモードを削除することを提案しました。
IBMが導入したPC BIOSは、 DOSオペレーティングシステム(MS-DOS、DR-DOSなど)と同様に、リアルモードで動作します。初期のMicrosoft Windowsもリアルモードで動作していました。Windows /386ではプロテクトモードをある程度利用できるようになりましたが、Windows 3.0ではこれがより完全に実現され、Windows/386と同様にリアルモードとプロテクトモードのどちらでも動作できるようになりました。Windows 3.0には実際には「リアルモード」、「標準モード」、「386拡張モード」の3つのモードがありました。後者は80386プロセッサの仮想化機能の一部を必要とするため、80286では動作しませんでした。Windows 3.1ではリアルモードのサポートが削除され、少なくとも80286プロセッサを必要とする最初の主流オペレーティング環境となりました。これらのバージョンはいずれも、特定の機能でのみプロテクトモードに切り替わったため、現代のx86オペレーティングシステムとはみなされませんでした。Unix、Linux、OS/2、およびWindows NTは、起動時にCPUをプロテクトモードに切り替え、リアルモードに戻らず、常にプロテクトモードのすべての利点を提供するため、最新のOSとみなされています。64ビットオペレーティングシステムは、起動段階でのみリアルモードを使用し、その後OSカーネルがCPUをロングモードに切り替えます。[ 2 ]注目すべきは、80286のプロテクトモードは、80386で導入された改良されたプロテクトモードよりもかなり原始的であるということです。後者は386プロテクトモードと呼ばれることもあり、最新の32ビットx86オペレーティングシステムが動作するモードです。
8086、8088、および80186は20ビットのアドレスバスを備えていますが、Intelがこれらのプロセッサ用に選択した特殊なセグメントアドレッシング方式により、実際には21ビットの有効アドレスが生成されます。この方式では、16ビットのセグメント番号を4ビット左にシフトし(最下位が4つのゼロである20ビットの数値を作成)、それに16ビットのアドレスオフセットを加算します。セグメントとオフセットの両方が0xFFFFの場合に最大和が発生し、0xFFFF0 + 0xFFFF = 0x10FFEFとなります。8086、8088、および80186では、20ビットを超える有効アドレスの結果、アドレスはアドレス範囲のゼロ端に「ラップアラウンド」します。つまり、 2^20で割った余り(2^20 = 1048576 = 0x100000)が取られます。しかし、80286 は 24 ビットのアドレスを持ち、実モードでも 24 ビットの実効アドレスを計算します。したがって、セグメント 0xFFFF でオフセットが 0x000F より大きい場合、80286 は実際にメモリの 2メガバイト目の先頭にアクセスしますが、80186 以前のプロセッサでは [オフセット]-0x10 に等しいアドレスにアクセスします。これは、最初のメガバイトの先頭です。(80186 以前のプロセッサでは、アドレス 0 から始まるアドレス空間の最初の 1キロバイトは、割り込みベクタテーブルの固定位置であることに注意してください。)したがって、80286 以降の x86 CPU が実モードでアドレス指定できる実際のメモリ量は、1 MB + 64 KB - 16 B = 1,114,096 Bです。
80286より前のプログラムの中には、ラップアラウンド(モジュロ)メモリアドレッシング動作を利用するように設計されていたものがあったため、80286は後方互換性の問題を引き起こしました。21番目のアドレス線(チップから実際に出力される論理信号線)を論理ロー(ゼロを表す)に強制すると、以前のプロセッサのアドレス演算に一致するモジュロ2^20効果が得られますが、80286にはこの機能を実行する内部機能がありません。IBMがIBM PC/ATで80286を使用した際、80286のA20ピンとシステムバスの間に、A20アドレス線を有効または無効(ゼロに強制)にするソフトウェア設定可能なゲートを設けることでこの問題を解決しました。これはGate-A20(A20ゲート)として知られており、現在でもPCチップセットに実装されています。 IBM/MS-DOS 用のHIMEM.SYS拡張メモリドライバのほとんどのバージョンでは、ロード時に「A20 ハンドラ」がインストールされたというメッセージが表示されていたことで有名です。これは、Gate-A20 を制御し、プログラムのニーズに合わせて調整するソフトウェアです。保護モードでは、A20 ラインを有効にする必要があります。そうしないと、物理アドレス指定エラーが発生し、システムクラッシュにつながる可能性があります。最新のレガシーブートローダー( GNU GRUBなど) は A20 ラインを使用します。[ 3 ]
Intel は、x86 ファミリーにプロテクト モードを導入し、それを使用するオペレーティングシステムは完全に新しいモードで動作し、プロテクト モードのオペレーティングシステムで実行されるすべてのプログラムもプロテクト モードで使用されることを意図していました。リアル モードと、かなり制限のある 286 プロテクト モードとの間には大きな違いがあるため、リアル モード用に書かれたプログラムは、書き換えなければプロテクト モードでは実行できません。したがって、ユーザーが依存している既存のリアル モード アプリケーションが多数存在するため、リアル モードを放棄することは業界にとって問題となり、プログラマはモードを自由に切り替える方法を模索しました。しかし、プロセッサの使用に関する Intel の意図に沿って、80286 ではプロテクト モードへの切り替えは容易でしたが、リアル モードへの切り替えは容易ではありませんでした。386 より前は、プロテクト モードからリアル モードに戻る唯一の方法は、プロセッサをリセットすることでした。リセット後、常にリアルモードで起動し、8086 以降の以前の x86 CPU との互換性を維持します。プロセッサをリセットしてもシステムの RAM はクリアされないため、これは不便で非効率的ではありますが、実際には実行可能です。保護モードから、プロセッサの状態はメモリに保存され、その後プロセッサがリセットされ、リアルモードで再起動され、リアルモード コードを実行してメモリから保存された状態を復元します。その後、プログラムが保護モードに戻る準備ができるまで、他のリアルモード コードを実行できます。リアルモードへの切り替えは時間の面でコストがかかりますが、この手法により、保護モード プログラムが BIOS などのサービスを使用できるようになります。BIOS は完全にリアルモードで実行されます (元々は8088ベースのIBM パーソナル コンピュータモデル(マシン タイプ) 5150 用に設計されました)。このモード切り替え手法は、 DPMI (エミュレートされた DOS ではなく、実際の DOS 下) やDOS/4GWなどのDOS エクステンダーでも使用されており、保護モード プログラムが DOS 下で実行できるようにします。 DPMIシステムまたはDOSエクステンダーは、DOSまたはBIOS呼び出しを実行するためにリアルモードに切り替わり、その後、保護モードで実行されているアプリケーションプログラムに戻るために元のモードに戻ります。
NTカーネルをベースにしたWindows (起動時にリアルモードをバイパスする)が普及するにつれ、MS-DOSを使用するためにコンピュータをリアルモードで再起動する必要性はWindows 3.1x以降減少し、 Windows MEではサポートされなくなりました。新しいバージョンのWindows内でリアルモードを必要とするDOSアプリケーションを実行する唯一の方法は、 DOSBoxやx86仮想化製品などのエミュレータを使用することです。
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)