帮忙解答几个Windows内存管理的问题

tbo1988 2009-07-04 06:54:53
加精
1:当进程创建时候,同时为该进程创建 虚拟内存到物理内存的映射表 程序运行时候通过MMU和映射表 将虚拟内存转换成物理内存。每个进程都拥有2GB的自己的虚拟地址空间,那难道这2GB的虚拟地址空间每个地址都要在映射表中映射,如果物理内存没有2GB,那怎么映射?

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

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

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

求高人解答

...全文
323 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrjinle 2010-01-22
  • 打赏
  • 举报
回复
都是高手,初来乍到,学习学习。
fx290318458 2009-07-09
  • 打赏
  • 举报
回复
这就要查询映射表,把虚拟地址转换成物理地址.
ydkj1209 2009-07-08
  • 打赏
  • 举报
回复
学习,学习再学习
zzloveslll 2009-07-08
  • 打赏
  • 举报
回复
建议看看Windows Internals这本书
xy931922846 2009-07-07
  • 打赏
  • 举报
回复
学习
zhboerka 2009-07-07
  • 打赏
  • 举报
回复
学习
默默_XL 2009-07-07
  • 打赏
  • 举报
回复
学习一下先...
mjjdhd 2009-07-07
  • 打赏
  • 举报
回复
太美了吧
ltl164198 2009-07-07
  • 打赏
  • 举报
回复
这里要讲到类内存管理,当剩余内存空间小到一定时就会将其放入磁盘交换文件,当然这里可能会用到各种算法,尽可能将最后使用的交出去是各算法的完美目标,当重新访问时又重复上面的过程,,线性地址是指我们程序的地址像以前没mmu时是连续的,而物理过程是分散的也就是我们两个连续的地址在物理内存大多数是分开的,当然线性地址是虚拟的,只要虚拟地址跟物理地址对应就行,!
dongpy 2009-07-06
  • 打赏
  • 举报
回复
1:不是。只映射当前使用的,如代码段、数据段、堆栈等。
2:当物理内存短缺时,内核会换出一些不常使用的页面到交换文件,以腾出更多物理内存。
3:是的。映射表是虚拟地址到物理地址、或者虚拟地址到交换文件的映射。前者在表项中记录Frame号,后者记录逻辑块号。
4:虚拟地址通过分段映射得到线性地址,再通过分页映射得到物理地址。如果没有分段,那么虚拟地址等于线性地址;如果没有分页,那么线性地址等于物理地址。
Rainstorey 2009-07-06
  • 打赏
  • 举报
回复
1 既然是虚拟地址当然只是个虚拟的数字代表地址,等程序真正用到这个地址再做虚拟地址->物理地址的转换.
2 不仅仅是切换进程,其实任何时候都有可能被用到.看似4GB的虚拟内存其实真正用到的和实际运行的所占内存并不多,OS就把暂时不适用的内存数据放到虚拟内存中.这个暂时不适用的判断标准就能引出一个更大的话题.页面调度机制.
3 可以这么说,但映射关系不止是一对一,也可能是多对一.
4 是的,虚拟地址供程序员使用,把他看做是一个连续的大数组,其中的每一个值都可作为内存地址使用.也称为Flat模式.
qihuanfengyun 2009-07-04
  • 打赏
  • 举报
回复
正在学习,帮顶!!

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