首页 理论教育深入剖析Linux内核与设备驱动:内存管理基本需求

深入剖析Linux内核与设备驱动:内存管理基本需求

【摘要】:内存管理是Linux内核非常重要的功能,可以说是最基础的功能之一。图4-31存储系统层次结构整个内存管理的首要需求自然是内存物理空间的管理。特别是视频应用需求的不断增长使得内存管理的需求也发生了变化,由于图像分辨率以及显示分辨率的不断提高,而协处理器通常又需要连续的物理内存,这样就有对于几兆甚至十几兆连续内存管理的需求。而原有的Linux内核内存管理并不能满足这种需求,这样就需要开发新的内存管理方法。

内存管理是Linux内核非常重要的功能,可以说是最基础的功能之一。在介绍最小系统的时候,就已经看到内存是硬件必不可少的部分。如何管理内存一直是一个综合的问题,对于内存的管理是多方面的,因为存储系统本身就是一个有层次概念的系统。存储系统的层次结构如图4-31所示。而内存RAM是既可以用来执行指令又可以用来存放数据的多功能存储器件,而且在存储系统层次中位于中间的位置,起到承上启下的作用,性价比(速度快并且价格低)十分高,这样就附加了内存缓存的功能需求,用于缓存底层存储系统的数据。

978-7-111-49426-3-Chapter04-145.jpg

图4-31 存储系统层次结构

整个内存管理的首要需求自然是内存物理空间的管理。当然空间的管理要有单元的概念,并且单元大小要合适,单元小则需要的管理资源多,单元大就会有浪费。由于处理器是使用自己的视角(地址空间)访问内存,内存的管理也要从处理器的角度出发。由于处理器使用虚拟地址并通过映射来访问内存,这样内存管理就不能只关心内存的物理空间,还要关心虚拟地址空间,并对虚拟地址空间和映射关系进行管理。这样内核中实际的内存管理需求就包括了内存物理空间管理、虚拟地址空间管理,以及虚拟地址和内存物理地址映射关系的管理。(www.chuimin.cn)

同样内存管理部分会有相应的性能需求,主要是减少碎片,包括外部碎片和内部碎片(与管理粒度相关)。另外对于分配和释放也有性能的要求(当然是越快越好)。

作为内核的基础功能之一,内存管理由于空间的限制,需要将各种模块及不同情况下对于内存的请求分为不同的优先级和不同的方式进行操作,这些也是内存管理需要满足的需求。

随着SoC芯片技术的发展,愈来愈多的协处理器加入到了SoC中。特别是视频应用需求的不断增长使得内存管理的需求也发生了变化,由于图像分辨率以及显示分辨率的不断提高,而协处理器通常又需要连续的物理内存,这样就有对于几兆甚至十几兆连续内存管理的需求。而原有的Linux内核内存管理并不能满足这种需求,这样就需要开发新的内存管理方法。简便有效的方法是将相应的物理空间和Linux内核的空间保持分离,相应的物理空间单独进行管理,应用则通过映射来进行访问。这部分空间通常由芯片厂商提供管理方法,如TI的CMEM、高通的PMEM等。当然随着内核的发展,芯片厂商各自为政的局面必然得到改观。现今内核也在逐渐整合这部分功能,提出了一些独立的方案,如CMA和ION。最新的内核有对两者进行整合的趋势,很可能将CMA作为ION的基础。不管怎样,这个功能需求是固定的,原理也是基本一致的,后面会以TI的CMEM为例进行介绍,至于内核最终的解决形式还要时间的验证。