本文共 834 字,大约阅读时间需要 2 分钟。
更加有效的管理内存,系统提供了一种对主存的抽象概念,叫做虚拟内存
物理寻址:
虚拟寻址: 虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,每个字节有一个唯一的虚拟地址,作为数组的索引。VM系统将虚拟内存分割为虚拟页,物理内存被分割为物理页(页帧)如图有一个8个虚拟页的虚拟内存,虚拟页0、3未被分配,因此磁盘上还不存在,虚拟页1、4、6被缓存到物理内存中,页2、5、7已经被分配,但并未缓存到主存中
页表将虚拟页映射到物理页
页命中:CPU读VP2中的虚拟内存,VP2被缓存在DRAM中,地址翻译硬件将虚拟地址作为一个索引定位PTE2,并从内存读取,因为设置了有效位,那么地址翻译硬件就知道VP2是缓存在内存中缺页:DRAM缓存不命中。CPU引用VP3中的一个字,VP3并未缓存在DRAM中,地址翻译硬件从内存读取PTE3,从有效位推断VP3未被缓存,触发缺页异常,选择一个牺牲页,内核从磁盘复制VP3到内存的PP3,更新PTE3
VM缺页之前,对VP3的字的引用不命中,触发缺页
VM缺页之后,缺页处理程序选择VP4作为牺牲页,用VP3的副本取代操作系统为每个进程提供独立的页表,因而也就是独立的虚拟地址空间,多个虚拟页面可以映射到同一个共享物理页面上
如图展示了MMU
如何利用页表实现映射,CPU中的一个控制寄存器,页表基址寄存器指向当前页表,n位虚拟地址包含:一个p位的虚拟页面偏移、一个n-p位的虚拟页号
CPU
硬件执行步骤:
Core i7的内存系统:
Core i7地址翻译:内核为系统中每个进程维护一个单独的任务结构(task_struct),一个Linux进程的虚拟内存:
Linux组织虚拟内存的方式: 任务结构的一个条目指向mm_struct
,描述了虚拟内存的当前状态,pgd
指向第一级页表的基址,mmap
指向一个vm_area_structs
的链表 转载地址:http://ayhpi.baihongyu.com/