vxWorks启动时间
qingfengtsing的专栏
目录视图
摘要视图
订阅
vxWorks内存管理
![](http://static.blog.csdn.net/images/category_icon.jpg)
![](http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg)
对于有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
- 上一篇S3C2440 VXWORKS 移植笔记
- 下一篇关于S3C44B0中断的具体的启动代码解释
我的同类文章
- •src/hwif和src/drv的区别2014-01-27阅读722
- •WINDRIVER.TORNADO.V2.2安装(附图解和序列号)2014-01-20阅读4228
- •VxWorks下的USB驱动程序原理与分析2012-03-28阅读2285
- •nftl算法分析2012-01-30阅读4196
- •串口扩展调试2011-12-24阅读771
- •S3C2440 VXWORKS 移植笔记2014-01-21阅读1335
- •vxworks phy调试续2012-06-01阅读816
- •workbench如何去掉重定义2012-02-10阅读1623
- •powerpc gpio2011-12-27阅读887
- •一步步讲解如何调试vxworks网卡驱动-适合嵌入式初学者2011-12-19阅读3815
更多文章
参考知识库
-
-
操作系统知识库
5618关注|2210收录
-
-
算法与数据结构知识库
15157关注|2320收录
- 猜你在找
- 话说linux内核-uboot和系统移植第14部分
- Windows系统内核-保护模式
- 从三星官方内核开始移植-uboot与系统移植第17部分
- 内核的配置和编译原理-uboot和系统移植第15部分
- 内核的启动过程分析-uboot和系统移植第16部分
- JVM学习笔记三------内存管理和垃圾回收
- MRC内存管理
- jvm基础-内存管理
- C解析之八 动态内存管理
- Rx86OS-X 内存管理·简
暂无评论
- 用 户 名:
- yz2010
- 评论内容:
核心技术类目
- 个人资料
qingfengtsing- 访问: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: 学习了
- 公司简介|招贤纳士|广告服务|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
- 网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏知之为计算机有限公司|江苏乐知网络技术有限公司
-
京 ICP 证 09002463 号|Copyright © 1999-2016, CSDN.NET, All Rights Reserved
vxWorks启动时间相关推荐
- PowerPC VxWorks BSP分析7——image压缩
1 映像压缩 在嵌入式系统中,我们通常会要求VxWorks文件尽量小,比如通过串口.软盘或tffs加载VxWorks的时候,如果文件太大,可能无法存储,或加载失败.下面介绍一种利用Tornado和Vx ...
- linux 下得到进程的启动时间
linux 下得到进程的启动时间! 运行方式:./pstart 进程号 " 如: ./pstart 1 #!/bin/bash pid=$1 if [ "$pid" == ...
- struts启动时加载_iOS优化篇之App启动时间优化
原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...
- linux启动时间极限优化,Linux启动时间的极限优化
在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...
- linux更改程序启动时间,分享|如何改善应用程序在 Linux 中的启动时间
大多数 Linux 发行版在默认配置下已经足够快了.但是,我们仍然可以借助一些额外的应用程序和方法让它们启动更快一点.其中一个可用的这种应用程序就是 Preload.它监视用户使用频率比较高的应用程序 ...
- 写了一个将VxWorks的shell打印输出到指定内存中的接口,可广泛用于CLI下的调试函数显示以及故障自动捕获等功能,稍作修改可以适合其它嵌入式OS...
本代码在Tornado2.0的Simu下调试通过,原理上与CPU架构无关,应该都适用. 如果引用的话,请告诉我,或者评论一句[页面最下方],不要一声不吭 /* usrAppInit.c - stub ...
- 嵌入式VxWorks系统开发与应用
免费下载地址: http://www.vxworks.club 本书详细介绍了当今流行的嵌入式操作系统VxWorks,首先概括VxWorks操作系统的基本知识,如任务管理.任务间通信机制.内存管理以及 ...
- Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点
Vxworks.QNX.Xenomai.Intime.Sylixos.Ucos等实时操作系统的性能特点 VxWorks操作系统 VxWorks 操作系统是美国WindRiver公司于1983年设计开发 ...
- linux程序移植到vxworks,VxWorks入门(一):VxWorks Vs Linux
1, VxWorks的特点: 幻灯片 4 .O {font-size:149%;} ■ All functions exist in the same "space". ► Nam ...
最新文章
- 使用Cacti监测系统与网络性能(3)
- 使用stsadm命令部署和激活webpart解决方案
- 尚硅谷SpringCloud(H版alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。
- 互联网1分钟 | 0321 小米上线“朕惊视频”;依图医疗与华为联合发布智能医疗云...
- 理解C++中拷贝构造函数
- putty xshell远程连接Linux及密钥认证
- SQL Server脏读方式数据提取---NOLOCK和READPAST
- 局域网内两台9303 的管理vlan mac地址冲突解决方法
- 关于java中判断字符串相等==和equal 详解
- QByteArray使用方法举例
- 浅谈前端响应式设计(二)
- 分区桌面 壁纸(正在做,常用,之后在做,临时存)
- 【C语言练习】分离英语句子中的单词并统计每个单词出现次数后排序输出
- NCConverter for mac(NCM音乐格式文件转换器)
- 【游戏】——微信打飞机
- java余弦距离_使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算...
- 什么是次世代游戏建模?角色和场景建模,哪个比较容易
- kubernetes Pod 污点与容忍
- 华为 GaussDB 数据库十问
- 怎样用两部手机同时登陆一个QQ(两部手机同时在线)
热门文章
- python随手记自动记账_随手记的5个常用功能,让你记账省心,高效,又安全
- 计算机会计技术特点,会计电算化系统的特点
- Android博通BCM libbt-vendor.so 分析蓝牙初始化流程
- html根据地点名称查坐标,根据地址查询经纬度Js
- java 判断是否是罗马_如何只使用正则表达式匹配有效的罗马数字?
- (三)CSS前端开发面试会问到的问题有哪些?
- 电脑卡顿反应慢解决办法
- Xcode 真机调试失败:Errors were encountered while preparing your device for development
- 4万字【Python高级编程】保姆式教学,330页PDF10万字的知识点总结
- 嘴上老喊辞职的人总也不走,如何看待这种现象?