虚拟存储器
2014-05-11 17:14
211 查看
虚拟存储器的概念并不难懂,里面涉及的细节很多。
虚拟存储器是组织在硬盘上的一组连续的地址空间(抽象的空间,硬盘上的程序假想成在这个空间中,虚拟存储器是逻辑上的),一个程序相当于放在了磁盘的连续空间中,每一个进程拥有一个虚拟的地址空间。
这个虚拟的地址空间是线性的,可以看作是0-2^N个地址组成的一个空间,链接器指定了进程的代码起始位置,接着指定了数据段、堆、共享库、栈的虚拟地址。
(问题:为什么代码的其实位置一般是0x08084000?)
这样我们为进程抽象出来了一个虚拟地址空间,而物理内存DRAM则作为虚拟存储器的缓存,那么需要解决虚拟地址空间到缓存的映射关系。
1.映射是有操作系统、硬件共同完成的,主要的思想是:虚拟存储器->MMU硬件+内存中映射页表+页面调度->实际的物理地址空间。
其实就是使用了一个映射表,将虚拟存储器的页映射到了物理内存中的页,那么在虚拟寻址的时候,CPU内部会根据映射关系去找实际的内存中的页。
2.缓存的调度问题,在缓存管理中也提到过。无非是怎么判断缓存命不命中,不命中的怎么去调度页面两个问题。
虚拟存储器是组织在硬盘上的一组连续的地址空间(抽象的空间,硬盘上的程序假想成在这个空间中,虚拟存储器是逻辑上的),一个程序相当于放在了磁盘的连续空间中,每一个进程拥有一个虚拟的地址空间。
这个虚拟的地址空间是线性的,可以看作是0-2^N个地址组成的一个空间,链接器指定了进程的代码起始位置,接着指定了数据段、堆、共享库、栈的虚拟地址。
(问题:为什么代码的其实位置一般是0x08084000?)
这样我们为进程抽象出来了一个虚拟地址空间,而物理内存DRAM则作为虚拟存储器的缓存,那么需要解决虚拟地址空间到缓存的映射关系。
1.映射是有操作系统、硬件共同完成的,主要的思想是:虚拟存储器->MMU硬件+内存中映射页表+页面调度->实际的物理地址空间。
其实就是使用了一个映射表,将虚拟存储器的页映射到了物理内存中的页,那么在虚拟寻址的时候,CPU内部会根据映射关系去找实际的内存中的页。
2.缓存的调度问题,在缓存管理中也提到过。无非是怎么判断缓存命不命中,不命中的怎么去调度页面两个问题。
相关文章推荐
- 别忽视孩子的心理需要[图]
- 第九周作业
- ASP.NET Web API中的依赖注入
- 【数据结构】图的遍历之DFS和BFS
- 如何将松散的dll打包进需要发布的exe
- 函数malloc()和calloc()的区别
- 单链表面试经典问题
- C++primer第9章习题解答
- 把数据输出到Word (非插件形式)
- 小孩胆怯黏人爱哭鼻子闹均是病[图]
- firebug中的console.log()使用注意的问题
- shuffle1
- 时间复杂度
- one more time one more chance
- Matlab绘图
- matlab 如何使用代理服务器 使用urlread函数
- 感受一下JS
- 苹果收购Beats背后:库克已走出乔布斯“阴影”
- C++的类型萃取技术
- *.bz2和*.gz分别是什么压缩格式