内存学习――虚拟内存
接着上次学习虚拟内存的文章继续学习。
虚拟内存如何实现
虚拟内存是以虚拟页面的单位组成的。
虚拟页面使用磁盘来作为自己的存储,一些经常使用到的页面,才会被load到内存中,此时,就相当于把内存看成是磁盘的一个缓存。
因为每次都load到内存的是一个虚拟页面,所以对应的,内存就需要有一个物理页面能过装下这个虚拟页面。因此,物理内存也被分隔为一个一个的物理页面。虚拟页面和物理页面应该是相等的。
既然要把虚拟页面和物理页面关联起来,那么就需要维护虚拟页面和物理页面之间的关系。
因此,就又需要这样一张页面来维持这样的关系,通常,这张表是放在物理内存中,由操作系统来维护的,叫做页表。
基于这种实现,实际上虚拟内存就有能力解决之前所遇到的问题:每个进程都可以使用相同的虚拟地址,操作系统会将虚拟地址翻译成不同的物理地址,但对进程来说,是透明的;每个进程也都不会因为物理内存受限而不能加载运行,实际上虚拟内存是存在磁盘的,而通常磁盘要比内存大很多(虚拟页面一般放在磁盘的swap分区);同时,虚拟内存通过维护虚拟页面和物理页面的页面,可以实现权限控制,而这种权限控制,就是搭载在页面上面的,因此,一般的内存权限控制,都是以页为单位的。
虚拟内存的访问过程
当程序访问的虚拟地址在页表中找不到对应的物理页时,这时候,就会向磁盘读取此虚拟页面,并且将此虚拟页面与一个物理页面关联起来,并且在页面记录这种关系。当物理页面都已经被占满的时候,操作系统就会踢掉一个用的少的物理页面,从而让这个新的虚拟页面装入物理页面。 ―― 这和我们使用缓存的逻辑没有什么不同 ―― 操作系统将虚拟页面放入物理页面的动作,是由异常机制触发的。
而当程序中访问的虚拟地址已经在页表中有对应的物理页面时,这一切就变得相当轻松了。同时,内存权限的控制,也是通过在页表中的记录进行的。
总结
虚拟内存通过一个存储器层次的概念,将使用物理内存碰到的几个限制,就都统统解决了。我想,这和大学时候老师教我们在解决难题时候的思路一样,进行空间的坐标转换,换个角度,问题说不定就得以迅速解决,而且简单,高效。
建议继续学习:
- 内存学习――为什么需要虚拟内存 (阅读:4260)
- 虚拟内存的作用 (阅读:4110)
- linux磁盘管理学习笔记补充:连接ln、虚拟内存 (阅读:2937)
- 关于虚拟内存的一点理解 (阅读:2919)
- 虚拟内存机制浅析 (阅读:2819)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zava 来源: 说者无意
- 标签: 虚拟内存
- 发布时间:2011-11-16 00:13:51
- [17] [译]Google Chrome中的高性能网
- [17] 在FreeNAS/BSD搭建基于Nginx+
- [16] 关于Linux的文件系统cache
- [16] 最近总结的一些技巧(vim,python,s
- [15] Linux常用系统信息查看命令
- [12] Linux(Ubuntu 10.04)上安装
- [10] Centos yum 安装nginx+PHP
- [10] PHP加速器 eaccelerator 缓存
- [10] Buffer和cache的区别是什么?
- [9] base64_encode 和 urlenc