当前位置: 首页 > 编程日记 > 正文

基于r-Kernel的LiteOS操作系统

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

相关文章:

Linux网络编程中的几组类似功能的区别

1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockaddr_in addr memset(&addr, 0, sizeof(addr)); bzero(buff, sizeof(buff)); 参考《UNIX网络编程 卷1:套接字联网API 第3版》1.2的解释&#xff1a…

5个案例让Python输出漂亮的表格!

来源 | Python数据之道前言最近在用python写一个小工具,这个工具主要就是用来管理各种资源的信息,比如阿里云的ECS等信息,因为我工作的电脑使用的是LINUX,所以就想着用 Python写一个命令行的管理工具,基本的功能就是同…

VS2010正式版MSDN下载

之前写了一篇关于微软VS2010发布会的介绍,现在VS2010的正式版也叫RTM版本终于在MSDN开始提高下载了,暂时性的还只有英文版本,不过等等马上应该会有中文的了。 VS2010 RTM下载地址 Microsoft Visual Studio 2010 Premium - ISOMicrosoft Visua…

windows 2012 nps配置

Windows2012 Nps配置windows 2012 nps配置1.安装windows nps角色,安装网络策略服务器及主机凭据授权协议。2.域中注册服务器3.配置网络策略4.按所需添加条件5.运行-mmc-添加 -证书管理单元添加个人证书—申请新证书6.选择ad注册策略即可7.选择radius身份验证—注册8…

使用man在线手册页

#man -k 函数 #man 返回的数字 函数 # man -k file | grep umask要查看linux下的函数umask 可以使用man,例如 # man 2 umask 如果不知道man后的节号,可以使用-k先查找 # man -k umask 如果使用-k返回太多内容,可以使用g…

Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...

作者 | Huang supreme编辑 | 郭芮出品 | CSDN博客图源 | 视觉中国随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大。因此了解当下企业究竟需要招聘什么样的人才&#xff…

论爱的精进与痴迷

文:洪启嵩 汝爱我心,我怜汝色。以是因缘,经百千劫,常在缠缚。──《楞严经》 爱情为什么是轮回的根由,《楞严经》里有一段话说得很清楚:「汝爱我心,我怜汝色。 以是因缘,经百千劫&am…

[原] Jenkins Android 自动打包配置

一、Jenkins自动打包配置 目标:1. 自动打包;2. 自动上传;3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。 减少重复劳动,减少人工成本。 持续、自动地构建/测试软件项目…

盛大文学难逃“垄断”嫌疑,完美文学虎口夺食

观点:盛大文学已难逃“垄断”嫌疑;完美文学强攻文学阵地,与盛大文学发生正面冲突已成定局。盛大文学频频出手,在3个多月的时间里,先后收购榕树下、小说阅读网、言情小说吧和潇湘书院4家网站,加上此前拥有的…

GitHub接连封杀开源项目惹众怒,CEO亲自道歉

作者 | 唐小引图源 | 东方 IC来源 | CSDN(ID:CSDNnews)王坚博士曾经做过这样一个非常形象的比喻,他将做 App 比作是在别人的花园里弄盆栽,「种点花草是没有问题的」,不过「别人叫你的产品下架你就得下架&am…

Phabricator是什么,代码审查工具

Phabricator是什么? Phabricator支持两种代码审查工作流:“review”(提交前审查)和 “audit”(提交后审查)。 Phabricator是Facebook保驾护航的11大IT技术之一。在Phabricator的网站中,开发者给…

结构体中定义函数指针

结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一:struct结构体标识符…

对卫星网络及内容的安全防护措施

对卫星网络及内容的安全防护措施 网络安全是多领域的综合业务,近10年来在规模和范围方面都获得了极大的发展。对网络及内容潜在的威胁来自各类不同的领域,因此增加了解决这一问题的难度。 在因特网产生之前,对卫星网络及内容实时***的安全防护…

对标Pytorch,清华团队推出自研AI框架“计图”

「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈,反映其对于行业的思考、未来趋势的判断、技术的实践,以及成长的经历。2020年,CSDN将对1000人物进行系列访谈&#xff0…

echo使用说明,参数详解

简介    echo [OPTION]... [STRING]... 描述    -n 末尾不加换行   -e 开启输出字串中对反斜杠的转译   -E 禁用反斜杠转译   只有开启-e参数的时候,下面的命令才能起作用:   \0NNN 输出NNN(一个八进制数)在ASCII码表中对应的字符,     …

ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020

作者 | VincentLee来源 | 晓飞的算法工程笔记论文地址:https://arxiv.org/abs/1912.02424代码地址:https://github.com/sfzhang15/ATSS在仔细比对了anchor-based和anchor-free目标检测方法后,结合实验结果,论文认为两者的性能差异…

GCC编译选项--创建与使用库

