Utility之内存尺寸的示例分析

小编给大家分享一下Utility之内存尺寸的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联主营肥城网站建设的网络公司,主营网站建设方案,重庆APP软件开发,肥城h5微信小程序搭建,肥城网站营销推广欢迎肥城等地区企业咨询

虽然现在64位处理器越来越多,而且VxWorks也从6.9开始提供64位处理器的支持,但是目前VxWorks更多的应用场景还是32位的。那么VxWorks在32位处理器上最多可以使用多少内存呢?

32位系统的寻址范围是232 = 4G,但至少得给外设预留部分空间,因此可使用的内存范围肯定要小于4GB了。做个实验:X86的设备上,插一个4GB的内存条

Utility之内存尺寸的示例分析

使用LOCAL_MEM_AUTOSIZE模式

Utility之内存尺寸的示例分析

启动VxWorks,内存尺寸显示为3071MB

Utility之内存尺寸的示例分析

看一下内存的Top点在哪,可由函数sysPhysMemTop()获得,是3GB=3072MB

Utility之内存尺寸的示例分析

少的那一个MB去哪了?原来X86的内存是从0x100000开始算的

Utility之内存尺寸的示例分析

那这3071MB都可以随便使用吗?当然不是

内存的大致布局如下

Utility之内存尺寸的示例分析

挨个看一下

在LOCAL_MEM_LOCAL_ADRS和RAM_LOW_ADRS之间的区域,VxWorks系统存储了一些特定的数据

Utility之内存尺寸的示例分析

例如Boot line,在LOCAL_MEM_LOCAL_ADRS+ BOOT_LINE_OFFSET

Utility之内存尺寸的示例分析

从RAM_LOW_ADRS开始,存放的就是VxWorks系统镜像。编译时,镜像尾部会加入一个全局变量end,因此可以通过end来计算镜像的尺寸

Utility之内存尺寸的示例分析

其实这个尺寸在编译时就确定了,只不过因为对齐的关系,略有偏差

Utility之内存尺寸的示例分析

从内存顶部往下看,有两块预留区域。上面一块预留给EDR机制,其尺寸默认是24KB (PM_RESERVED_MEM = 6*VM_PAGE_SIZE)

Utility之内存尺寸的示例分析

下面一块是用户保留区,其尺寸是USER_RESERVED_MEM

Utility之内存尺寸的示例分析

这个区域的起始位置,可以由函数sysMemTop()获得

Utility之内存尺寸的示例分析

可以看到与sysPhysMemTop()值相同,那是因为在当前镜像里这俩保留区域默认都没有使能,因此尺寸还都是0

而end与sysMemTop()之间的区域,又可以分为三块

从end开始,存放WDB内存池,占用的空间WDB_POOL_SIZE默认是(sysMemTop()-end)/16

Utility之内存尺寸的示例分析

WDB之后,就是系统内存池,其尺寸KERNEL_HEAP_SIZE默认是(sysMemTop()-FREE_MEM_START_ADRS)/3*2 = WDB_POOL_SIZE*10

Utility之内存尺寸的示例分析

最后剩下的一块,是预留给RTP或共享库或共享数据区的,当它们加载时,再进行动态映射。其尺寸,就是(sysMemTop()-end)再减去WDB内存池和系统内存池,因此默认等于WDB_POOL_SIZE*5

那系统内存池的最大尺寸到底可以是多少?那就把另外几个可选区域都去掉:WDB内存池、RTP、用户保留区、EDR区域。系统内存池就是(sysPhysMemTop()-end):3GB减去RAM_LOW_ADRS之前的几个MB,再减去系统镜像的几个MB

Utility之内存尺寸的示例分析

以上是“Utility之内存尺寸的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文题目:Utility之内存尺寸的示例分析
文章路径:http://azwzsj.com/article/geeogj.html