|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 存储管理 > 分区存储管理(固定分区、可变分区、内存保护等) > 分区存储管理 >
|
相关知识点:3个
|
|
|
|
下图是一个嵌入式系统的内存布局,主要是堆空间的管理。如下图所示,整个堆空间被划分为两部分:一部分是内存块池;一部分是字节池。前者即为固定分区的存储管理方式,后者即为可变分区的存储管理方式。需要说明的是,这里的分区存储管理讨论的并不是各个任务的地址空间,而是系统的堆空间,即各个任务在运行的时候,如果它们需要使用动态内存,就会通过类似于malloc的函数提出申请,系统就会从堆当中分配相应的空间,满足任务的动态内存请求,而不是把整个任务装进来。
|
|
|
|
|
下图(a)是内存块池的具体分布。该区域总的大小为1408KB,被划分为不同大小的块。例如,大小为64B的块有1024个,共64KB;大小为512B的块有32个,共16KB,等等。最大的块为512KB,只有一个。另外,当任务去申请一块内存空间时,其大小并不一定与某个块的大小正好相同。例如,假设任务申请的对象大小为9KB,系统只能将一个16KB的块分配给它,所以内碎片为7KB。
|
|
|
|
|
上图(b)是字节池的示意图,任务可以申请一块任意大小的内存空间。在当前状态下,如果下一次请求的大小不超过段1,就会把它一分为二,满足此次请求。另外,虽然在系统中有四块空闲分区,但它们并没有连接在一起。因此,当任务在提出内存申请的时候,能够满足的最大请求为段5和段6这两块分区之和。实际上,在内存回收算法当中,应该会把这两个相邻的分区进行合并,合成一个大的空闲分区。
|
|
|