系统函数库使用 linux系统函数库位于/usr/lib和/lib目录下 #include <math.h> #cc test.c -lm -o test 动态库创建 1).编译时指定-fPIC 通知gcc产生可以重定位的与位置无关的目标代码 2).链接时指定-shared 使gcc编译器生成动态链接库 动态库使用 通过设置环境…

不错的×××实验

(virtual private network 虚拟专网)&#xff0c;利用公用网络&#xff0c;按照相同的策略和规则&#xff0c;建立内部私有连接。 广泛的讲&#xff0c;***体系结构分为&#xff1a;站点到站点的***和远程访问*** 站点到站点的***&#xff1a;在这种情况下&#xff0c;同一个机…

达观数据于敬:个性化推荐系统实践

达观数据于敬&#xff1a;个性化推荐系统实践 在DT(data technology)时代&#xff0c;网上购物、观看视频、聆听音乐、阅读新闻等各个领域无不充斥着各种推荐&#xff0c;个性化推荐已经完全融入人们的日常生活当中。个性化推荐根据用户的历史行为数据进行深层兴趣点挖掘&#…

C语言Free时报错HEAP CORRUPTION DETECTED

char *k1; k1 (char *) malloc(4*sizeof(char)); v1 (char *) malloc(4*sizeof(char)); strcpy(k1,"abcd"); free(k1); 在linux下不会报错&#xff0c;但是在VC环境会报错&#xff1a;HEAP CORRUPTION DETECTED 出现这个错误的原因一般都是操作new申请的内存溢…

DivCSS网页布局中CSS无效的十个常见原因

在学习DivCSS网页布局的知识&#xff0c;可是W3C validation有时难以操作&#xff0c;但用它你可以查看由版面设计引起的差错。验证程序抛出大量差错和警告&#xff0c;说明你的XHTML尚未完善&#xff0c;可能无法在不同浏览器上保持一致功能。下面十个细微的失效问题难住了大批…

如何创建计算机视觉场景训练数据

作者 | 刘明宽 数据科学部门负责人&#xff0c;澳鹏&#xff08;Appen&#xff09;美国 曾任eBay首席研究科学家&#xff08;数据科学总监&#xff09;对于一些精度要求不太高&#xff0c;或者不太复杂的计算机视觉应用场景&#xff0c;利用一些现有的开源数据集如ImageNet/Coc…

express中的bin/www文件详解

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env node 表明是node执行文件,在做repl工具时候的会用的 "#!"是标识符/usr/bin是环境变量的绝对路径/env 如果是直接#!/usr/bin node ,则执行这个文件的时候,会从/usr/bin中找node命令,如果没有,则…

深度分析typedef--定义自己的数据类型

最近在看redis源码的时候看到Ae.h的时候看到如下源码: /* Types and data structures */ typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *client…

Go对Python产生的冲击

作者 | yuliao来源 | 懒编程&#xff08;ID: hackpython&#xff09;Go 的流行让以 Python 为主流语言的开发者&#xff08;比如我&#xff09;产生了一定的危机感。上一次有这种危机感还是做 Android 开发的时候&#xff0c;当时用 Java 做 Android 开发&#xff0c;Google 强…

更新ADT到Android L的方法

android ADT无法更新到20&#xff1f; 哈哈&#xff0c;有办法&#xff0c;windows 进入host 写入例如以下所有&#xff0c;是的所有。然后在到sdk manager中方可更新 #Google Services START #Googleapis↓ 61.19.1.54 mt0.googleapis.com 61.19.1.54 mt1.googleapis.com 61…

php.ini安全配置详细解释

PHP本身再老版本有一些问题&#xff0c;比如在 php4.3.10和php5.0.3以前有一些比较严重的bug&#xff0c;所以推荐使用新版。另外&#xff0c;目前闹的轰轰烈烈的SQL   Injection也是在PHP上有很多利用方式&#xff0c;所以要保证  安全&#xff0c;PHP代码编写是一方面&am…

5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?

作者 | 马超来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;3月19日&#xff0c;默安科技CTO魏兴国发微博称&#xff0c;微博数据泄露了不少用户的手机号&#xff0c;当中涉及不少微博认证的明星和企业家。亦有网友在他的微博评论区表示&#xff1a;“有超过5.38亿…

GDB使用总结

经典编译参数&#xff1a; # cc -g -o xx xx.c 或者 # cc xx.c -g -o xx 如果调试不是进程总的程序 可以直接 #gdb 程序名即可 # i 打印行号 #break 行号 #r 重新开始调试 利用set args 命令就可以修改发送给程序的参数&#xff0c;而使用show args 命令…

Spring概述

Spring 是什么Spring是一个开源的轻量级Java SE&#xff08;Java 标准版本号&#xff09;/Java EE&#xff08;Java 企业版本号&#xff09;开发应用框架&#xff0c;其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中&#xf…