内存学习――虚拟内存
接着上次学习虚拟内存的文章继续学习。
虚拟内存如何实现
虚拟内存是以虚拟页面的单位组成的。
虚拟页面使用磁盘来作为自己的存储,一些经常使用到的页面,才会被load到内存中,此时,就相当于把内存看成是磁盘的一个缓存。
因为每次都load到内存的是一个虚拟页面,所以对应的,内存就需要有一个物理页面能过装下这个虚拟页面。因此,物理内存也被分隔为一个一个的物理页面。虚拟页面和物理页面应该是相等的。
既然要把虚拟页面和物理页面关联起来,那么就需要维护虚拟页面和物理页面之间的关系。
因此,就又需要这样一张页面来维持这样的关系,通常,这张表是放在物理内存中,由操作系统来维护的,叫做页表。
基于这种实现,实际上虚拟内存就有能力解决之前所遇到的问题:每个进程都可以使用相同的虚拟地址,操作系统会将虚拟地址翻译成不同的物理地址,但对进程来说,是透明的;每个进程也都不会因为物理内存受限而不能加载运行,实际上虚拟内存是存在磁盘的,而通常磁盘要比内存大很多(虚拟页面一般放在磁盘的swap分区);同时,虚拟内存通过维护虚拟页面和物理页面的页面,可以实现权限控制,而这种权限控制,就是搭载在页面上面的,因此,一般的内存权限控制,都是以页为单位的。
虚拟内存的访问过程
当程序访问的虚拟地址在页表中找不到对应的物理页时,这时候,就会向磁盘读取此虚拟页面,并且将此虚拟页面与一个物理页面关联起来,并且在页面记录这种关系。当物理页面都已经被占满的时候,操作系统就会踢掉一个用的少的物理页面,从而让这个新的虚拟页面装入物理页面。 ―― 这和我们使用缓存的逻辑没有什么不同 ―― 操作系统将虚拟页面放入物理页面的动作,是由异常机制触发的。
而当程序中访问的虚拟地址已经在页表中有对应的物理页面时,这一切就变得相当轻松了。同时,内存权限的控制,也是通过在页表中的记录进行的。
总结
虚拟内存通过一个存储器层次的概念,将使用物理内存碰到的几个限制,就都统统解决了。我想,这和大学时候老师教我们在解决难题时候的思路一样,进行空间的坐标转换,换个角度,问题说不定就得以迅速解决,而且简单,高效。
建议继续学习:
- 内存学习――为什么需要虚拟内存 (阅读:4403)
- 虚拟内存的作用 (阅读:4139)
- linux磁盘管理学习笔记补充:连接ln、虚拟内存 (阅读:2986)
- 关于虚拟内存的一点理解 (阅读:2953)
- 虚拟内存机制浅析 (阅读:2861)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zava 来源: 说者无意
- 标签: 虚拟内存
- 发布时间:2011-11-16 00:13:51
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] android 开发入门
- [54] 图书馆的世界纪录
- [54] 如何拿下简短的域名
- [52] Oracle MTS模式下 进程地址与会话信
- [52] Go Reflect 性能
- [49] 【社会化设计】自我(self)部分――欢迎区
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