Chinaunix首页 | 论坛 | 博客
  • 博客访问: 449942
  • 博文数量: 73
  • 博客积分: 3593
  • 博客等级: 中校
  • 技术积分: 912
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 11:32
文章分类

全部博文(73)

文章存档

2013年(2)

2012年(20)

2011年(25)

2010年(12)

2009年(14)

分类: 嵌入式

2011-02-24 12:03:59



内存改写问题一直是软件开发中最难搞的问题之一。
在有虚拟地址空间管理的OS中,比如linux、windows等,应用程序出现内存改写最坏的情况是应用程序蹦掉而已,不会对系统造成很大危害。
但是在没有虚拟地址空间管理的RTOS中,如果应用程序修改了系统核心内存整个系统就嗝屁了。
如果软件工程真的有银弹,我首先要拿来对付内存改写问题。

出现内存改写常见的原因有数据越界、野指针、不同类型指针之间的强制转换等。

系统数据结构可能需要一些方法检测自己是否被修改了。
比如经常看到结构体里面会有一些较magic的成员,就是干这事的;
再比如在系统的双向链表中检查链表是否完成等。

内存修改导致的结果通过时乱死、不一定死在哪些线程,有时候不知道从哪里查起,只能从内存数据分析中寻找一些线索了。

终究原因是有些RTOS的地址映射是直接使用TLB固定映射,没有启用页表管理。在速度方面固定TLB效率上会比页表映射高一些,但问题多的去了。
系统程序和应用程序共享同一个地址空间,使得应用程序可以访问到系统程序的数据。
模块化或许是减少内存改写问题的银弹之一,但是系统模块化至少还要等上一年半。在这之前不得不面对频繁的内存改写问题。
不知道H公司的VRP系统这样解决这样的问题,听闻也很难搞。

阅读(2336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~