内存划分:
操作系统内存的划分一般有两种方法,按段划分与按页划分,两种方法的比较:
1、从表示方法和状态确定角度去考虑:段的长度大小不一致,表示段的数据结构比较复杂,不容易确定一个段是分配还是空闲的,而页的大小固定,只需要采用位图或者简单的数据结构就能表示页的分配和释放。
2、 从内存碎片利用看:段的长度大小不一,更容易产生内存碎片,而页的大小固定,可以通过修改页表的方式,让连续的虚拟页面映射到非连续的物理页面,能够减少内存碎片的产生。
3、 段的最大问题是使得虚拟内存地址空间难于实施。
如何表示一个页
使用分页模型管理内存,以4kb大小将物理内存空间划分,从地址x开始到x+0xFF的物理内存空间以一页表示,称为内存页,x必须0x1000对齐,逻辑图如下所示:
内存区:
将多个内存页面分成几个内存区,更能方便对内存的合理管理,进一步做精细化的控制。内存区是逻辑上的概念,可以划分为:
硬件区:占用物理内存低端区域,地址区间0~32MB,主要是给某些硬件使用,如DMA.
内核区:运行在虚拟地址空间,但一般需要大的且连续的物理内存空间,
应用区:主要是给应用用户态程序使用,使用虚拟地址空间,使用时按需分配,不会一次性分配完所需的全部物理内存。具体如下图所示:
组织内存页:
以每个 memarea_t 结构表示一个内存区,memarea_t 结构中包含一个内存分割合并 memdivmer_t 结构,而在 memdivmer_t 结构中又包含了 bafhlst_t 结构类型 dm_mdmlielst 数组。在 dm_mdmlielst 数组中挂载了多个 msadsc_t 结构。
dm_mdmlielst数组中第0个元素挂载单个msadsc_t结构,第1个元素挂载两个连续的msadsc_t结构,第n个元素挂载2^n个连续的msadsc_t结构,依次类推,如下图所示: