当我研究操作系统时,我发现了逻辑内存的概念。那么为什么需要逻辑内存?CPU如何生成逻辑内存?“& ptr ”运算符的输出是逻辑还是物理地址?逻辑内存和虚拟内存是一样的吗?
答案 0 :(得分:0)
如果你在谈论C和C ++的sizeof
,它会返回一个大小,而不是一个地址。并且CPU不会生成任何内存。
在 x86 CPU上,地址计算和翻译有几个层。 x86程序使用逻辑地址运行,其中包含两个项目:段选择器(此指令并不总是在指令中明确指定,可能来自cs
, ds
,ss
或es
段注册)和偏移。
段选择器然后被转换为段基地(直接(在实际地址模式和CPU的虚拟8086模式下乘以16)或者通过使用特殊的段描述符表(全局或本地,GDT或LDT,在CPU的保护模式下),选择器用作描述符表的索引,从那里基址拉了)。
然后总和段基地址 + 偏移量形成线性地址(AKA 虚拟地址)。< / p>
如果CPU处于实际地址模式,那就是最终的物理地址。
如果CPU处于保护模式(或虚拟8086),线性/虚拟地址可以通过进一步转换为物理地址页表(如果启用了页面翻译,当然,否则,它也是最终的物理地址)。
物理内存是您的RAM或ROM(或闪存)。 虚拟内存 物理内存扩展了磁盘存储空间(可能是闪存以及我们现在拥有的SSD)。
你真的需要阅读这篇文章。你似乎不知道。