vxWorks启动时间

来源:互联网 发布:zookeeper nginx 整合 编辑:程序博客网 时间:2024/06/02 04:38
CSDN日报20170403 ——《该不该离职?它说了算!》      程序员你的职场该这么规划!      Python数据分析与机器学习      博客搬家,有礼相送
 

vxWorks内存管理

 2613人阅读 评论(0) 收藏 举报
 分类:
转:缩短vxworks启动时间的方法  
对于有mmu的cpu系统,vxworks系统的一般启动时间在10秒左右。相对于windows之类启动时间几分钟来说,可以说是非常短了。然而对于从上电到启动用户程序在1秒内的特殊要求。10秒显然是太长了。这里解决了这个问题。具体的平台为一块powerpc7xx单板机,有南桥,北桥,pci,vme总线。这里的解决方法,实际上是不限于powerpc cpu的,因此对于有类似要求,别的平台的用户来说也具有价值。 
由于对于启动时间有特殊要求,因此首先做的是要详细了解vxWorks OS 的启动步骤。通过研读代码,知道启动部分后,相应找到了影响启动时间的关键部分,通过修改 1内存清零操作,2 sdram ECC 校验 3,网络启动部分 4,vxWorks内存管理。使启动时间控制在1秒内。 这里主要介绍对于vxWorks内存管理的修改。先简要介绍PowerPC MMU  
1 MMU简介  
内存管理是一项由MMU硬件以及VxWorks软件配合完成的工作。 
硬件的MMU特性对于OS中的设计有较大的影响,内核OS算法处理页表及TLB的底层函数受硬件MMU特性的影响很大。 
OS内核软件与处理器MMU硬件的接口、内存管理的软硬件分工,是OS设计中的关键部分。 MMU(硬件):负责使用PTE来转换虚拟地址为物理地址。 
OS内核:建立页表,在PTE中填写正确的数据,设置MMU相关寄存器使之指向页表。  
1.1 TLB模式  
4位段寄存器索引 | 16位页索引 | 12位的字节偏移量 段寄存器 32位有效地址 
24位 VSID | 16位页索引 | 12位的字节偏移量 52位虚拟地址 TLB/页表 
20位物理页号 | 12位的字节偏移量 32位物理地址   
处理器在每次地址转换时都要访问内存中的页表,则系统会产生大量的内存访问。因此,上述问题是通过MMU硬件中的TLB(快表)来实现缓存当前使用的地址转换。 
通过在处理器中的TLB来保存一份在物理内存中的最近被使用过的页表入口项(PTEs),从而缩短对页表搜索的时间。 
TLB由硬件实现,其中的表项的每一项映射一个物理页面。每次MMU进行地址转换操作时,首先检查该TLB所有表项及其控制的相应Cache,如果一份拷贝在TLB中的PTE被找到,则可免除在内存中查找页表(page table)而占用总线。 TLB有两个操作:(1)加载;(2)报废/清除。 
当MMU硬件产生一个TLB失效时,OS内核定位地址转换信息,显式加载一个TLB表项。TLB表项的更新需与页表项的更新同步。TLB并不能自动保持与PTEs的一致性,所以每次软件改变了物理内存中的页表之后,软件必须执行相应的TLB失效操作,以便保持TLB与页表的一致性。页
目录基地址寄存器被写入时,OS清除整个TLB。  
TLB的使用有两个注意的事项: 
(1) 清空TLB是非常耗时的操作,当涉及多个页面的时候,内核OS必须选择清除整个TLB缓存,逐一清除许多表项会带来更多的TLB失效。 
(2) 尽可能减少TLB的竞争使用;过度的竞争TLB会导致TLB刷新频繁,效率大大下降。  
1.2 BAT模式 
BAT模式是另外一种从逻辑地址到物理地址的转译方式,这不同于TLB/哈希表的页面机制。BAT用于映射大于一页的连续物理内存空间,这样的空间可以不受控于通常的虚拟内存管理。BAT寻址模式依靠8个BAT寄存器来实现,这些BAT寄存器实现128K或者更大的虚拟内存块映射到连续的物理内存中。这样的大块连续物理内存空间一般用于保存数据,例如映射到内存中的显示缓冲区或者是巨型数组中的数据。 
BAT模式的缺点是颗粒度太粗,最小的内存块也必须是大于128K。  
2 VxWorks 内存管理  
VxWorks内存模式为flat模式。所有的任务都运行在同一地址空间里。内存管理混合使用BAT模式与页表模式.VxWorks通过两个数据结构来抽象BAT模式与页表模式. 
BAT模式:UINT32 sysBatDesc [2 * (_MMU_NUM_IBAT + _MMU_NUM_DBAT)]为一整形数组 页表模式:PHYS_MEM_DESC sysPhysMemDesc [] 为结构PHYS_MEM_DESC的数组。  
PHYS_MEM_DESC定义如下 
/* physical memory descriptor is used to map virtual memory in sysLib  * and usrConfig. */ 
typedef struct phys_mem_desc { 
void *virtualAddr; void *physicalAddr; UINT len; 
UINT initialStateMask; /* mask parameter to vmStateSet */ UINT initialState; /* state parameter to vmStateSet */ } PHYS_MEM_DESC;  
问题的产生, bsp里主要使用页表影射,页表影射内存与所需页表的大小之间的关系如下: 页表尺寸 = ((内存总数(sdram+pci mem + pci I/O +vme mem + flashrom)/页尺寸(4k))/2)*sizeof(PTEGS)(64) 
1G的影射内存所需页表数为8Mbyte.因此建立页表,在PTE中填写正确的数据所需时间需5~6秒。  
初步解决对策: 
1. 缩小页表,即缩小内存总数 
2. 将页表存为文件,启动时直接读取,跳过建立页表部分 
3. 转换思路,从主要使用页表影射转换为主要使用BAT影射  
我们来看一下上述解决对策是否可行。 1对策 
缩小页表,即缩小内存总数,可以修改的部分包括SDRAM ,PCI MEM,PCI I/O MEM,VME MEM,修改方法在Tornado环境里修改配置参数,修改容易,修改后的效果较好,启动时间只需2 秒。不利的方面,SDRAM缩减为32M,而且时间仍然较长。  2对策 
将页表存为文件,启动时直接读取,跳过建立页表部分。因我们的系统资源是固定的,使用此法可行.但要将页表存为文件,我们又面临多种选择,1重写OS MMU 部分。2改写Vxworks MMU. 2.1重写OS MMU 部分 
难度较大,时间紧迫,而且最关键部分,重写的OS MMU与VxWorks是否能够无缝结合,实践证明能够在另一操作系统下稳定运行的OS MMU与VxWorks结合,并不能稳定运行。原因OS MMU并不能完全与OS Memory,OS I/O无关。OS设计需要一种综合考虑。微内核体系结构也并不能完全解决此问题。结论,此路不通 2.2改写Vxworks MMU 
需要Vxworks kernel 源码,所幸已经得到。但考虑到1G的影射内存所需页表数为8Mbyte,而flashrom读取速度为10M/s .即使修改完毕,仅读取页表所需时间将近1s.所耗甚大,所得甚微。结论,此路不通  3对策 
使用BAT影射,需要修改部分为sysBatDesc [],即BAT影射数组,修改容易。 
但BAT寄存器只有4对,分为指令与数据BAT,因此只有与页表影射相结合。将大块内存使用BAT影射,小块内存使用页表影射.因此将SDRAM,FLASHROM影射改为使用BAT影射。修改效果好。达到了预期效果。 
1
0
 
 

