简单说一linux内核的内存模型(平坦,不连续,稀疏等三种内存模型)

本文深入解读Linux内核支持的三种内存模型——平坦内存模型(FlatMEM)、不连续内存模型(Discontiguous Memory)和稀疏内存模型(Sparse Memory VMMAP)。通过比喻学校的班级管理,介绍内存页和Pageframe概念,以及每种模型的工作原理。
摘要由CSDN通过智能技术生成

Linux内核支持的三种内存模型

CONFIG_FLATMEM(平坦内存模型)
CONFIG_DISCONTIGMEM(不连续内存模型)
CONFIG_SPARSEMEM_VMEMMAP(稀疏的内存模型)

CONFIG_FLATMEM(平坦内存模型)

在这里插入图片描述

基本概念(以第一个为例,不在复述)

就像管理一个学校,我们一般不以个人为单位,而是选择以班级为单位进行管理。同理,一个4G的内存空间,为了更加有效率的管理,我们按4k的大小来进行划分,4k为一页(当然这个4k不是随便选的,这里不展开说),这就是内存页
一个班级,是不是都有自己的帮号,学生个数之内的信息?内存页,也有很多信息(当然这些信息对内存页本身没用,而且不是内存页自带的,这些是操作系统赋予的,可以简单理解为用来进行标记),这些信息我们通过一个数据结构进行管理,那就是Page frame
同样是,虚拟内存的管理,也是这么逻辑,Struct page就表示一页虚拟内存

所以说什么是平坦模型

如果物理地址空间是一个连续的,没有空洞的地址空间,那么这种计算机系统的内存模型就是Flat memory,如图所示,我们将内存分成一页一页的Page frame,然后通过一个类似数组的数据结构包含起来,通过简单地址偏移,就可以找个任何一页物理内存

所以说什么是不连续模型

顾名思义,物理地址空间,不是一个完完全全连续的地址空间,中间是由断层的(为啥出现断层?整个原始的物理空间是连续的,但一些物理空间是不能用来分配的,如DMA区,又或是存储原始数据的区域),这时候怎么来进行管理呢?我们可以通过一个数据结构node来标记Struct page,只要找到node就可以索引到Struct page,如下图所示
在这里插入图片描述

所以说什么是稀疏模型

简单来说,稀疏模型跟非连续模型一样,都是将一块连续内存当成一个整体,将整个不连续物理内存,分割一块一块的连续内存块。但不同是,非连续模型只是单纯对这块内存进行标记,并不进行维护,当热插拔出现之后,会使得原本连续的内存块变得不连续。而稀疏模型的块管理结构,就是可以对热插拔引起空洞,进行维护。如图下所示:
在这里插入图片描述

总结

本文只对,三种内存模型,根据自己的理解做了大概的区分,其具体的实现,远比我说的复杂…,大家当作参考就好,本文的图片来自参考文献第一篇

鸣谢单位(若有侵权,联系删除)

Linux内存模型 (wowotech.net)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值