深入理解计算机系统第9章笔记

on under auxilary
1 minute read

虚拟存储器

1.虚拟存储器的理解,windows下的c盘中的pagefile.sys是虚拟内存文件.

2.虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的,一致的私有的地址 空间.虚拟存储器提供了3个重要能力:
a)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数 据,通过这种方式,它高效地使用了主存
b)它为每个进程提供了一致的地址空间,从而简化了存储器管理
c)它保护了每个进程的地址空间不被其他进程破坏

3.地址翻译:将一个虚拟地址转换为物理地址.就像异常处理一样,地址翻译需要cpu硬件和操作系统之间的紧密合作.cpu芯片上叫 做存储器管理单元(MMU)的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址.如下图.

4.主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址

5.磁盘上数组的内容被缓存在主存中.和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分割成块,这些块作为磁盘和主 存(较高层)之间的传输单元.为了有助于清晰地去理解存储层次结构中不同的缓存概念,我们将使用术语SRAM缓存来表示位于CPU和 主存之间的L1,L2和L3调整缓存,并且用术语DRAM缓存来表示虚拟存储器系统的缓存,它在主存中缓存虚拟页

6.虚拟存储器系统通过将虚拟存储器分割为称为虚拟页的大小固定的块来处理这个问题,如下图中的虚拟存储器有8个虚拟页.类似 地,物理存储器被分割为物理页,物理页和虚拟页大小相同,物理页也称为页帧.任意时刻,虚拟页面的集合都分为有一个不相交的子 集:
未分配的:虚拟存储器系统还未分配的页,未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间
缓存的:当前缓存在物理存储器中的已分配页
未缓存的:没有缓存在物理存储器中的已分配页(已分配代表占用磁盘空间)

7.Linux将随机存储RAM称为内存页.交换技术就是将一页内存复制到预先设定的硬盘上的交换空间,来释放该页占用内存.物理 内存和交换空间的和就是可提供的虚拟内存的总量.
windows:虚拟内存 linux:swap分区 windows即使物理内存没有用完也会去用到虚拟内存,而Linux不一样 Linux只有当物理内存用完的时候才会去动用虚拟内存(即 swap分区)
swap类似于windows的虚拟内存,不同之处在于,Windows可以设置在windows的任何盘符下面,默认是在C盘,可以和系统文件放 在一个分区里.而linux则是独立占用一个分区,方便由于内存需求不够的情况下,把一部分内容放在swap分区里,待内存有空余 的情况下再继续执行,也称之为交换分区,交换空间是其中的部分

8.垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块称为垃圾,自动回收堆存储的过程叫做垃圾收集 .在一个支持垃圾收集的系统中,应用显式分配堆块,但是从不显式地释放它们.在C程序的上下文中,应用调用malloc,但是从不调用 free.反之,垃圾收集器定期识别垃圾块,并相应地调用free,将这些块放回到空闲链表中.

9.虚拟存储器是对主存的一个抽象,支持虚拟存储器的处理器通过使用一种叫做虚拟寻址的间接形式来引用主存.专门的硬件通过 使用页表来翻译虚拟地址,而页表的内容是由操作系统提供的.

10.分配器有两种类型.显式分配器要求应用显式地释放它们的存储器块,隐式分配器(垃圾收集器)自动释放任何未使用的和不可达 的块.

11.页表是一个存放在物理存储器中的数据结构,页表将虚拟页映射到物理页,每次地址翻译硬件将一个虚拟地址转换为物理地址时 都会读取页表,页表是敷于脸上页表条目的数组,虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE(page table entry,页表条目).

12.图9-4中的示例展示了一个有8个虚拟页和4个物理页的系统的页表.四个虚拟页(vp1,vp2,vp4,vp7)当前被缓存在DRAM中,两个页 (vp0,vp5)还未被分配,而剩下的页(vp3,vp6)已经被分配了,但是当前还未被缓存.

13.缺页:在虚拟存储器的习惯说法中,DRAM缓存不命中称为缺页,图9-6展示了在缺页之前我们的示例页表的状态.cpu引用了vp3中 的一个字,vp3并未缓存在DRAM中,地址翻译硬件从存储器中读取PTE3,从有效位推断出vp3未被缓存,并且触发一个缺页异常.缺页异 常调用内核中的缺页异常处理程序,该程序会选择一个牺牲页,在紫剑中就是存放在pp3中的vp4,如果vp4已经被修改了,那么内核就 会将它拷贝加磁盘.当异常处理程序返回时,它会重新启动导致缺页的指令,该指令会把导致缺页的虚拟地址重发送到地址翻译硬件 .但是现在,vp3已经缓存在主存中了,那么页命中也能由地址翻译硬件正常处理了.

14.操作系统为每个进程提供了一个独立的页表,因而也就是一个独立的虚拟地址空间.

15.地址翻译:图9-12展示了MMU如何利用页表来实现虚拟地址到物理地址的映射.cpu中的一个控制寄存器,页表基址寄存器 (PTBR)指向当前页表.n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO)和一个(n-p)位的虚拟页号(VPN).MMU利用VPN来 选择适当的PTE.例如,VPN 0选择PTE 0,VPN 1选择PTE 1,以此类推.将页表条目中物理页号(PPN)和虚拟地址中的VPO串联起来,就得 到相应的物理地址.注意,因为物理和虚拟页面都是P字节的,所以物理页面偏移(PPO)和VPO是相同的.

16.linux为每个进程维持了一个单独的虚拟地址空间,形式如图9-26所示.

17.linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映 射.一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件之间换来换去,在任何时刻,交换空间都限制着当前运 行着的进程能够分配的虚拟页面的总数.

csapp
home
github
archive
category