一下cpu的角度看内存模型是怎么管理出来的呢?

这里主要讲一下内存模型。所谓内存模型,其实就是从CPU的角度对它的物理内存进行分配,Linux内核用什么方法来管理这些物理内存。主要有三种内存模型:平面内存模型、不连续内存模型和稀疏内存模型。Flat memory模型的主要特点是CPU访问系统的整个内存,它的物理内存空间是连续的,访问任何一点的时间和速度都是一样的。在管理上,每个物理页框都会有一个页数据结构来抽象,所以系统中有一个struct page(mem_map)数组,每个数组入口指向一个实际的物理页框(page frame)。物理页和页结构数组的关系是一一对应的。随着计算机的发展和多CPU的出现该内存不能为read 要终止程序,每个CPU都有自己独立的内存通道,通过自己的内存通道访问与其相连的内存,速度是统一的。但是如果要访问其他CPU内存通道连接的内存,时间开销要慢很多,甚至内存不连续,导致全局内存访问速度的差异和不连续。这就是 NUMA 架构的起源,为此引入了不连续内存模型。它的速度是均匀的。但是如果要访问其他CPU内存通道连接的内存,时间开销要慢很多,甚至内存不连续,导致全局内存访问速度的差异和不连续。这就是 NUMA 架构的起源,为此引入了不连续内存模型。它的速度是均匀的。但是如果要访问其他CPU内存通道连接的内存,时间开销要慢很多,甚至内存不连续该内存不能为read 要终止程序,导致全局内存访问速度的差异和不连续。这就是 NUMA 架构的起源,为此引入了不连续内存模型。

图片[1]-一下cpu的角度看内存模型是怎么管理出来的呢?-老王博客

该模型的内存管理是平面模型的延续。它将一块访问速度一致的大内存归为一个节点,节点内的内存管理采用平台内存模型、页结构数组、物理页的管理方式。一对一的信函管理。每个节点管理的物理内存页结构存储在struct pglist_data数据结构的node_mem_map成员中。然而,技术总是在进步。随着hotplug内存热插拔的出现,node节点中的内存也可能是不连续的,从而演化出了稀疏内存管理模型(Sparse memory model),在这个模型下是连续的。地址空间按SECTION(如1G)划分为section,每个section都是hotplug。在内存管理的时候,整个连续的物理地址空间是按照一段一段一段的来截断的。在每个部分内部,它的记忆是连续的(即符合平面记忆的特点)。因此,mem_map 的 page 数组被附加到 section 结构中。(struct mem_section) 而不是节点结构 (struct pglist_data)。实际上,不连续内存模型和稀疏内存模型都可以管理NUMA架构的内存,因为NUMA没有规定内存必须是连续的,所以两种模型都可以管理NUMA架构的内存。mem_map 的页面数组附加到节结构。(struct mem_section) 而不是节点结构 (struct pglist_data)。实际上,不连续内存模型和稀疏内存模型都可以管理NUMA架构的内存,因为NUMA没有规定内存必须是连续的,所以两种模型都可以管理NUMA架构的内存。mem_map 的页面数组附加到节结构。(struct mem_section) 而不是节点结构 (struct pglist_data)。实际上,不连续内存模型和稀疏内存模型都可以管理NUMA架构的内存,因为NUMA没有规定内存必须是连续的,所以两种模型都可以管理NUMA架构的内存。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论