论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
下面详细介绍一下我们常用的RTOS——美国风河公司(WindRiver)的VxWorks中采用的内存分配策略。VxWorks的前身就是VRTX,据说VxWorks的名称来自make vrtx work。
VxWorks的内存管理函数存在于2个库中;memPartLib(紧凑的内存分区管理器)和memLib(完整的内存分区管理器)。前者(memPartLib)提供的工具用于从内存分区中分配内存块。该库包含两类程序,一类是通用工具创建和管理内存分区并从这些分区中分配和管理内存块;另一类是标准的malloc/free程序提供与内存分区的接口。系统内存分区(其ID为memSysPartId是一个全局变量)在内核初始化时由usrRoot调用memInit创建。其开始地址为RAM中紧接着VxWorks的BSS段之后,大小为所有空闲内存,如图1所示。
当创建其它分区时,一般需要先调用malloc从系统内存分区中分配一段内存才能创建。内存分区的结构定义为mem_part,包含1个对象标记,1个双向链表管理空闲块,1个信号量保护该分区及一些统计信息,如总尺寸、最大块尺寸、调试选项、已分配的块数、已分配的尺寸等。其语句如下:
typedef struct mem_part {
OBJ_CORE objCore; /*对象标志*/
DL-LIST freeList; /*空闲链表*/
SEMAPHORE sem; /*保护分区的信号量*/
Unsigned totalWords; /*分区中字(WORD)数*/
Unsigned minBlockWords; /*以字为单位的最小块尺寸*/
Unsigned options; /*选项,用于调试或统计*/
/*分配统计*/
unsigned curBlocksAllocated; /*当前分