【1000个Linux内存知识-001】-为什么linux使用页表管理内存?为什么需要mmu?为什么需要tlb?

文章探讨了早期的交换式内存管理和页式管理的演变,强调了固定大小页以减少碎片的重要性。虚拟内存的概念解决了空间限制问题,通过多级页表和MMU进行地址转换。TLB(快表)的引入加速了地址查找过程,处理了多级页表的效率问题。文章还描述了CPU访问虚拟地址的流程,包括TLB缓存和缺页中断的角色。
摘要由CSDN通过智能技术生成

早期有固定地址方式 有交换式

交换式就是假设系统有ABC的进城分配特定大小 然后不用就交换到磁盘,但是经过多次会出现a回收的可能被其他大小使用会出现内存碎片 浪费资源

另外就是这种方式还有最大值限制 就是真实物理内存

问题本质是不同进程大小不一 那么如何避免碎片 那就是让空间固定大小分配 页式管理就是固定大小 它的本质是固定大小 具体页大小有的4k 有的64k 根据需求确定

于是页式内存管理应运而生,核心是解决交换系统的内存碎片问题 

让虚拟空间和物理空间按照相同页大小分配 然后结合交换就能解决空间不够问题

空间大小限制问题本质解法是引入虚拟内存概念,并且把 虚拟内存和物理内存解绑 从而获得无限空间

有了虚拟内存到物理内存的映射 并且物理内存管理按照页管理 就需要地址转换 就需要一个内存管理单元mmu做地址转换

后来多进程为了都有自己的独立的全量地址空间,也需要不同进程有自己的地址翻译 并且增加了映射页表数量需求

采用页表方式,缺点就是页表太大,32b的需要2^20 也就是1M=100w的页表项,而且这还只是一个进程空间。再加上不同进程页表数量巨大 为了节约RAM空间就增加了多级页表,类似页表方式,让顶级页表常驻内存,比如2^10=1k,让二级页表存入磁盘,页表项也到磁盘上去。

需要用的时候先一级页表,根据访存地址一级地址 获取到二级页表存储位置,然后二级页表地址偏移获取到三级页表地址 然后偏移得到物理地址

缺点就是需要3步拿到pa

后来为了加速又打了个补丁,tlb translation lookaside buffer快表,cpu将查询过的存到tlb中 下次用先在tlb中查询 这样比较快,而且还有程序的空间集合属性 同时访问的挨着的

tlb是硬件实现的并行比较器 一次指令全部比较所以快

cpu访问虚拟地址流程是 先tlb查询是否有 有就访问了,没有就根据va的高10b 从cr寄存器获取一级页表基地址 加上10b的偏移 获取二级页表地址。

然后根据二级页表偏移获取 页表物理地址 再加上偏移查看物理地址。

如果查看不在内存在磁盘 就出发缺页中断 中断将访问的地址映射到内存 然后填写pa 然后可访问

总结就是 

- 页表管理本质是分配固定大小管理 避免碎片提高资源利用率

- 多级页表是为了节约ram空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值