虚拟内存的作用是什么 虚拟内存有什么用( 五 )

虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.6.4 加速技巧将1)MMU将地址翻译成物理地址2)将物理地址传送到L1高速缓存 。 这两步骤部分重叠 , 故也加速对L1高速缓存的访问 。
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

在虚拟地址和物理地址中确定CI的位
当地址翻译时 , 可以将索引存入缓存
通常用TLB , PPN位(CT位)可很快得到
虚拟索引 , 物理标记
仔细调整缓存大小
6 Linux进程中的虚拟地址Linux为每个进程维护单独的虚拟地址空间 , 包括内核虚拟内存和进程虚拟内存 。 前者某些区域被映射到所有进程共享的物理页面 , 如每个进程共享内核的代码和全局数据结构 。 有趣的是 , Linux也将一组连续的虚拟页面(大小等于系统中DRAM的总量)映射到相应的一组连续的物理页面 , 为内核提供便利的方法访问物理内存中特定位置 。
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

6.1 Linux将虚拟内存组织为“区域”集合Linux将虚拟内存组织称一些区域(也叫段)的集合 , 区域就是已经存在着的(已分配的)虚拟内存的连续片 , 这些页以某种方式相关联 。 如代码段、数据段、堆、共享库段以及用户栈都市不同区域 , 每个存在的虚拟页都抱存在某个区域中 , 而不属于某个区域的虚拟页是不存在的 , 且不能被进程引用 。 区域的概念很重要 , 因为它允许虚拟地址空间有间隙 , 内核不用记录那些不存在的虚拟页 , 而这样的页也不占用内存、磁盘或内核本身中的任何资源 。
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

6.2 Linux页异常处理缺页异常步骤:
虚拟地址A是否和法:缺页处理程序搜索区域结构的链表 , 把A和每个区域结构中的vm_start和vm_end做比较 , 若该指令不合法 , 则缺页处理程序就出发一个段错误 , 从而终止该进程 , 对应下图中的1
内存访问是否合法:进程是否有读、写或执行这个区域内页面的权限 , 如是不是因为运行在用户模式的进程试图从内核虚拟内存中读取字造成 , 若访问不合法则触发缺页异常 , 从而终止该进程 , 对应图中的2
合法虚拟地址进行合法操作:按调度算法选择一个页 , 若该页被修改过 , 将其交换出去换入新页并更新页表 。 缺页处理程序返回时 , CPU重新启动引起缺页的指令 , 该指令再次发A到MMU , 这次就能正常翻译A
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

6.3 内存映射将虚拟内存的areas与磁盘对象关联并初始化的机制叫内存映射 。 area可通过磁盘的普通文件(如可执行文件) , 初始化来自文件的一部分为页 , 或者匿名文件 , 首次错误将分配一个写满0的物理页 , 一旦页被写(脏)就跟其他页一样 。 无论哪种情况 , 一旦虚拟页面被初始化了 , 它就在由内核维护的专门的交换文件间换来换取 , 任何时刻 , 交换空间都限制着当前运行着的进程能分配的虚拟页面的总数 。
6.3.1 共享对象若虚拟内存系统可集成到传统的文件系统中 , 就能提供一种简单而高效的把程序和数据加载到内存中的方法 。
很多进程都有同样的只读代码区域 , 且许多程序需访问只读运行时库代码的相同副本 , 如每个C程序都需标准C库的printf函数 , 若每个进程都在主存中保持这些代码的副本 , 就极端浪费 。
一个对象可被映射到虚拟内存的一个区域 , 要么作为共享对象 , 要么作为私有对象(非共享) 。