内存管理

一、定长内存管理

定长内存:就是我们每次分配的获得的内存大小相同,即使用的是确定长度的内存块。同时,这些内存块总的个数也是确定的,即整个内存总的大小也是确定的。(定长内存和内存池概念相同)

优点:实现分配好的足够内存,可极大提高关键性应用的稳定性;对于定长内存的管理通常有更为简单的算法,分配/释放的效率更高。
在SylixOS中,将管理的一个定长内存称作PARTITION,即内存分区。

二、变长内存管理

变长内存:每次分配的内存大小是不同的,和malloc/free类似,唯一区别是所使用的内存是由用户提供的。
SylixOS将变长内存称作REGION,即内存区域。

会产生内存碎片:因为频繁分配/释放内存操作。会影响到其他应用程序内存堆的效率。

SylixOS采用“首次适应-立即聚合”内存管理算法,能够有效的减少内存碎片的产生。

比如分配1024大小内存,每次分配256,只能分3次,因为内存区域本身会使用部分空间存储内存分片信息。

三、posix标准内存管理

1、malloc、calloc、realloc分配的内存地址必须对齐。对齐的目的:为了在任何硬件平台上高效地访问任意类型的数据结构,同时还可以避免在某些硬件平台上,因为不对齐的地址上进行多字节访问造成的硬件异常错误。

SylixOS内存管理本身就符合POSIX标准。每创建一个进程,系统内部会自动分配内存为其创建内存堆。

malloc分配的是内存的字节数。
calloc分配的是以数据块分配的,每个数据块多大。实际上分配的是数据块*数据块大小的连续地址空间的内存,这点和malloc并没有差异。

realloc和Lw_Region_Realloc完全一致。

2、malloc函数可以为应用程序分配内存,在SylixOS中支持三种分配方法:dlmalloc方法、orig方法(这个方法由SylixOS内核实现,通常用到内核内存分配中)、tlsf方法、Ptmalloc方法。

这三种方法在内核memory_cfg.h文件中可以进行配置。

四、虚拟内存管理

1、SylixOS作为多进程操作系统,有内核空间和用户空间之分。
内核空间:内核线程、驱动程序、内核模块。
用户空间:应用程序、动态链接库

2、通用内存区(即内核空间):系统本身使用的内存空间。
主要包括操作系统镜像、系统使用的内存堆和栈空间,物理地址和虚拟地址完全相同。
(bspmap.h)

3、进程页面管理
创建进程时,会给进程自身分配虚拟页面,包括进程的数据段、代码段、堆内存。(预分配32M虚拟页面,并会为进程自身的某些数据分配物理内存。)
进程运行时,访问栈内存或使用申请函数申请空间。

4、虚拟内存映射
1)以内存方式访问I/O设备
2)使用mmap实现内存共享
3)匿名映射

五、bspMap.h分析

文件中定义了物理分页空间与全局映射关系表。_G_physicalDesc 用于描述物理地址和虚拟地址的映射关系,_G_virtualDesc 用于描述可用虚拟地址空间的起始地址和范围。注意: 虚拟内存空间编址不能与内核TEXT段, 内核DATA段, VECTOR段, DMA缓冲区所映射的区间冲突。一般 _G_physicalDesc中采用平板映射(物理地址等于虚拟地址)的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值