【深入理解计算机系统·笔记】内存管理之虚拟内存(二)

虚拟内存作为缓存的工具

对应存储层的分块的概念,VM系统将虚拟内存也按固定大小分割为虚拟页(VP),对应的物理内存被分割为物理页(PP),物理页也称之为页帧。

虚拟页任何时刻都被分为三个不相交的子集:

(1)      未分配的:VM系统还未分配(未创建)的页,没有任何数据与之相关联,因此不占用任何磁盘空间。

(2)      未缓存的:已被创建的虚拟页,但是还没有缓存到物理内存。

(3)      已缓存的:已被创建并被缓存到物理内存中的虚拟页。

一些重要概念

DRAM缓存:指虚拟内存系统的缓存,它在主存中缓存虚拟页。

SRAM缓存:指CPU与主存之间的L1/L2/L3高级缓存。

页表:常驻内存主要是用来标识(PTE位)虚拟页是否已缓存到DRAM的数组。

页命中:目标地址的虚拟页已被缓存至内存中,通过目标地址能够找到已被缓存的虚拟页被称之为页命中。

缺页:DRAM缓存不命中称为缺页,缺页会抛出缺页异常,缺页异常又会触发异常处理程序去选中一个牺牲页,并从磁盘复制所需虚拟页去替换牺牲页。

分配页面:操作系统分配一个新的虚拟页给程序的过程,例如,调用malloc函数,操作系统首先会为程序在磁盘创建一个虚拟页,并更新页表内容,让其中一个页表条目指向这个磁盘虚拟页。

局部性:局部性原则的含义是CPU要执行的命令往往就在局部范围内,这样就保证了程序在任意时刻都趋于在一个较小的活动页面集合上工作,从而避免了大概率的缺页。只要程序有好的时间局部性,虚拟内存系统就能够很好的工作。如果程序的工作集大小超过了物理内存的大小,就会频繁发生页面的换进换出(称之为抖动),程序运行就会变得很慢。

虚拟内存作为内存管理工具

在《【深入理解计算机系统·笔记】计算机系统中的重要概念》笔记中描述过计算机系统中一些重要的抽象概念,虚拟内存也是核心的抽象。早期的虚拟地址比物理地址要少,那时虚拟内存主要是为内存管理提供支撑。在内存管理方面,虚拟内存的出现主要起到以下作用:

1.简化链接:独立的虚拟地址空间允许每一个进程的内存映像使用相应的基本格式,而不用去管代码和数据实际存放在物理内存的何处。

2.简化加载:上文示例过系统在分配页面时,malloc函数只是在磁盘创建了虚拟页,然后让页表指向虚拟页,并未立即将虚拟页缓存至物理内存,只有当页面第一次被引用时,CPU发起取指引用后才虚拟内存才会按需调入数据页,这样可以有效提高物理内存的使用效率。另外虚拟内存允许将一组连续的虚拟页映射到任意一个文件中的任意位置,这也被称之为内存映射,Linux系统提供的mmap函数就是做内存映射工作的。

3.简化共享:前面也讲到多个虚拟地址可以指向同一个物理地址,这样就能很方便多个进程共享物理内存了。

4.简化内存分配:连续的虚拟内存对应的物理内存可以是不连续的,虚拟内存为用户进程提供了一个简单的分配额外内存的机制。

虚拟内存作为内存保护工具

任何现代计算机系统必须为操作系统提供手段来控制对内存系统的访问,不应该允许用户进程去修改它的的只读代码段,而且也不允许它读取或修改任何内核中的代码和数据结构。也不允许它读或写其他进程的私有内存。虚拟内存提供的独立地址空间将这些需求变得很容易。

发布了12 篇原创文章 · 获赞 26 · 访问量 3446

猜你喜欢

转载自blog.csdn.net/baidu_23747517/article/details/104573987