VxWorks for PowerPC的内存分配

VxWorks for PowerPC的内存分配图:

PowerPC体系结构的内存结构包括5大部分,分别为系统映像(System Image)之前的系统启动相关的低端内存,系统映像,Host Memory Pool,中断堆栈以及系统内存池(System Memory Pool)。下面就各部分进行介绍。

1.        系统映像之前的低端内存

包括中断向量表(Interrupt Vector Table),共享内存标志(SM Anchor),启动参数(Boot Line),异常信息(Exception Message)和初始化堆栈(Initial Stack)。

中断向量表(异常向量表)占据0x00x3000地址的12KB的空间,保存有重要的中断向量信息;

共享内存标志占据0x41000x4200地址的100字节,它的作用是标志是否有网络共享内存和VxMP共享内存对象;

启动参数是保留VxWorks启动的时候所用的参数,如:

qefcc(0,0)host:vxWorks h=192.1.1.1 e=192.254.0.4 u=cca pw=cca tn=cca

异常信息,起始地址是0x4300,如果启动过程中出现致命异常,则系统将异常信息保留在这段内存中。如果系统启动过程中失败,我们首先要看的是这段地址中记录的异常信息,可以使用d 0x4300命令查看其中记录的内容。

初始化堆栈,是给usrInit()使用的初始化堆栈,直到usrRoot()分配堆栈。起始地址是0x4C00

2.        系统映像

系统映像是ELF格式的文件,boot启动之后,将系统映像(boot映像或版本映像)Flashcopy或解压(如果是压缩版本)到RAM_LOW_ADRS地址处,并跳转到该地址执行。

系统映像包括三部分:TEXT段、DATA段、BSS段。其中TEXT段是代码段,使用的内存基本是必须的;DATA段是数据段,包括已经初始化的全局变量和数组;而BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。

代码段的起始地址:RAM_LOW_ADRS,终止地址:VxWorks定义的char etext[]

数据段的起始地址:VxWorks定义的char etext[],终止地址:VxWorks定义的char edata[]

BSS段的起始地址:VxWorks定义的char edata[],终止地址:VxWorks定义的char end[]

FREE_RAM_ADRS指向VxWorks定义的char end[],即BSS段的最后,也是映像的最后。

end是由loader在动态加载时确定的,从源码里找不到。首先取得end变量的地址,再减去低RAM_LOW_ADRS的空间,即得到系统映像的大小:

dwImageSize = (WORD32)end - RAM_LOW_ADRS;

 

3.        Host Memory Pool

Host Memory Pool是在VxWorks上驻留的调试工具使用的内存空间,可以根据WDB_POOL_SIZE宏值得到。该部分大小一般有十几M左右。

起始地址:VxWorks定义的char end[],终止地址:end+WDB_POOL_SIZE

4.        中断堆栈:中断堆栈的大小可以由宏ISR_STACK_SIZE定义可以得出。

5.    系统内存池

这部分是给VxWorks用户程序使用的存储空间,用户通过malloc动态申请获得,这部分可以说是最大的内存空间,当物理内存不够需要优化时需要重点考虑

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值