学习OS的时候,发现了一个逻辑内存的概念。那么为什么需要逻辑内存?CPU是如何产生逻辑内存的?“ &ptr ”算子的输出是逻辑还是物理地址?是逻辑内存还是虚拟内存?相同的?
问问题
2150 次
1 回答
0
如果您在谈论 C 和 C++ sizeof
,它会返回大小而不是地址。而且 CPU 不会产生任何内存。
在x86 CPU 上,地址计算和转换有几个层次。x86 程序使用由两项组成的逻辑地址进行操作:段选择器(该选择器并不总是在指令中明确指定,可能来自cs
、或段寄存器)和偏移量。ds
ss
es
然后段选择器被翻译成段基地址(或者直接(在 CPU 的实地址模式和虚拟 8086 模式下乘以 16)或通过使用特殊的段描述符表(全局或本地,GDT 或 LDT,在 CPU 的保护模式下),选择器用作描述符表的索引,从中提取基地址)。
然后总和段基地址+偏移量形成一个线性地址(AKA虚拟地址)。
如果 CPU 处于实地址模式,那是最终的物理地址。
如果 CPU 处于保护模式(或虚拟 8086),则该线性/虚拟地址可以通过页表进一步转换为物理地址(如果启用了页面转换,当然,否则,它是最终的物理地址为出色地)。
物理内存是您的 RAM 或 ROM(或闪存)。虚拟内存是由磁盘存储空间扩展的物理内存(可以是闪存,也可以是我们现在拥有的 SSD)。
你真的需要阅读这个。你似乎不知道。
于 2013-03-22T14:41:32.453 回答