第三章信号灯.doc

上传人:re****.1 文档编号:562057549 上传时间:2023-10-17 格式:DOC 页数:7 大小:955.50KB
返回 下载 相关 举报
第三章信号灯.doc_第1页
第1页 / 共7页
第三章信号灯.doc_第2页
第2页 / 共7页
第三章信号灯.doc_第3页
第3页 / 共7页
第三章信号灯.doc_第4页
第4页 / 共7页
第三章信号灯.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《第三章信号灯.doc》由会员分享,可在线阅读,更多相关《第三章信号灯.doc(7页珍藏版)》请在金锄头文库上搜索。

1、第二篇 实时操作系统第三章 信号灯3.1 引言本章讨论的主要内容如下: 定义一个信号灯; 典型的信号灯操作; 通常的信号灯使用。3.2 定义信号灯一个信号灯(semaphore)是一个内核对象,一个或多个运行的线程可以获取或释放它,从而达到同步或相互排斥的目的。当一个信号灯被首次建立时,内核分配给它一个相关的信号灯控制块SCB(Semaphore Control Block)、一个惟一的ID、一个值(二值或一个计数)和一个任务等待列表。图3.1 一个信号灯的相关参数和支持的数据结构信号灯的类型:二值、计数和互相排斥的(互斥)信号灯。3.2.1 二值信号灯一个二值信号灯(binary semap

2、hore)只能有一个值,0或1。值为0时,不可使用;值为1时,认为信号灯是可使用。二值信号灯被当做全局资源,将信号灯作为一个全局的资源,允许任何任务甚至是开始没有获取过它的任务释放它。图3.2 二值信号灯的状态图6.2.2 计数信号灯一个计数信号灯(counting semaphore)使用一个计数,允许多次获取或释放。 图3.3 计数信号灯状态图计数信号灯是全局资源,可以被需要它们的所有任务共享。这个特征允许任意任务释放一个计数信号灯令牌。即使做此调用的任务第一次没能获取一个令牌,每个释放操作也把计数递增一次。3.2.3 互相排斥(互斥)信号灯图3.4 互相排斥(互斥)信号灯状态图互斥信号灯

3、的状态是开锁或闭锁。一个互斥信号灯可以支持附加功能:1. 互斥信号灯的所有权2. 递归的锁闭3. 任务删除安全4. 优先权倒置避免打开为互斥信号灯建立的确定协议,可以帮助避免优先权倒置。两个普遍使用的避免优先权倒置的协议包括:.优先权继承协议(priority inheritance protocol)当倒置发生时,保证已经获取互斥信号灯的较低优先权任务的优先权等级比已经请求互斥信号灯的高优先权任务的高。在任务释放较高的优先权任务要求的互斥信号灯之后,被升高的任务优先权降回到原来的值。.天花板优先权协议(ceiling priority protocol)保证获取互斥信号灯的任务优先权等级自动

4、地设定为所有可能请求互斥信号灯的任务中的最高优先权,从它首次获取的时候开始,直到它被释放。3.3 典型的信号灯操作使用信号灯完成的典型操作包括:. 创立和删除信号灯;. 获取和释放信号灯. 清除信号灯的任务等待列表;. 获取信号灯信息。3.3.1 创立和删除信号灯表3.1 标识了用于创立和删除信号灯的操作。表3.1 信号灯创立和删除操作操 作描 述Create建立信号灯Delete删除信号灯3.3.2 获取和释放信号灯表3.2 标识了用于获取或释放信号灯的操作。表3.2 信号灯获取和释放操作操 作描 述Acquire获取信号灯令牌Release释放信号灯令牌3.3.3 清除信号灯的任务等待列表

5、表3.3 信号灯开锁操作操 作描 述Flush打开所有等待信号灯的任务3.3.4 获取信号灯信息表3.4 信号灯信息操作操 作描 述Show info显示信号灯的一般信息Show blocked tasks得到在信号灯上阻塞任务的ID列表3.4 典型的信号灯使用. 等待和信号同步;. 多个任务等待和信号同步;. 信用追踪同步;. 单一共享资源访问同步;. 递归的共享资源访问同步;. 多个共享资源访问同步。3.4.1 等待和信号同步图3.5 等待才信号同步 3.4.2 多任务等待和信号同步图3.6 多个任务之间的等待和信号同步3.4.3 信用跟踪同步图3.7 两个任务间的信息跟踪同步3.4.4

6、单一共享资源访问同步图3.8 单一的共享资源访问同步3.4.5 递归共享资源访问同步图3.9 递归的共享资源访问同步3.4.6 多个共享资源访问同步图3.10 多个共享资源访问同步3.5 本章要点. 使用信号灯允许多个任务或ISR与任务同步运行,或者协调对一个共享资源的互斥访问。. 信号灯有一个相关的信号灯控制块(SCB)、一个惟一的ID、一个用户分配的值(二值或一个计数)和一个任务等待列表。. 三个通常类型的信号灯是二值、计数和互相排斥(互斥)信号灯,每个都可以获取或释放。. 二值信号灯或是可使用(1)或是不可使用(0)。计数信号灯也是可使用(计数1)或是不可使用(0)。然而,互斥信号灯是开锁(0)或是锁闭(锁计数1)。. 除了信号灯的数值已经是0外,获取一个二值或计数信号灯导致它的数值或计数递减. 释放一个二值或计数信号灯导致数值或计数值递增. 递归互斥信号灯可以被拥有它们的任务多次闭锁或开锁。获取一个开锁的递归信号灯递增它的锁计数,释放递减锁计数。. 内核为应用开发提供典型的信号灯操作,包括创立和删除信号灯、获取和释放信号灯以及Flush(转储)信号灯的任务等待列表,并且提供动态访问信号灯信息。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号