您的位置:首页 > 新技术 >

进程虚拟内存布局和进程虚拟内存分配和释放过程 涉及的

2020-06-28 10:32:00 来源:电子说

随着cpu技术的发展,大多数移动设备、个人电脑和服务器已经使用了64位CPU,但Linux内核的虚拟内存管理仍然停留在用户模式和内核模式的虚拟内存:1的历史概念中,导致在解决一些内存问题时产生误解。

例如,当前主流的移动设备操作系统安卓经常会遇到这样的问题,比如进程被内存使用量大的lmk杀死,由于没有分配内存而触发OOM/ANR,或者由于内存分配慢而阻塞,在内核模式下哪个内存分配功能更合理等。有些涉及物理内存分配,而另一些涉及虚拟内存分配。如果您不熟悉虚拟内存管理的技术知识,您可能会走很多弯路。

我们计划通过一系列的文章介绍虚拟内存分配/释放、页面错误处理、内存压缩/恢复、内存分配器等知识,以理清虚拟内存的管理。本章介绍了该流程的虚拟内存布局以及该流程的虚拟内存分配和释放流程,涉及android-8.1、内核-4.9版本-4.9和arm64架构。

处理虚拟内存空间

虚拟地址空间分布

理论上,64位地址支持的地址空间是[0,2(64-1)],但实际上,现有的应用不使用如此大的地址空间,arm64芯片现在不支持访问如此大的地址空间,arm64架构芯片支持最大限度地访问48位地址空间。例如,在安卓系统中,整个虚拟地址空间分为两部分,如下图所示:

[0x 0001000000000000000,0xFFFF000000000000之间的地址不规则,无法使用。这段内存将整个虚拟地址空间分成两段,低段内存是进程用户地址空间,高段内存是内核地址空间。参考代码(archar m 64 includeeasmmemory . h):

如果内核打开CONFIG_COMPAT选项,这意味着用户模式支持64位进程和32位进程。因为32位地址可以访问的虚拟地址空间最多只有4 GB (232字节),所以32位进程的用户模式进程地址空间不同于64位进程。

32位进程的用户模式地址空间为[0x0,0x00000000FFFF_FFFF]

64位进程的用户模式地址空间为[[0x0,0x0000FFFFFFFF_FFFF]]

从代码中可以看出,32位进程的用户空间大小为4GB,64位进程的虚拟内存大小与CONFIG_ARM64_VA_BITS的值有关;如果CONFIG_ARM64_VA_BITS是48位,它可以达到256TB。如今,移动设备显然不使用这么大的内存空间,所以大多数安卓设备的默认配置是39,即64位进程的最大虚拟地址空间大小是512GB。

虽然32位或64位进程的内存空间大小在用户模式下有所不同,但是当它们进入内核模式时,所访问的内核空间的地址并没有什么不同,从VA_START到0xffffffffffff的地址是512GB。

每个进程的虚拟地址空间主要分为以下几个区域(如图所示):

代码段(文本)、数据段(数据)和未初始化的数据段(bss)。

动态库的代码段、数据段和未初始化的数据段。

堆,动态分配和释放内存。

堆栈、存储局部变量和实现函数调用。

环境变量和参数字符串的存储区域。

文件间隔被映射到虚拟地址空间的内存映射区域。

其中数据段、BSS段和堆段统称为数据点。

几个地址的概念

在介绍了虚拟内存地址空间之后,本文阐明了几种地址的概念:物理地址、线性地址和逻辑地址。

物理地址

每块物理内存存储实际地址,例如8GB内存,其中0x00000000代表第一个字节的地址,0xFFFFFFFF代表最后一个字节的地址;物理地址的值与实际内存上的地址相对应,物理地址的大小与cpu访问物理内存的总线宽度有一定的关系。

线性地址

为了保证系统多任务运行的安全性和可靠性(防止一个任务篡改系统内存或其他任务),中央处理器增加了分段页内存管理;由段基地址段中的偏移量形成的地址是线性地址;如果启用了分页内存管理,则只能通过内存管理单元计算将线性地址转换为物理地址。

逻辑地址

当每个进程运行时,中央处理器看到的地址是逻辑地址,它实际上是线性地址段内的偏移地址。线性地址可以从逻辑地址和段基地址计算出来。

当进程访问虚拟地址空间中的任何合法地址时,它必须遵循逻辑地址-线性地址-物理地址的顺序。

栏目导读

无人车“入春”,批量上路仍需“爬坡”

  防控疫情的需求激发之下,代替人类送药、送餐送菜、消毒巡逻的无人车成了疫情期间的特殊尖兵。疫情过后,无人车配送是否...

2020-03-23 17:12

5G、AI、大数据的发展,对智慧城市会有什么影响

市场分调研机构Omdia的最新数据分析显示,全球智能城市人工智能(AI)软件市场将从6 738亿美元(2019年),在2025年将增长到4...

2020-04-07 17:55

机器人制造过程中的传感器技术之磁光效应传感器

现代电测技术日趋成熟,由于具有精度高、便于微机相连实现自动实时处理等优点,已经广泛应用在电气量和非电气量的测量中。

2020-04-07 17:56

微软不需要快速拥抱VR

微软经常在游戏领域开辟路径,扮演开拓者的角色,这一点体现在很多方面,包括微软的尖端技术(DX12终极版 DX光追),硬件(X...

2020-04-07 17:57

波音Starliner载人航天器再次展开测试

去年 12 月,波音为美国宇航局发射了未载人的 Starliner 航天器。然而由于技术问题,任务并没有按计划进行。作为 NASA ...

2020-04-07 17:58