虚拟内存

更加有效的管理内存,系统提供了一种对主存的抽象概念,叫做虚拟内存

物理寻址:
在这里插入图片描述
虚拟寻址:
在这里插入图片描述
虚拟内存被组织为一个由存放在磁盘上的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硬件执行步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多级页表

在这里插入图片描述
使用k级页表地址翻译
在这里插入图片描述

Core i7的内存系统:
在这里插入图片描述
Core i7地址翻译:
在这里插入图片描述

Linux虚拟内存系统

内核为系统中每个进程维护一个单独的任务结构(task_struct),一个Linux进程的虚拟内存:
在这里插入图片描述
Linux组织虚拟内存的方式:
在这里插入图片描述
任务结构的一个条目指向mm_struct,描述了虚拟内存的当前状态,pgd指向第一级页表的基址,mmap指向一个vm_area_structs的链表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值