OSを勉強すると、論理メモリという概念が見つかります。論理メモリが必要なのはなぜですか?CPUは論理メモリをどのように生成しますか?「&ptr」演算子の出力は論理アドレスまたは物理アドレスですか?論理メモリと仮想メモリですか?同じ?
1 に答える
CとC++について話している場合sizeof
、サイズが返され、アドレスは返されません。また、CPUはメモリを生成しません。
x86 CPUでは、アドレスの計算と変換にいくつかのレイヤーがあります。x86プログラムは、セグメントセレクタ(これは必ずしも命令で明示的に指定されるとは限らず、、、、またはセグメントレジスタから取得される場合があります)とオフセットの2つの項目で構成される論理アドレスで動作します。cs
ds
ss
es
次に、セグメントセレクタはセグメントベースアドレスに変換されます(直接(リアルアドレスモードおよびCPUの仮想8086モードでは16倍)、または特別なセグメント記述子テーブル(グローバルまたはローカル、GDTまたはLDT、 CPUのプロテクトモードでは、セレクタは記述子テーブルへのインデックスとして使用され、そこからベースアドレスがプルされます)。
次に、合計セグメントのベースアドレス+オフセットが線形アドレス(別名仮想アドレス)を形成します。
CPUがリアルアドレスモードの場合、それが最終的な物理アドレスです。
CPUがプロテクトモード(または仮想8086)の場合、その線形/仮想アドレスは、ページテーブルを使用して物理アドレスにさらに変換できます(もちろん、ページ変換が有効になっている場合は、そうでない場合は、最終的な物理アドレスになります。良い)。
物理メモリはRAMまたはROM(またはフラッシュ)です。仮想メモリは、ディスクストレージのスペースによって拡張された物理メモリです(SSDがある場合と同様に、フラッシュである可能性があります)。
あなたは本当にこれを読む必要があります。わからないようです。