【1000个Linux内存知识

编程入门 行业动态 更新时间:2024-10-18 08:24:03

【1000个Linux<a href=https://www.elefans.com/category/jswz/34/1771154.html style=内存知识"/>

【1000个Linux内存知识

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

交换式就是假设系统有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空间

更多推荐

【1000个Linux内存知识

本文发布于:2024-02-16 23:14:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691789.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内存   知识   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!