1,介绍

显存是计算机、嵌入式系统重要的资源之一,显存管理是操作系统中重要的子系统之一,也是诸多子系统中最复杂、庞大的一个,其中包含了诸多的概念与原理,有一些还很难理解。显存管理子系统为其他子系统提供了基础显存分配与释放的功能及插口,通过显存管理子系统可以将进程管理子系统、文件子系统、网络子系统等串上去。

显存管理主要是对化学显存进行组织与管理,之后按照须要对化学显存进行分配与回收。初期的显存管理是很比较简单的:内核及进程都运行在数学显存上。因为没有做内核与进程之间的显存隔离,所以存在着进程改写内核数据的风险,但是,显存的借助效率比较低。

为了解决空间保护的问题,人们想到一种分段机制的方案,其基本思想就是把程序所需显存空间的虚拟地址映射到某个数学地址空间。这样程序运行到的地址是虚拟地址嵌入式linux论坛,通过虚拟到化学地址映射的方式。把虚拟地址转化成实际的化学地址。这样才能保证各进程的虚拟显存空间是互相隔离的,操作系统只须要维护虚拟到化学地址之间的映射关系。

因为分段机制的地址映射的颗粒度比较大,它是以整个进程地址空间为单位进行显存分配linux内核4.13,会导致显存的浪费,会带来频繁的c盘访问,影响性能。为了提升显存的使用效率,人们引入了分页机制。分页机制将分配的单位细分为固定大小的页面linux内核4.13,进程的虚拟地址空间根据页面大小来分割,借助程序运行时的时间及空间局部性原理,这样数据和代码能够以页面为单位留驻或换出显存,因而节约化学显存。

nt内核与linux内核_内核Linux内核和APP图_linux内核4.13

为了推动虚拟地址到化学地址之间的转化,ARM提供了MMU硬件单元,它包含了TLB和页表遍历两个单元。内核中创建并维护用于虚拟到化学地址转换的页表。TLB中缓存了近来的虚拟到化学地址的转换关系,CPU访问一个虚拟地址的时侯,会先看TLB中是否缓存了这个虚拟地址到相应化学地址的转换关系。若命中,则直接得到化学地址。否则,通过页表遍历单元遍历内核维护的页表查询相应的化学地址。(对于MMU,详见文章:一文看懂MMU工作原理)

有了分段、分页机制,假如没有一套高效的显存分配、管理方法,会存在外部碎片及内部碎片。为了解决显存使用存在的外部碎片问题,人们引入了伙伴系统(buddysystem)。为了解决显存使用存在的内部碎片问题,人们引入了slab分配器。

显存的容量是有限的,随着大量的程序及数据入住显存,显存容量都会越来越小linux文本编辑器,这时侯就须要一定的机制保证释放何必要的显存,为其他进程申请显存做打算,因而便出现了页面回收的显存管理功能。因为显存使用并不一定是次序的、无间隙的,因而有必要针对显存进行联通,将显存放在一起,降低显存碎片化的问题,因而出现了页面迁移的显存管理功能。

为了解决显存容量有限且成本高的问题,人们引入了储存金字塔,借助成本低但容量高的EMMC保存代码及数据,按照程序运行的局部性原理,通过缺页异常可以将所需的数据或代码从EMMC换入显存,同时也可以将不须要显存中的数据集代码换出到EMMC。

本文会整体上述说linux显存管理的框架及数据结构,并拆成几个部份,旁边会针对那些部份用一篇文章进行相应的述说。

2,数据结构

nt内核与linux内核_linux内核4.13_内核Linux内核和APP图

3,框架

内核Linux内核和APP图_linux内核4.13_nt内核与linux内核

nt内核与linux内核_linux内核4.13_内核Linux内核和APP图

可以将显存管理系统分为上图所示的三层,分别是用户空间层、内核空间层和硬件层。我们重点关注内核空间层。

用户空间层可以理解为linxu内核显存管理为用户空间曝露的系统调用插口,例如brk、mmap等。一般libc库会将她们封装成常见的C函数,例如malloc()/mmap()等。

内核空间层包含的显存管理相关的模块好多。用户空间层和内核空间层的插口是系统调用,因而内核空间层首先须要处理与那些显存管理相关的系统调用,例如:sys_brk/sys_mmap/sys_madvise等。其中包含VMA管理、缺页中断、匿名页面。页面高速缓存页面回收、RMAP、slab分配器、页表管理等模块。

最下边的是硬件层,包含MMU、TLB和高速缓存部件及板载的数学显存,例如LPDDR、DDR等。

4,显存管理模块

nt内核与linux内核_内核Linux内核和APP图_linux内核4.13

以下章节会在后续分别通过一篇文章讲解,这儿先列举题目,前面会将链接附上。

4.1Linux化学显存管理

4.2Linux虚拟显存管理

4.3Linux页框分配器

4.4LinuxSlab分配器

内核Linux内核和APP图_linux内核4.13_nt内核与linux内核

4.5Linux显存管理之vmalloc

4.6Linux显存管理之显存规整

4.7Linux显存管理之RMAP

4.8Linux显存管理之页帧回收

4.9Linux显存管理之交换分区

nt内核与linux内核_linux内核4.13_内核Linux内核和APP图

4.10Linux显存管理之OOMKiller

4.11Linux显存管理之ZRAM

4.12Linux显存管理之ZSwap

4.13Linux显存管理之ZCache

4.14Linux显存管理之缺页异常

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复