20145321《信息安全系统设计基础》第14周学习总结

20145321《信息安全系统设计基础》第14周学习总结

第九章 虚拟存储器

为了更加有效地管理存储器并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟存储器(VM)。虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟存储器提供了三个重要的能力:

  1. 它将主存看成是一个存储在磁盘上的地址空间同,主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
  2. 它为每个进程提供了一致的地址空间,从而简化了存储器管理。
  3. 它保护了每个进程的地址空间不被其他进程破坏。

9.1 物理和虚拟寻址

  • 当CPU执行这条加载指令时,它会生成一个有效物理地址,通过存储器总线,把它传递给主存。主存取出从物理地址4处开始的4字节的字,并将它返回给CPU,CPU会将它存放在一个寄存器里。早期的PC使用物理寻址,而且诸如数字信号处理器、嵌入式微控制器以及Cray超级计算机这样的系统仍然继续使用这种寻址方式。然而,现代处理器使用的是一种称为虚拟寻址的寻址形式,参见图:

9.2 地址空间

地址空间是一个非负整数地址的有序集合:{0,1,2,……}

1)线性地址空间

  • 地址空间中的整数是连续的。

2)虚拟地址空间

  • CPU从一个有 N=2^n 个地址的地址空间中生成虚拟地址,这个地址空间成为称为虚拟地址空间。

3)物理地址空间

  • 与系统中的物理存储器的M个字节相对应。

4)地址空间的大小

  • 由表示最大地址所需要的位数来描述。
  • N=2^n:n位地址空间
  • 主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

9.3 虚拟存储器作为缓存的工具

虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节

物理存储器——物理页PP,也叫页帧,大小也为P字节

任意时刻,虚拟页面的集合都被分为三个不相交的子集:

  • 未分配的:VM系统还没分配/创建的页,不占用任何磁盘空间。
  • 缓存的:当前缓存在物理存储器中的已分配页
  • 未缓存的:没有缓存在物理存储器中的已分配页

1)DRAM缓存的组织结构

不命中处罚很大

是全相联的——任何虚拟页都可以放在任何的物理页中。

替换算法精密

总是使用写回而不是直写。

2)页表

页表:是一个数据结构,存放在物理存储器中,将虚拟页映射到物理页,就是一个页表条目的数组。

页表就是一个页表条目PTE的数组。

  • PTE:由一个有效位和一个n位地址字段组成的,表明了该虚拟页是否被缓存在DRAM中。

页表的组成:有效位+n位地址字段

  • 如果设置了有效位:

    • 地址字段表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。
  • 如果没有设置有效位:

    • 空地址:表示该虚拟页未被分配
    • 不是空地址:这个地址指向该虚拟页在磁盘上的起始位置。

3) 页命中

当CPU读取一个字的时候,地址翻译硬件将虚拟地址作为一个索引来定位PTE,并从存储器中读取它。

4)缺页

缺页:就是指DRAM缓存不命中。

缺页异常:会调用内核中的缺页异常处理程序,选择一个牺牲页。

页:虚拟存储器的习惯说法,就是块

交换=页面调度:磁盘和存储器之间传送页的活动

按需页面调度:直到发生不命中时才换入页面的策略,所有现代系统都使用这个。

(5)虚拟存储器中的局部性

局部性原则保证了在任意时刻,程序将往往在一个较小的活动页面集合上工作,这个集合叫做工作集/常驻集。

所以只要程序有良好的时间局部性,虚拟存储器系统就能工作的相当好。

颠簸:工作集大小超出了物理存储器的大小。

9.4 虚拟存储器作为存储器管理的工具

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

多个虚拟页面可以映射到同一个共享物理页面上。

存储器映射:将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。

按需页面调度和独立的虚拟地址空间的结合简化了链接和加载、代码和数据共享,以及应用程序的存储器分配。

  • 简化链接:独立的地址空间允许每个进程的存储器映像使用相同的基本格式,而不管代码和数据实际存放在物理存储器的何处。
  • 简化加载:虚拟存储器使得容易想存储器中加载可执行文件和共享文件对象。
  • 简化共享:独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制。
  • 简化存储器分配:虚拟存储器为向用户进程提供一个简单的分配额外存储器的机制。

