首先来了解下实时系统的基本概念:

1) 临界区,共享资源,任务(类似于进程),任务切换,任务调度,可剥夺型内核,可重入函数,动态优先级调度,

2) 如何处理优先级反转问题。这个问题描述如下:有三个任务,优先级1高于2,2高于3,一开始1和2处于挂起,3在运行,3要使用某个共享资源,就P它的互斥信号量,3得到信号量后开始使用这个共享资源。过一段时间后,1等待的事件发生后剥夺了3的CPU使用权,于是1开始运行。运行时,1也要用3占到的那个资源,所以1只好进入挂起状态,等待3释放这个资源。于是这时3准备继续运行,但这时2等待的事件也发生了,所以2抢占了3的CPU使用权,等2运行完后把CPU还给3,3继续运行,直到释放资源的信号量。这时1才能得以运行。这个过程中,1的优先级实际上降到了3的水平。

处理的方法描述如下:在1第一次抢占3的CPU时,1去申请资源信号量,但内核知道这个信号量被3占了,而3的优先级比1低,于是内核把3的优先级升至与1相同。内核将1放入等待资源信号量的任务列表,然后回到3继续运行。等3完成后释放资源信号量,这时内核恢复任务3本来的优先级,并查看等待该资源信号量的任务列表里有谁在等待这个信号量,这时有1,所以把信号量交给1,于是1得以运行。等1运行完后,2才能开始运行。但uC/OS-II不支持优先级继承,这个功能是可以使内核自动变换任务的优先级。

3) 处理互斥:开关中断(uC/OS-II中用OS_ENTER_CRITICAL和OS_EXTI_CRITICAL来实现),测试并置位,禁止/运行任务切换,互斥信号量,计数型信号量,

4) 同步:信号量,事件标志(任务与多个事件同步,若任务需要与任何事件之一发生同步,叫独立型同步,若任务与若干事件都发生同步,叫关联型同步)。

5) 任务间通信:消息邮箱,消息队列,中断,

作者:洞庭散人

出处:http://phinecos.cnblogs.com/    

本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。

最新文章

  1. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
  2. ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
  3. 在 IIS 6 和 IIS 7中配置Https,设置WCF同时支持HTTP和HTPPS,以及使用HttpWebRequest和HttpClient调用HttpS
  4. linux 使用 nvidia 的 gpu
  5. DECLARE_GLOBAL_DATA_PTR宏定义问题
  6. c++ vector 简单实现。
  7. iOS开发之都兴忱小结
  8. 明天参加GDG devfest
  9. MVC验证07-自定义Model级别验证
  10. 基于ELK的数据分析实践——满满的干货送给你
  11. 新版MATERIAL DESIGN 官方动效指南(三)
  12. Spring 1 控制反转、依赖注入
  13. 软工+C(10): 团队项目[NABCD] - 对话式编辑
  14. linux下中文乱码问题解决
  15. [算法]Collebarative Filtering
  16. Win10系列:VC++调用自定义组件3
  17. FutureTask源码解析
  18. Python-WSGI协议,mini-web框架
  19. react组件更新swiper
  20. [转帖]HR职能划分三支柱模型

热门文章

  1. Chrome自带恐龙小游戏的源码研究(三)
  2. spring + jodd 实现文件上传
  3. 【LeetCode从零单排】No.135Candy(双向动态规划)
  4. vue 流程设计器
  5. eclipse tomcat maven
  6. Unity3D研究院之Inspector视图中的get/set使用
  7. python 基础 3.1 打开文件 a a+ r+ w+ 详解
  8. tp框架知识 之(链接数据库和操作数据内容)
  9. WEB服务器、应用程序服务器、HTTP服务器区别【转】
  10. springcloud与docker微服务架构实战--笔记