我的同类文章

  • src/hwif和src/drv的区别2014-01-27
  • WINDRIVER.TORNADO.V2.2安装(附图解和序列号)2014-01-20
  • VxWorks下的USB驱动程序原理与分析2012-03-28
  • nftl算法分析2012-01-30
  • 串口扩展调试2011-12-24
  • S3C2440 VXWORKS 移植笔记2014-01-21
  • vxworks phy调试续2012-06-01
  • workbench如何去掉重定义2012-02-10
  • powerpc gpio2011-12-27
  • 一步步讲解如何调试vxworks网卡驱动-适合嵌入式初学者2011-12-19
更多文章

参考知识库

img

操作系统知识库

img

算法与数据结构知识库

猜你在找
话说linux内核-uboot和系统移植第14部分
Windows系统内核-保护模式
从三星官方内核开始移植-uboot与系统移植第17部分
内核的配置和编译原理-uboot和系统移植第15部分
内核的启动过程分析-uboot和系统移植第16部分
JVM学习笔记三------内存管理和垃圾回收
MRC内存管理
jvm基础-内存管理
C解析之八 动态内存管理
Rx86OS-X 内存管理·简
查看评论

  暂无评论

发表评论
  • 用 户 名:
  • yz2010
  • 评论内容:
  • 插入代码
      
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStackVPN Spark ERP IE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQueryBI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS UnitySplashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStackFTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide MaemoCompuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure SolrAngular Cloud Foundry Redis Scala Django Bootstrap
    个人资料
     
    qingfengtsing
     
    1
    • 访问:426411次
    • 积分:5552
    • 等级: 
    • 排名:第3998名
    • 原创:109篇
    • 转载:210篇
    • 译文:1篇
    • 评论:34条
    文章分类
  • vxworks 2011总结(43)
  • Linux总结(32)
  • windows常识(5)
  • 常用芯片积累(3)
  • 行业常识(14)
  • 行业英文翻译(1)
  • fpga(13)
  • lwip+ucos(4)
  • windml(7)
  • vxworks任务异常调试(8)
  • vxworks 2月总结(4)
  • u-boot 2月调试总结(3)
  • linux shell(3)
  • u-boot 3月资料收集(4)
  • vxworks 4月(1)
  • linux驱动(16)
  • S3C44B0(3)
  • vxworks理解(5)
  • p2020(14)
  • BCM SDK(13)
  • 杂谈(2)
  • 读书笔记(4)
  • powerpc(4)
  • 待验证问题(3)
  • 工作调试(12)
  • 理财学习(3)
  • 编译原理(1)
  • PCI/PCI-E(7)
  • Linux MTD(21)
  • 面试题目(2)
  • Linux MMU(5)
  • flash transfer layer(2)
  • WLAN知识(4)
  • Ethernet 协议学习(4)
  • qt学习(8)
  • openWrt(11)
  • omapL138(0)
  • Linux 面向对象思想(2)
  • linux spi架构分析(3)
  • java开发(1)
  • emmc(1)
  • ROS(6)
  • ubuntu(2)
  • 多媒体(16)
  • webrtc(1)
  • android(1)
  • 视频网址(1)
    文章存档
  • 2017年03月(2)
  • 2017年02月(12)
  • 2016年11月(1)
  • 2016年10月(5)
  • 2016年09月(4)
    展开
    阅读排行
  • OpenWrt 系列教程汇总(18504)
  • 防止FPGA设计中综合后的信号被优化(11800)
  • makefile中的shell语法(11587)
  • quartus中的signaltapⅡ 的问题(8320)
  • 一步步教你用VMware玩OpenWRT(7556)
  • 交换机各种接口(6821)
  • raw socket使用(6552)
  • 在ubuntu下安装博通无线网卡(6408)
  • amp和smp体系(5229)
  • VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别(4913)
    评论排行
  • ubuntu加载cp210x驱动(5)
  • BCM ESW芯片和Marvell CAT芯片的比较(3)
  • 移植T264到RT5350对usb camera进行h264编码(2)
  • android studio cmake调用ffmpeg库(2)
  • vxworks5.5 usb鼠标识别(2)
  • OpenWrt sdk编译问题(2)
  • munmap_chunk(): invalid pointer(2)
  • nftl算法分析(2)
  • vxworks异常分析方法(2)
  • 安装wind river on-chip debug工具(1)
    推荐文章
    • * CSDN日报20170402 ——《我希望进入大学时就能知道的一些事儿》
    • * 最全面总结 Android WebView与 JS 的交互方式
    • * 蓝牙DA14580开发:固件格式、二次引导和烧写
    • * 你不知道的 Android WebView 使用漏洞
    最新评论
  • Android使用MediaRecorder和Camera实现视频录制及播放功能整理

    少年天蝎: 难道播放的时候,没有发现视频是横屏的吗?在电脑上面,以及一些手机播放器上面,还有iOS上面

  • android studio cmake调用ffmpeg库

    qingfengtsing: @u011018121:你应该是用到了libjpeg.so库了吧?

  • android studio cmake调用ffmpeg库

    u011018121: 博主你好,我在写jpeg的时候出现了Error:error: 'jniLibs/armeabi/li...

  • ubuntu加载cp210x驱动

    wyx_123456: 你好,我编译的时候总会报错,请问这种错误怎么解决?cp210x.c:200: error: unkn...

  • ubuntu加载cp210x驱动

    qingfengtsing: @handsome_for_kill:在主机上交叉编译

  • ubuntu加载cp210x驱动

    西涯先生: @qq_26848541:请问你解决这个问题了吗?我在TX1上编译会报错

  • ubuntu加载cp210x驱动

    西涯先生: 博主,这个cp210x.ko是在tegra下编译的吗,还是在主机上交叉编译的呢?

  • 手机摄像头技术

    LimingyueLi: mark

  • ubuntu加载cp210x驱动

    池澄: 请问怎么编译生成cp210x.ko

  • p2020ds serdes接口和OCeaN介绍

    Kevin_Smart: 学习了

0 0