Contiki内核原理

一.数据结构

Contiki既利用了事件驱动系统节省内存和高效使用CPU的优势,又实现了多进程系统的阻塞机制从而带来开发便利性。自然,Contiki内核最重要的2个数据结构是:进程链表和事件循环数组,分别如图1和图2所示。

图1  Contiki系统进程链表

图2  Contiki系统事件循环数组

二.主循环

从图3可以看出,Contiki系统运行在一个无限循环之中,通过查询POLL或EVENT标识调用对应进程的主体函数,充分体现了它建立在事件驱动的基础上。

图3  Contiki系统主循环流程

三.内核调度

1.      定时器事件的实现

如图4所示,当定时器中断发生时,ISR程序向etimer_process设置needspoll标识,主循环调用do_poll()时会进入etimer_process的主体函数,该主体函数给process_i发送异步事件后退出,主循环调用do_event()时进入process_i的主体函数并传递TIMER事件,这里process_i可以处理定时器到期的事件了。

图4定时器中断,etimer进程和应用进程调度时序图

2.      中断服务程序通知进程

在Contiki系统中,ISR通知进程的方式是设置needspoll标识,不能够发送异步或者同步事件,它的解释如图5所示。

图5中断服务程序利用poll通知进程

3.      进程响应不同事件

一个进程经典的逻辑是:响应外部传入的不同事件而执行对应的动作,Contiki系统的进程也不例外,它的时序图如图6所示,经典的编程模式如图7所示的代码清单。

图6进程响应不同消息的时序图

图7进程通过判断事件类型来执行不同的逻辑流程

4.      数据共享

基于OS的系统最需要慎重考虑的是数据共享(竞态)问题,它很容易产生(一个全局变量或者一个共享硬件),但隐蔽性很强(一般无法通过源码测试发现,同时难以复现),解决竞态的问题最好是从设计层面避免。

如图8所示,Contiki系统的进程是基于事件驱动顺序执行,仅可能被ISR中断,因此竞态错误只可能发生在ISR与进程的共享数据之上。

图8  Contiki系统顺序执行流

免费快速下载链接: http://www.rimelink.com/nd.jsp?id=31&_np=105_315

Contiki内核原理相关推荐

  1. 2021年大数据Spark(二十二):内核原理

    目录 Spark内核原理 RDD 依赖 窄依赖(Narrow Dependency) ​​​​​​​Shuffle 依赖(宽依赖 Wide Dependency) ​​​​​​​如何区分宽窄依赖 ​​ ...

  2. 读书笔记之《Windows内核原理与实现》

    最近学习<Windows内核原理与实现>发现其博大精深,粗略过了一遍,很多东西比较茫然,看书之余把书中涉及的函数,结构,全局变量的所在页数总结出来,便于以后查阅. 由于半自动半手工,难免有 ...

  3. Windows内核原理-同步IO与异步IO

    目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...

  4. Spark PersistenceEngine持久化引擎与领导选举代理机制内核原理深入剖析-Spark商业环境实战...

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  5. SparkSQL 之 Shuffle Join 内核原理及应用深度剖析-Spark商业源码实战

    本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.版权声明:禁止转载,欢迎学习.QQ邮箱 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2018-2019-1 20189213《Linux内核原理与分析》第四周作业

    <Linux内核原理与分析>第四周学习总结: 1.课本知识总结: 本章内容并不多,首先是介绍了一些Linux内核源代码的目录结构,并基于Linux内核源代码构造一个简单的操作系统MenuO ...

  8. 实验楼 linux内核原理与分析,《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  9. 《Linux内核原理与设计》第十一周作业 ShellShock攻击实验

    <Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组: 和20179215袁琳完成实验及博客攥写 实验内容:   Bash中发现了一个严重漏洞shellshock, ...

最新文章

  1. 无论你在学什么语言,都能有小姐姐来陪着你一起学习!
  2. ssrs报表服务器数据库配置文件,创建报表服务器数据库(SSRS 配置管理器)
  3. 3亿Docker容器部署的挑战及应对方案
  4. asp.net core 使用 signalR(一)
  5. JavaScript高级之ECMASript 7、8 、9 、10 新特性
  6. 杨氏模量_用作癌症放疗定位膜的交联聚己内酯的结晶度与杨氏模量之间的关系研究|Global Challenges...
  7. PHPCMS整合UCENTER后登陆问题
  8. 【企业级框架整合】Springmvc+mybatis+restful+bootstrap框架整合
  9. 关于伺服驱动控制的课本_伺服电机的PLC控制详解
  10. 计算机电源烧保险,ATX电脑电源保险换了就烧怎么维修?
  11. Windows10系统把JDK安装到D盘上的步骤及安装
  12. 也说“不战而屈人之兵”
  13. 高通平台做GSI测试时,开机重启失败问题
  14. excel取消保存微软_如何使用Microsoft的“ Excel中的资金”功能管理您的个人财务...
  15. 2022版u-boot启动分析笔记之一(start.S与lowlevel_init.S)
  16. Docker镜像的原理
  17. vue加elementui开发的分页显示
  18. Unity3D网络游戏实战——实践出真知:大乱斗游戏
  19. 传感器--电阻应变片传感器
  20. 计算机表白那个视频教程,表白软件制作_表白软件制作教程_表白软件制作视频教程 _课课家...

热门文章

  1. 计算机学院十四五工作规划,计算机学院举行教学指导委员会成立暨十四五规划修订会议...
  2. 指向vector的指针
  3. NO.1——VulnHub-GoldenEye-1-Walkthrough
  4. “Google chrome”,安卓和苹果版本,以及他的版本历史真是绚丽啊!
  5. JavaWeb基础核心技术-佟刚-专题视频课程
  6. 线性回归模型的度量参数1- SST SSR SSE R-Squared
  7. 由LG 的G2手机浅析国产旗舰机的方向
  8. 2018年如何挣钱 ?
  9. 使用PHP将任意格式的日期转换为Unix时间戳
  10. Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类