日期:2014-05-17  浏览次数:20702 次

帮忙解答几个Windows内存管理的问题
1:当进程创建时候,同时为该进程创建 虚拟内存到物理内存的映射表 程序运行时候通过MMU和映射表 将虚拟内存转换成物理内存。每个进程都拥有2GB的自己的虚拟地址空间,那难道这2GB的虚拟地址空间每个地址都要在映射表中映射,如果物理内存没有2GB,那怎么映射?

2:页面交换文件就是虚拟内存,切换到一个进程的时候会将现在的进程的内容存放到交换文件中?页面交换文件还会在什么场合使用?

3:物理内存中每4K为一个Frame,虚拟内存每4K为1个page,映射表就是 PAGE到FRAME的映射么?这个PAGE跟页面交换文件的关系又是什么呢?

4:什么叫线性地址,就是虚拟地址么?

求高人解答



------解决方案--------------------
1 既然是虚拟地址当然只是个虚拟的数字代表地址,等程序真正用到这个地址再做虚拟地址->物理地址的转换.
2 不仅仅是切换进程,其实任何时候都有可能被用到.看似4GB的虚拟内存其实真正用到的和实际运行的所占内存并不多,OS就把暂时不适用的内存数据放到虚拟内存中.这个暂时不适用的判断标准就能引出一个更大的话题.页面调度机制.
3 可以这么说,但映射关系不止是一对一,也可能是多对一.
4 是的,虚拟地址供程序员使用,把他看做是一个连续的大数组,其中的每一个值都可作为内存地址使用.也称为Flat模式.
------解决方案--------------------
1:不是。只映射当前使用的,如代码段、数据段、堆栈等。
2:当物理内存短缺时,内核会换出一些不常使用的页面到交换文件,以腾出更多物理内存。
3:是的。映射表是虚拟地址到物理地址、或者虚拟地址到交换文件的映射。前者在表项中记录Frame号,后者记录逻辑块号。
4:虚拟地址通过分段映射得到线性地址,再通过分页映射得到物理地址。如果没有分段,那么虚拟地址等于线性地址;如果没有分页,那么线性地址等于物理地址。