16 ビット リアル モードで 1MB のメモリしかアクセスできない理由がわかりません。1MBの制限はメモリアクセスを示していますか? システムの起動時に下位互換性のために 16 ビット レジスタに制限されていることは知っていますが、メモリに対する制限はなぜ、どのように行われるのでしょうか?
3 に答える
アドレスは、左に 4 シフトされたセグメントを取得し、オフセットを追加することによって計算されました。1MB のアドレス空間を与える 20 ビットのアドレス。基本的にアドレス空間を2倍にするメモリサイクルとI / Oサイクルを区別するための追加の信号(8088または8086のピン配置をグーグル)がありました(そのように考えたい場合は21ビット)が、それらは特定の命令に結び付けられ (非 I/O は mem で I/O は I/O でした)、I/O スペースは 20 ビット全体を使用しませんでした。
周辺機器のレジスタ アクセスに I/O 空間を使用すると、1MB のアドレス空間に配置され、その背後に 1MB 以上のメモリ エクステンダがありましたが、1MB を指定した制御レジスタを使用して、一度に 1MB しか表示できませんでした。そして、それはすべてライブラリまたはオペレーティング システムに結び付けられていました。これはまさに、ビデオ カードやその他の周辺機器が現在コンピューターで機能する方法です。PCI(e) スペース全体は、古いものに応じて 1GB または 2GB と非常に小さく、すべての PCI 周辺機器がそのスペースを共有する必要があるため、ビデオ特にカードは、他の方法でピクセルを生成するか (この場所にこのシェーディングでこのような多角形を描いてください)、メイン プロセッサがピクセルにアクセスできるように RAM へのアクセスをスワップ アウトする必要があります。
当時の周辺機器(ビデオカードなど)も同様に機能しましたが、PCIはありませんでした。周辺機器の bios rom を見つけるために使用されるブート スキームがあり、そこから bios 呼び出しを使用して、その周辺機器が所有する周辺機器スペース内のバンクと通信したり切り替えたりしました。
Intel の世界は Motorola の世界に常に打ち負かされていました。彼らのフラットなアドレス空間は、私たちがいまだにこのフラットな空間の錯覚の中に住んでいるということです。セグメント オフセットは悪いという仮定ですが、現実はどこにでもあるので、今ではセグメント オフセット タイプのスキームを使用しています。 mmu または周辺機器への PCI ウィンドウのいずれかを使用します。ほとんどのコンピューターでは、購入した 1 GB または 2 GB の RAM を捨てて pcie が座る場所を確保するという問題点があります。ここ数年、wintel マシンのバイオスは 2 GB の高いウィンドウを許可しているため、 GB。しかし、4 GB を購入したときに 3 つしか入手できなかった理由や、16 GB を購入したときに 15 しか入手できなかった理由がわかりました。
左に 4 プラス オフセットをシフトした短い回答セグメントは 20 ビットであり、これは 1MB のアドレス指定可能スペースです。これは、プロセッサの 20 個のアドレス ピンに直接接続されています。データ バスは 8 (8088) または 16 (8086) ビットでしたが、内部的には 16 ビットでした。8088 の場合、ハードウェアは 16 ビット ワードの各半分を収集するために 2 サイクルを実行します。さらにいくつかの制御信号の電源とクロックがあり、それが部品のほぼ全体のピン配置でした。RAMは本質的にゼロ待機状態だったので、メモリとプロセッサの速度を一致させるか、少なくともプロセッサ以上のRAMを購入する必要がありました.
16 ビット DOS は 20 ビットのアドレッシング スキームを使用していたため、最大 1 MB のメモリ (RAM) しかアクセスできませんでした。ただし、16 ビット DOS がより多くのメモリにアクセスできるようにする「DOS エクステンダー」と呼ばれるものが利用可能でした。