《深入理解计算机系统》笔记---(3)虚拟内存

《深入理解计算机系统》笔记---(3)虚拟内存_第1张图片

虚拟内存是一种操作系统对主存的抽象概念,提供了三个重要能力:

1. 它将主存看作是一个存储在磁盘上地址空间的高速缓存,并根据需要在主存和磁盘之间来回切换数据。

2. 它为每个进程提供了一致的地址空间,从而简化了内存管理。

3. 它保护了每个进程的地址空间不被其他进程破坏。


额,这些概念可能看着有点难以理解,别急。

我们先来了解一些基本概念:物理和虚拟寻址;地址空间。

在计算机早期,PC机上使用的就是物理寻址,但是在现代同时运行好多程序的情况下,采用物理寻址是很难受的,

试想一下,你的程序运行,是处理器把它加载到内存中的,在运行了多个程序情况下,每次加载给你的地址不是固定的,而你在编程的时候肯定会有一些涉及跳转的指令,那么问题来了,你没办法确定你要跳转的地址是什么。

在现代我们使用虚拟寻址的技术,通过这个技术你可以在编程的时候视为整块内存都是你的程序在使用,不用担心涉及挑战指令时地址是否正确的问题。这大大方便了程序设计者。 至于从虚拟地址到物理地址的转换,只要通过地址翻译即可。

地址空间是一个非负整数地址的有序集合。系统中有一个虚拟地址空间,和一个物理地址空间,每个数据对象都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

理解了这些概念对理解虚拟内存有很大的帮助。

还不太理解的,可以看看一位博主关于虚拟地址的解释的一篇文章。


虚拟的内存的概念理解了,下面我们看看它都在哪里使用。

虚拟内存作为缓存的工具

  •     同任何缓存一样,虚拟内存系统需要以某种方式来判定一个虚拟页是否缓存在DRAM中的某个地方。
  •     这种功能由操作系统,MMU(内存管理单元)的地址翻译硬件,和一个教页表的数据结构来完成。
  •     页表可以将虚拟页映射到物理页。
  •     实际上操作系统为每个进程创建独自的页表。
                

《深入理解计算机系统》笔记---(3)虚拟内存_第2张图片

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

如果有效位为1,那么地址字段就表示DRAM中相应的物理页的起始地址。


          页命中:在页表中能找到。

           缺页: 页表中找不到,操作系统会将需要的页表条目加载到页表中。

          分配页面:例如malloc

          局部性:在任何时刻,程序趋向于在一个较小的活动页面集合上工作。


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

                  简化链接,简化加载,简化共享,简化内存分配

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

                    可以在PTE上添加一些额外的许可位来控制内存访问

地址翻译

《深入理解计算机系统》笔记---(3)虚拟内存_第3张图片

地址翻译步骤

   命中时步骤:

            1.处理器生成一个虚拟地址,并把它传送给MMU。

             2.MMU生成PTE地址,并从高速缓存/主存请求得到它。

             3.高速缓存/主存向MMU返回PTE。

              4.MMU构造物理地址,并把它传送给高速缓存/主存。

              5.高速缓存/主存返回所请求的数据字给处理器。


《深入理解计算机系统》笔记---(3)虚拟内存_第4张图片

    未命中步骤:

            

            1.处理器生成一个虚拟地址,并把它传送给MMU。

             2.MMU生成PTE地址,并从高速缓存/主存请求得到它。

             3.高速缓存/主存向MMU返回PTE。

              4.PTE的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序。

              5.缺页处理程序确定出物理内存的牺牲页,如何这个页面已经被修改了,则把它换成到磁盘。

             6.缺页处理程序页面调入新页面,并更新内存中的PTE。

             7.缺页处理程序返回原来的进程,再次执行导致缺页的指令。


以上是基本的内存翻译步骤,但是我们还可一采取一些措施让它更块的进行地址翻译。

            1.结合高速缓存和虚拟内存。

《深入理解计算机系统》笔记---(3)虚拟内存_第5张图片

             2.利用TLB加速地址翻译。         

                   TLB:翻译后备缓存器。

                   TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个由单个PTE组成的块.

                    也就是在查询页表是否命中时先查询TLB表。

  

            3.多级页表

          多级页表可以比喻为:当你从全校学生中找一个学生时,是给所有人排序,然后在顺序查找快,还是先给所以人分好年级再排序,查找的时候先找年级再顺序查找快。

                         《深入理解计算机系统》笔记---(3)虚拟内存_第6张图片




你可能感兴趣的:(深入理解计算机系统)