Linux内核的物理内存组织结构详解_第1页
Linux内核的物理内存组织结构详解_第2页
Linux内核的物理内存组织结构详解_第3页
Linux内核的物理内存组织结构详解_第4页
Linux内核的物理内存组织结构详解_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页Linux内核的物理内存组织结构详解

(Linux)中内存管理子系统使用节点(node)、区域(zone)和页(page)三级结构描述物理内存。

内存节点

内存节点分两种情况:UMA和NUMA。

从管理内存的方法上区分,计算机可以分为两种类型:UMA和NUMA。

UMA:一致性内存访问,unif(or)mmemory(ac)cess

NUMA:非一致性内存访问,non-uniformmemoryaccess

两种类型示意图:

对UMA来说,每一个(CPU)访问的都是同一块内存,因此各CPU对内存的访问不存在性能差异

对NUMA来说,各内存和各CPU通过总线连在一起,每个CPU都有一个本地内存,访问速度快,CPU也可以访问其他CPU的本地内存,但速度稍慢

Linux为了统一这两种平台,在内存组织中,将最高层次定义为内存节点.

可以看到,图中UMA只有一个内存节点,而NUMA有两个内存节点。

实际上,UMA其实是NUMA的一个特例,所以内核可以将内存都看做NUMA类型的。

区域

每个内存节点都划分为多个区,Linux内核中定义了以下几个区:

include/linux/mmzone.h

enumzone_type{#ifdefCONFIG_ZONE_(DMA)ZONE_DMA,#endif#ifdefiCONFIG_ZONE_DMA32ZONE_DMA32,#endifZONE_NORMAL,#ifdefCONFIG_HIGHMEMZONE_HIGHMEM,#endifZONE_MOVABLE,#ifdefCONFIG_ZONE_DEVICEZONE_DEVICE,#endif__MAX_NR_ZONES};ZONE_DMA

DMA是“DirectMemoryAccess”的缩写,直接内存访问。

该区域用于ISA设备的DMA操作,范围是0-16MB。

如果有些设备不能直接访问所有内存,则需要使用DMA区域。例如旧的(工业)标准体系结构(IndustryStandardArchi(te)cture,ISA)总线只能直接访问16MB以下的内存。

只适用于(Intel)x86架构,(ARM)架构没有这个内存管理区。

ZONE_DMA32

在64位的系统上使用32位地址寻址的适合DMA操作的内存区。

例如在(AMD)64系统上,该区域为低(4G)B的空间。在32位系统上,本区域通常是空的。

ZONE_NORMAL

常规内存区,指的是可以直接映射到内核空间的内存。

也常称为“普通区域”“直接映射区域”“线性映射区域”。

所谓线性映射就是物理地址和映射后的虚拟地址存在一种简单的关系,即虚拟地址=物理地址+固定偏移。

在32位系统上,内核空间和用户空间按1:3划分,那么这个固定偏移就是:0xC0000000-物理内存起始地址。

既然存在一种线性关系,那还需要使用页表对物理地址和虚拟地址做映射吗?

不同(处理器)架构实现不一样,ARM需要使用页表映射,MIPS则不需要。

ZONE_HIGHMEM

高端内存区,32位时代的产物。在32位系统上,指的是高于896M的物理内存。

32位系统中,内核和用户地址空间按1:3划分,内核地址空间只有1GB,所以不能把1GB以上的内存直接映射到内核地址空间,因此就把不能直接映射的内存划分到了高端内存区。

要将高于896MB的物理内存映射在内核空间的话,需要通过单独的映射来完成,并且这类映射不能保证物理地址和虚拟地址之间存在固定的对应关系(例如ZONE_NORMAL的固定偏移)。

ZONE_DMA、ZONE_DMA32、ZONE_NORMAL通常都统称为低端内存区。

64位系统中没有这个区域,即没有高端内存。因为64系统的内核虚拟地址空间非常大,不再需要高端内存区域。

ZONE_MOVABLE

一个伪内存区,用来防止内存碎片。

ZONE_DEVICE

为支持持久内存(pe(rs)istentmemory)热拔插增加的内存区域

站在处理器的角度来看,管理物理内存的最小单位是页面。

现在的处理器都采用分页机制来管理内存,在处理器内部有一个MMU(硬件),它会处理虚拟内存到物理内存的映射,也就是做页表的翻译工作。

Linux内核中使用一个page数据结构来描述一个物理页面。

页的大小通常是4KB,但有个的架构的处理器可以支持大于4KB的页,例如8KB、16KB或者64KB的页。

目前Linux内核默认使用4KB的页面。

所以,Linux内核的用三级结构来管理物理内存,简言之就是内存首先划分成若干个大的节点,每个节点又包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论