9.5 虚拟存储器作为存储器保护的工具

  • 任何现代计算机系统必须为操作系统提供手段来控制对存储器系统的访问。不应该允许一个用户进程修改它的只读文本段。而且也不应该允许它读或修改任何内核中的代码和数据结构。不应该允许它读或者写其他进程的私有存储器,并且不允许它修致任何与其他进程共享的虚拟页面,除非所有的共享者都显式地允许它这么做(通过调用明确的进程间通信系统调用)。
  • 就像我们所看到的,提供独立的地址空间使得分离不同进程的私有存储器变得容易。但是,地址翻译机制可以以一种自然的方式扩展到提供更好的访问控制。因为每次CPU生成一个地址时,地址翻译硬件都会读一个PTE,所以通过在PTE上添加一些额外的许可位来控制对一个虚拟页面内容的访问十分简单。下图展示了大致的思想。在这个示例中,每个PTE中已经添加了三个许可位。SUP位表示进程是否必须运行在内核超级用户)模式下才能访问该页。

9.6 地址翻译

  • 所有符号如下:

  • 当页面命中时,CPU硬件执行的步骤

    第一步:处理器生成一个虚拟地址并把它传送给MMU
    第二步:MMU生成PTE地址,并从高速缓存/主存请求得到它
    第三步:高速缓存/主存向MMU返回PTE
    第四步:MMU构造物理地址并把它传送给高速缓存/主存
    第五步:高速缓存/主存返回所请求的数据字给处理器。
    页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协作完
    第一步到第三步:和图中的第一步到第三步相同;
    第四步:PTE中的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序。
    第五步:缺页处理程序确定出物理存储器中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘。
    第六步:缺页处理程序页面调入新的页面,并更新存储器中的PM。
    第七步:缺页处理程序返虚拟地址重新发送给MMU。因为虚拟页面现在缓回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页的现在缓存在物理存储器中,所以就会命中,在MMU执行了图中的步骤之后,主存就会将所请求字返回给处理器。

1)结合高速缓存和虚拟存储器

  • 在任何既使用虚拟存储器又使用SRAM高速缓存的系统中,都存在应该使用虚拟地址还是使用讨论范围,但是大多数系统是选择物理寻址的。使用物理寻址L多个进程同时在高速缓存中有存储块和共享来自相同虚拟页面的块成为很简单的事情。而且,高速缓存无需处理保护问题,因为访问权限的检查是地址翻译过程的一部分。

2)利用tlb加速地址翻译

  • 正如我们看到的,每次CPU产生一个虚拟地址,MMU就必须查阅一个PTE,以便将虚拟地址翻译为物理地址。在最糟糕的情况下,这又会要求从存储器取一次数据,代价是几十到几百个周期。如果PTE正碰巧缓存在L1中,那么开销就下降到1个或2个周期。然而,许多系统都试图消除这样的开销,它们在MMU中包括了一个关于PTE的小的缓存,称为翻译后备缓冲器。
  • TLB是一个小的、虚拟寻址的缓存,其中每一行都保存着一个由单个PTE组成的块。TLB通常有高度的相联性。如图所示,用于组选择和和行匹配的索引和标记字段是从虚拟地址中的虚拟页号中提取出来的。如果TLB有T=2的t次方个组,那么TLB索引(T田1)是由VPN的t个最低位组成的,而TLB标记是由VPN中剩余的位组成的。

3)多级页表

  • 到目前为止,我们一直假设系统只用一个单独的页表来进行地址翻译。但是如果我们只有32位的地址空间、4KB的页面和一个4字节的PTE,那么即使应用所引用的只是虚拟地址空间中的很小一部分,也总是需要—个4MB的页表驻留在存储器中。对于地址空间为64位的系统来说,问题将变得更复杂。

本周代码托管

代码托管链接

代码数量统计

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)
目标 3500行 30篇 300小时
第一周 50/50 1/2 10/10
第二周 120/170 1/3 20/30
第三周 130/300 1/4 20/50
第五周 130/430 2/6 25/75
第六周 50/480 2/8 25/100
第七周 53/533 1/9 20/120
第八周 0/533 2/11 15/135
第九周 68/601 2/13 20/155
第十周 468/1069 1/15 20/175
十一周 404/1473 2/17 20/195
十二周 0/1473 2/19 15/210
十三周 1001/2474 1/20 20/230
十四周 228/2702 1/21 20/250
原文地址:https://www.cnblogs.com/5321z/p/6195669.html