文章插图
来源 | 后端技术指南针
文章插图
号外号外各位老铁,大家好!
最近在想如何让大家在10分钟中有所收获,写一些精悍的知识点 。
先抛一道阿里面试题给大家热热身,引出今天的主角-缺页异常Page Fault 。
谈谈对缺页异常Page Fault的理解 。话不多说,集合上车 。
文章插图
文章插图
术语约定
- VA:Virtual Address 虚拟地址
- PA:Physical Address 物理地址
- MMU:Memory Manage Unit 内存管理单元
- TLB:Translation Lookaside Buffer 旁路快表缓存/地址变换高速缓存
- PTE:Page Table Entry 分页表项
文章插图
内存的惰性分配以32位的linux系统为例,每个进程独立拥有4GB的虚拟地址空间,根据局部性原理没有必要也不可能为每个进程分配4GB的物理地址空间 。
64位系统也是一样的道理,只不过空间寻址范围大了很多很多倍,进程的虚拟地址空间会分为几个部分:
文章插图
实际上只有程序运行时用到了才去内存中寻找虚拟地址对应的页帧,找不到才可能进行分配,这就是内存的惰性(延时)分配机制 。
文章插图
对于一个运行中的进程来说,不是所有的虚拟地址在物理内存中都有对应的页,如图展示了部分虚拟地址存在对应物理页的情况:
文章插图
虚拟地址空间根据固定大小一般是4KB进行划分,物理内存可以设置不同的页面大小,通常物理页大小和虚拟页大小是一样的,本文按照物理页4KB大小展开 。
经过前面的分析,我们将面临一个问题:如何将虚拟地址准确快速地映射到物理页呢?
>>>高能预警 敲黑板 本段小结<<<1. Linux的虚拟地址空间就是空头支票,看着很大但是实际对应的物理空间只有很少的一部分 。
2.内存的惰性分配是个有效的机制,可以保证内存利用率和服务器利用率,是资源合理配置的方法 。
3.大量的虚拟地址到物理地址的快速准确地查询转换是一个难题 。
文章插图
CPU如果获取内存中的数据CPU并不直接和物理内存打交道,而是把地址转换的活外包给了MMU,MMU是一种硬件电路,其速度很快,主要工作是进行内存管理,地址转换只是它承接的业务之一 。
文章插图
一起看看MMU是如何搞定地址转换的 。
4.1 MMU和Page Table每个进程都会有自己的页表Page Table,页表存储了进程中虚拟地址到物理地址的映射关系,所以就相当于一张地图,MMU收到CPU的虚拟地址之后开始查询页表,确定是否存在映射以及读写权限是否正常,如图:
文章插图
对于4GB的虚拟地址且大小为4KB页,一级页表将有2^20个表项,页表占有连续内存并且存储空间大,多级页表可以有效降低页表的存储空间以及内存连续性要求,但是多级页表同时也带来了查询效率问题 。
文章插图
我们以2级页表为例,MMU要先进行两次页表查询确定物理地址,在确认了权限等问题后,MMU再将这个物理地址发送到总线,内存收到之后开始读取对应地址的数据并返回 。
文章插图
MMU在2级页表的情况下进行了2次检索和1次读写,那么当页表变为N级时,就变成了N次检索+1次读写 。
可见,页表级数越多查询的步骤越多,对于CPU来说等待时间越长,效率越低,这个问题还需要优化才行 。
>> 本段小结 敲黑板 划重点 <<1.页表存在于进程的内存之中,MMU收到虚拟地址之后查询Page Table来获取物理地址 。
推荐阅读
- 淘宝直通车有什么用 淘宝直通车怎么开才有效果
- 曾经风光无限的 JSP,为什么现在很少有人使用了?
- 教你20秒之内将Word转为PPT,真是太简单了
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- 第几泡茶最好喝,紫砂壶为什么适合泡茶
- Go平台的流程引擎
- 都知道DNS 但它是谁发明设计的你了解吗?
- Nginx 极简教程,常用场景统统解析
- 天真,居然还有人认为java的参数传递方式是引用传递
- 搜索引擎命令inurl代表什么意思及简单安全隐患发现