一样先来个简单的总结吧!
这份文件 Physical Memory Model
是在描述 Linux kernel 是怎麽样管理实体记忆体的。
Linux kernel 中有两种记忆体模型,这篇文件介绍了两种记忆体模型是如何管理实体记忆体的,
并且简单描述了这两种模型应该使用和实作的 API:
FLATMEM model
:适用於非 NUMA 架构,且实体记忆体区段几乎都是连续的记忆体架构上,Linux 最一开始所使用的记忆体模型。
SPARSEMEM model
:通用的记忆体模型,是想要取代 DISCONTIGMEM
这个记忆体模型
最後讲述到了 ZONE_DEVICE
,一个搭建於 SPARSEMEM_VMEMMAP
的设施,
让驱动程序所使用的实体记忆体区块也能使用 mem_map 相关操作。
实体记忆体在 Linux 的管理下,是被分为一个一个 PAGE_SIZE 大小的区块 (实际PAGE_SIZE值和架构有关),而这一块 PAGE_SIZE 大小的区块就被称为 page frame
,是实体记忆体的最小管理单位,每一个 page frame 会由一个 struct page 的物件所纪录(纪录它的使用状况);
page frame number 就是 page frame 的编号,PA 位址 addr 的 PFN 就是 addr >> PAGE_SIZE
。
这是指一种多处理器的记忆体架构,记忆体存取的速度是和记忆体与处理器的距离有关系的,处理器对不同位置的记忆体有不同的存取速度,所以称为 "Non-Uniform"
这是一个实体记忆体管理模型的演进,最早出现的是 FLATMEM
,直觉式的实作方式,把实体记忆体用 struct page 物件阵列来做纪录,struct page 和 pfn 之间的关系简单,转换也很容易;
DISCONTIGMEM
则是为了更有效率的管理不连续的实体记忆体系统,以及较好的支援 NUMA 系统而被创造出来,引进了 memory node 的概念,来符合 NUMA 架构下,每个 node 有自己独立的记忆体管理子系统;
最後 SPARSEMEM
则是因为 DISCONTIGMEM
对於 memory hotplug 和 memory hot remove 的支援性太差(NUME node 的 granularity 对於 hot plug 或是 hot remove 都太大了(coarse)),所以被实作出来,做为一个更通用并且支援 hot plug、hot remove 用来取代 DISCONTIGMEM
。
DISCONTIGMEM
在 5.13 版的 kernel 都还看的到它的踪迹,而在 5.14 之後看起来就被 SPARSEMEM
所彻底取代了。
今天简单记录到这,感谢各位观看!
明天也许来研究一下,这些 memory model 在 RISC-V 下的实作,顺便看看 kernel 是如何取的 dtb 中的 memory 资讯以及传递下来来做这些实体记忆体管理的;
我们明天见!
<<: Day13 主动情蒐-利用 tcpdump 观察 Netdiscover && Ping 封包
您是否希望提高您的竞争地位? 应对外部威胁?识别新的机会或风险? 扩大您在新市场的影响力? 战略分...
前言 今天要体验的工具位於Kali的09-Sniffing & Spoofing分类,这类的...
这篇就讲玩到的小东西吧!可能会有人觉得没意思,不过我还是想写,反正是我的手在动,嘿嘿~ 关於在命令提...
https://github.com/PacktPublishing/Machine-Learni...
今天我们来看一下 powershell 中的另一种逻辑判断 switch. switch 语法: s...