text: 虚拟内存到底怎么理解？
  1）将主存看成是一个存储在磁盘上的地址空间的高速缓存，在主存中只保存活动区域，并根据需要在磁盘和主存之间来回传送数据，通过这种方式，它高效地使用了主存；2）为每个进程提供了一致的地址空间，从而简化了内存管理；3）保护了每个进程的地址空间不被其他进程破坏1）虚拟内存是核心的，可以帮助理解系统的工作方式2）虚拟内存是强大的，可以帮助利用其强大的功能在应用程序中添加动力3）虚拟内存是危险的，可以帮忙避免段错误等问题从两个角度描述：1）虚拟内存工作方式；2）应用系统如何使用和管理虚拟内存计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组，每个字节都有唯一的物理地址（Physical Address， PA），第一个地址为0，最后一个地址为M-1。cpu执行加载指令时，直接生成一个有效的物理地址，通过内存总线，传递给主存，主存取出物理地址对应开始的字节，将其返回给CPU，保存在寄存器中，如下图：CPU通过生成一个虚拟地址（Virtual Address， VA）来访问主存，这个虚拟地址在被送到内存之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译（address translation）。这一过程需要CPU硬件和操作系统的合作，CPU芯片上叫做内存够管理单元（memory Management Unit， MMU），利用操作系统管理的存放在主存中的查询表来动态翻译虚拟地址，如下图：地址空间（address space）是一个非负整数地址的有序集合，如果地址空间中的整数是连续的，则称为线性地址空间（linear address space）。在一个带虚拟内存的系统，CPU从一个有N=2^n个地址的地址空间中生成虚拟地址，这个地址空间称为虚拟地址空间（virtual address space）。一个地址空间的大小由表示最大地址所需要的位数来描述。概念上，虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组，每字节都有一个唯一的虚拟地址，作为倒数组的索引。磁盘上的数组的内容被缓存在主存中。和其他缓存一样，磁盘（较低层级）上的数据被分割成块，这些块作为磁盘和主存（较高层级）之间的传输单元。VM系统通过将将虚拟内存分割为称为虚拟页（Virtual Page， VP）的大小固定的块来处理这个问题。每个虚拟页的大小为P=2^p字节。类似的，物理内存被分割成物理页（Physical Page， PP），大小为P字节（物理页也被称为页帧，page frame）。任意时刻， 虚拟页面的集合分成3个不相交的子集：未分配的：VM还没未分配（或者创建）的页缓存的：已缓存在物理内存中的已分配页未缓存的：未缓存在物理内存中的已分配页如下图，8个虚拟页的VM，VP0、VP3未分配，VP1、VP4、VP6分配并缓存在物理内存中，VP2、VP5、VP7被分配了，但是没有缓存在物理内存中：DRAM（虚拟内存系统的缓存，在主存中缓存虚拟页）比SRAM（位于CPU和主存之间的L1、L2和L3高速缓存）慢大约10倍，磁盘比DRAM慢大约100000倍，因此DRAM缓存不命中代价很大。原因：1）DRAM缓存不命中由磁盘来服务，SRAM缓存不命中由DRAM的主存来服务；2）从磁盘的一个扇区读取第一个字节的时间开销，要比读这个扇区内的连续字节要慢100,000倍，所以虚拟页一般很大，4kb~2MB。1）如果是，进一步确认这个虚拟页存放在哪个物理页中；2）如果不是，判断这个虚拟页存放在磁盘的哪个位置，在物理内存中选择一个牺牲页，并将虚拟页从磁盘复制到DRAM中，替换这个牺牲页。1）操作系统软件、MMU（内存管理单元）中的地址翻译硬件、存放在物理内存中叫做页表（page table）的数据结构，页表将虚拟页映射到物理页2）每次地址翻译硬件将一个虚拟地址转换成物理地址时，都会读取页表。操作系统负责维护页表以及传送页。DRAM缓存不命中称为缺页。标志位=0，发现异常，系统调用缺页异常处理程序，牺牲一个页。例子中牺牲VP4触发缺页：触发缺页：替换VP5的分配过程是在磁盘上床架空间，并更新PTE5，使其指向磁盘上这个新创建的页面简化连接：独立的地址空间允许每个进程的内存影响使用相同的基本格式，而不管代码和数据实际存放在物理内存的何处简化加载简化共享：独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制。操作系统通过将不同进程中适当的虚拟页面映射到相同的物理页面，从而安排多个进程共享下共同代码的副本简化内存分配：虚拟内存为向用户进程提供一个简单的分配额外内存的机制。当一个运行在用户进程中的程序要求额外的堆空间时（如调用malloc），操作系统分配一个适当数字（eg：k）个连续的虚拟内存页面，并且将他们映射到物理内存中任意位置的k个任意的物理页面。由于页表的工作方式，操作系统没有必要分配k个连续的物理内存页面，页面可以随机地分散在物理内存中。虚拟内存通过在PTE上添加一些额外的许可位来控制对一个虚拟页面的访问，如图：地址翻译是一个N个元素的虚拟地址空间（VAS）中的元素和一个M元素的物理地址空间（PAS）中的元素之间的映射n位的虚拟地址包含两个部分：一个p位的虚拟页面偏移（Virtual Page Offset，VPO）和一个（n-p）位的虚拟页号（Virtual Page Number）。MMU用VPN来选择适当的PTE。将页表条目中物理页号（Physical Page Number， PPN）截虚拟地址中的VPO串联起来，就得到相应的物理地址因为物理和虚拟页面都是P字节的，所以物理页面偏移（Physical Page Offset，PPO）是相同的step 1：处理器生成一个虚拟地址，并把它传送给MMUstep 2：MMU生成PTE地址，并从高速缓存/主存请求得到它step 3：高速缓存/主存向MMU返回PTEstep 4：MMU构造物理地址，并把它传送给高速缓存/主存step 5：高速缓存/主存返回所请求的数据字给处理器