uC/OS-II源码分析(三)

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

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) 任务间通信:消息邮箱,消息队列,中断,


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/11/22/969130.html,如需转载请自行联系原作者
目录
相关文章
|
算法 架构师 Java
【计算机专业】岗位方向细分与发展提升建议
【计算机专业】岗位方向细分与发展提升建议
|
编译器 C语言 C++
C++(类与对象)详解 - 1(上)
C++(类与对象)详解 - 1
106 0
|
3月前
|
canal 数据可视化 关系型数据库
2025年5大国产ETL工具横向评测
在企业数据管理中,ETL工具成为整合分散数据的关键。本文介绍了五款主流国产ETL工具:FineDataLink(低代码、功能全面)、Kettle(开源易用)、DataX(高速同步)、Canal(MySQL实时增量处理)和StreamSets(可视化强),帮助用户根据需求选择最合适的工具,提升数据效率与业务价值。
|
Linux 虚拟化 iOS开发
Linux系统——远程连接Linux系统(图形化、命令行、使用命令行学习Linux系统、FinalShell)
Linux系统——远程连接Linux系统(图形化、命令行、使用命令行学习Linux系统、FinalShell)
479 3
|
7月前
|
Ubuntu Linux Docker
如何在Ubuntu 20.04系统中安装Docker
安装 Docker 引擎的步骤如下:首先更新系统包索引 (`sudo apt update`),安装必要依赖包 (`apt-transport-https` 等),添加 Docker 官方 GPG 密钥及 APT 仓库。接着再次更新包索引并安装 Docker 引擎及相关工具 (`docker-ce` 等)。最后启动 Docker 服务并设置开机自启,通过 `docker --version` 和运行测试容器 (`sudo docker run hello-world`) 验证安装是否成功。
2126 0
|
Linux Android开发 iOS开发
使用Kivy创建“Hello World”应用并打包成APK
使用Kivy创建“Hello World”应用并打包成APK
|
11月前
|
安全 Linux 网络安全
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-1):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
数据安全/隐私保护
JumpServer的权限管理
文章介绍了JumpServer的权限管理操作,包括如何创建授权规则和验证授权是否成功。
362 2
|
Oracle Java 关系型数据库
2022 年超详细过程步骤讲解 CentOS 7 安装jdk1.8
这篇文章提供了在CentOS 7系统上安装JDK 1.8的详细步骤,包括卸载系统自带的JDK、下载Oracle官网的JDK安装包、上传至虚拟机、解压安装包、配置环境变量,并验证安装是否成功。
2022 年超详细过程步骤讲解 CentOS 7 安装jdk1.8
|
移动开发 搜索推荐 前端开发
html标签大全
第一章 自结束标签 像<p> </p> <title> </title> <h1> </h1> 这类标签是需要有结束标签的 而 自结束标签(自己结束自己)是不需要结束标签的 如:<img> <input> 还可以写成 <img /> <input />