IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

内存学习――虚拟内存

说者无意 2011-11-16 00:13:51 累计浏览 3,664 次
本机暂存

    接着上次学习虚拟内存的文章继续学习。

虚拟内存如何实现

    虚拟内存是以虚拟页面的单位组成的。

     虚拟页面使用磁盘来作为自己的存储,一些经常使用到的页面,才会被load到内存中,此时,就相当于把内存看成是磁盘的一个缓存。

     因为每次都load到内存的是一个虚拟页面,所以对应的,内存就需要有一个物理页面能过装下这个虚拟页面。因此,物理内存也被分隔为一个一个的物理页面。虚拟页面和物理页面应该是相等的。

     既然要把虚拟页面和物理页面关联起来,那么就需要维护虚拟页面和物理页面之间的关系。

     因此,就又需要这样一张页面来维持这样的关系,通常,这张表是放在物理内存中,由操作系统来维护的,叫做页表。

    基于这种实现,实际上虚拟内存就有能力解决之前所遇到的问题:每个进程都可以使用相同的虚拟地址,操作系统会将虚拟地址翻译成不同的物理地址,但对进程来说,是透明的;每个进程也都不会因为物理内存受限而不能加载运行,实际上虚拟内存是存在磁盘的,而通常磁盘要比内存大很多(虚拟页面一般放在磁盘的swap分区);同时,虚拟内存通过维护虚拟页面和物理页面的页面,可以实现权限控制,而这种权限控制,就是搭载在页面上面的,因此,一般的内存权限控制,都是以页为单位的。

虚拟内存的访问过程

    当程序访问的虚拟地址在页表中找不到对应的物理页时,这时候,就会向磁盘读取此虚拟页面,并且将此虚拟页面与一个物理页面关联起来,并且在页面记录这种关系。当物理页面都已经被占满的时候,操作系统就会踢掉一个用的少的物理页面,从而让这个新的虚拟页面装入物理页面。 ―― 这和我们使用缓存的逻辑没有什么不同 ―― 操作系统将虚拟页面放入物理页面的动作,是由异常机制触发的。

     而当程序中访问的虚拟地址已经在页表中有对应的物理页面时,这一切就变得相当轻松了。同时,内存权限的控制,也是通过在页表中的记录进行的。

总结

    虚拟内存通过一个存储器层次的概念,将使用物理内存碰到的几个限制,就都统统解决了。我想,这和大学时候老师教我们在解决难题时候的思路一样,进行空间的坐标转换,换个角度,问题说不定就得以迅速解决,而且简单,高效。

同分类推荐文章

  1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
  2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
  3. 除法的意义 (2026-04-12 20:52:17)

查看更多 算法 文章 →

建议继续学习

  1. 关于linux内存free的一些事情 (累计阅读 12,867)
  2. linux内核研究笔记(一)内存管理 – page介绍 (累计阅读 10,487)
  3. 你真的了解try{ return }finally{}中的return? (累计阅读 9,686)
  4. Linux上进程的表示以及入门 (累计阅读 7,742)
  5. 缓存设计的一些思考 (累计阅读 7,000)
  6. malloc()之后,内核发生了什么? (累计阅读 6,404)
  7. 如何实现一个malloc (累计阅读 6,146)
  8. MongoDB与内存 (累计阅读 6,122)
  9. iOS内存暴增问题追查与使用陷阱 (累计阅读 5,838)
  10. 简单理解Memcached的Slab Allocation (累计阅读 5,522)