请问关于Linux内存管理机制以及MMU的几个小问题
请教关于Linux内存管理机制以及MMU的几个问题~(一)有这样的说法:C# codeMMU负责将程序中的虚拟地址(VA)转
请教关于Linux内存管理机制以及MMU的几个问题~
(一)有这样的说法:
C# codeMMU负责将程序中的虚拟地址(VA)转换为物理地址(PA)
C# code线性地址是逻辑地址到物理地址变换之间的中间层,如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了[\quote]
问:说法一中的虚拟地址是否就是说法二中的逻辑地址?是的话逻辑地址转换为物理地址的过程是否就由MMU完全负责,还有说法二中的分页机制开不开启是如何实现的?
(二)
C# code虚拟内存机制被比喻为:你不需要非常长的轨道让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面
问:这部分工作是由谁实现的?系统是如何做到为每个进程虚拟出4G的空间而又保证进程之间在内存中相互独立互不干扰的?
(三)我的理解(说法可能有不恰当):cpu的分段机制对应了逻辑地址(虚拟地址?)-->线性地址、分页机制对应了线性地址-->物理地址,这样繁冗的做法是由什么问题所制约的?
问的没什么条理,先谢各位了~~
[解决办法]你可以去翻下《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3
System Programming Guide》
在 Chapter 3 Protected-Mode Memory Management,图 Figure 3.1 Segmentation and Paging 有
非常详细的解释。我写的解释肯定不如那里介绍的好,就不写了