基于r-Kernel的LiteOS操作系统
来源:互联网 发布:淘宝上口碑好的家具店 编辑:程序博客网 时间:2024/06/06 08:57
LiteOS是应用于资源受限的传感网络的一种基于线程的类UNIX操作系统。也就是说它跑在存储空间和RAM有限的超低电压微控制器上,这也是吸引我关注它的原因(在超低电压下系统更易出错)。它采用r-kernel内核,r-kernel有三个特征:
1)为线程创建checkpoint,可以在出错时进行rollback。下面是用r-kernel给出的API写出的示例程序:
checkpointIndex = createCheckPoint();printf("Point A,");rollbackCheckpoint(checkpointIndex);printf("Point B,");
程序会一直输出Point A。它将断点存在了Flash中,这是因为RAM是嵌入式设备上最受限的资源。这个特征用来解决那些可以通过重新执行来消除的错误,如竞态条件和死锁。但对于确定的错误,要通过下面这个特征来解决。
2)让一些系统调用拥有影子。考虑下面的程序:
char *buffer = malloc(100);/*some more code here*/buffer[100] = 1;
显然存在Dynamic memory overrun,一旦buffer[100]的内存地址分配给了另一个线程,就会出现错误。其实malloc是通过系统调用来与内核打交道的,如果我们能将这些系统调用的实现进行修改,如malloc是连续分配内存块,但我们将之修改为每两个内存块之间增添固定大小的空间,这样便在一定程度上解决上述问题(这要取决于增加空间的大小)。这就是所谓的影子(system call shadowing)。
3)watchdog是最后的防线。如内核陷入死锁,不能定期地进行喂狗,watchdog便会进行reboot。但为了防止一次又一次因为同一个bug重启的尴尬,一种叫past-run race reconstruction的方法用来判断是哪一个线程造成了重启,这样下一次它就被禁止执行。为此我们需要将重启前的状态记录下来(存在EEPROM或on-board Flash),之后内核会通过这些信息找出重启前最后一个在运行的用户线程,它一般就为错误线程,暂时丢弃它。
注:翻译来源 IEEE INFOCOM 2011论文
Qing Cao, Xiaorui Wang, Hairong Qi and Tian He, r-Kernel: An Operating System Foundation for Highly Reliable Networked Embedded Systems
- 基于r-Kernel的LiteOS操作系统
- LiteOS Kernel启动流程
- 操作系统LiteOS基础了解
- 揭开LiteOS的神秘面纱
- 基于语言的操作系统
- 基于SOA的操作系统
- 基于汇编的操作系统
- 基于R语言的神经网络
- 基于R的高级数据管理
- 基于Android平台的kernel module编程
- 基于kernel的KNN 分类算法
- 基于Java的操作系统发展史!
- 基于操作系统的简单应用
- 基于操作系统的简单应用
- 基于开源的操作系统
- 基于开源的操作系统
- 基于项目的操作系统学习
- 基于STM8的小型操作系统
- hdoj 1254 推箱子(BFS + BFS)
- Troubleshooting Timeout errors in Reporting Services
- 正则大全
- PHP 仿百度文库,实现Word文档在线预览功能
- Android中使用ALSA声卡
- 基于r-Kernel的LiteOS操作系统
- IOS应用之间调用
- 餐饮首富的成功创业之路
- MongoDB学习之旅三十:Replica Sets + Sharding
- UML中的依赖
- 【linux驱动分析】之dm9000驱动分析(一):dm9000原理及硬件分析
- Sort List
- embed遮挡div层,无法显示
- ------------------Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解