




已阅读5页,还剩88页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小结 国内普遍认同的定义 以特定应用为中心 以计算机技术为基础 软硬件可裁剪 适应应用系统对功能 可靠性 功耗 成本 体积等严格约束的专用计算机系统 嵌入式系统的核心技术思想 以通用计算机系统为参照 以满足特定应用要求为准则 采用各种可能的方法 技术和产品 使专用电子信息系统达到最优的性能 价格比 嵌入式系统软件开发 1 嵌入式系统软件与通用系统中软件的比较2 实时多任务操作系统3 嵌入式系统软件的组织结构4 存贮器管理5 多任务6 跳出软件 重新审视多任务 1 嵌入式系统软件与通用系统中软件的比较 1 相同之处软件系统的层次化结构化程序设计方法软件的可维护性 鲁棒性嵌入式系统的软件设计应当努力学习和采用通用计算机系统中有关软件设计的先进思想和成功方法 2 不同之处a 程序编译和程序执行是在两个不同的平台上宿主机端 Host 和目标端 target 开发系统 开发工具软仿真和硬仿真b 操作系统并非嵌入式系统的必备部分c 输入输出界面不同台式通用计算机系统键盘 Mouse CRT或LCD显示器d 可利用资源有限程序空间和数据空间都有限 一般没有虚拟内存 HOST与TARGET e 常常必须用汇编语言编程 跟硬件打交道和硬件打交道 常表现为对硬件地址的操作变量和变量名 地址和寻址方式 地址寄存器 程序是否结构化 是由设计方法决定的 而不是由程序设计语言决定的汇编语言同样应该坚持采用结构化的程序设计方法 效率与程序结构化的矛盾妥协 一般情况下 用汇编语言编写的子程序应当在入口处完整地保护现场 退出子程序前恢复现场 子程序内的局部变量按规定方式向系统申请并释放 以保证子程序调用的正确性 有关技术可参照 编译原理 希望尽可能提高指令执行效率时 可以部分保存现场 子程序确实未用到的部分可以不压栈 但这种程序非常容易出现隐蔽性很强的错误 可读性和可维护性极差 一定要谨慎使用 建议 作为通用的子程序模块 一定严格保护现场 只被有限制调用的专用子程序块 可以为了效率而尽可能减少保留现场操作 但必须有明显标识和使用规则 防止被误用 2 实时多任务操作系统 1 操作系统的功能 2 嵌入式RTOS的体系结构 3 嵌入式操作系统的代价 4 嵌入式系统中是否选用RTOS 5 嵌入式系统在三个层面上使用操作系统的技术或方法 1 操作系统的功能a 系统资源的管理多任务管理 IO管理 存贮器管理b 硬件功能的扩充用户的实时应用程序要使用某种资源 例如 从磁盘中读取一批数据 必须向实时操作系统提出申请 把读取数据的具体工作 转交给实时操作系统去执行 然后等待 可能需要排队 实时操作系统的执行结果 当实时操作系统读出它所需要的数据之后 它再继续执行 这样一来 用户的实时应用程序 使用资源的工作变变得十分简单 向操作系统提交使用资源的订单 申请使用资源的请求 然后等待 再从实时操作系统取回所需资源 至于这些资源是如何得到的 用户的实时程序可以不管 大大地方便了用户实时程序的编程工作 本来 读取磁盘数据的工作 牵涉到很多细节 必须给出磁头号 发出命令移动磁头到给定的磁道位置 给出扇区号 等待磁头和扇区移动到合适位置 才读出数据 如果是软件盘 在读写数据之前 还要注意步进电机的开关状态 如果电机是关闭的 在读写之前 要先启动它 如此等等 十分繁杂 而现在 用户的实时程序只要向实时操作系统提出如下的请求 READ fp buf count Fp是要读取的文件说明符或文件句柄 buf是存放所读取数据的缓冲区 count是要读取的字节数 其余的都是实时操作系统的事情了 它只要等着使用buf中的数据 这样一来 实时操作系统就好比一台扩充了功能的机器 它比底层硬件的功能更强 更容易编程 操作系统是硬件与应用程序之间的接口和桥梁 嵌入式操作系统主功能 操作系统解释图示 2 嵌入式RTOS的体系结构一个典型的嵌入式RTOS可以包括以下部分 其含义如下 RTOS基本内核 这是嵌入式RTOS体系中最核心 最基础的部分 在微内核结构中 必须拥有任务 进程 线程 管理 中断 包括时钟中断 管理 基本的通信管理和存储管理四部分 其中 对外设的管理只是提供设备中断管理接口 不负责具体操作 RTOS扩展内核 这是为方便用户使用而对RTOS系统进行的扩展 它建立在基本内核基础上 提供GUI TCP IP 浏览器 动态下载 电源管理和文件管理等编程接口 设备驱动程序接口 这是建立在RTOS系统内核与外部硬件之间的一个硬件抽象层 用于定义软件与硬件的界限 方便RTOS系统的移植和升级 在有些嵌入式RTOS中 没有专门区分这一部分 统归于RTOS系统基本内核 应用编程接口 这是建立在RTOS编程接口之上的 面向应用领域的编程接口 也称为应用编程中间件 它可以极大地方便用户编写特定领域的嵌入式应用程序 嵌入式RTOS体系结构 3 嵌入式操作系统的代价a 需要占用存贮资源RTOS典型的规模为10KB 20KB 有些达100KB 也有小到2KBb RTOS需要占用CPU资源较为合理的开销是CPU资源的5 左右 超过10 就不好了c RTOS可能会增加系统成本 4 嵌入式系统中是否选用RTOS实时内核也称为实时操作系统或RTOS 它的使用使得实时应用程序的设计和扩展变得容易 不需要大的改动就可以增加新的功能 通过将应用程序分割成若干独立的任务 RTOS使得应用程序的设计过程大为减化 使用可剥夺性内核时 所有时间要求苛刻的事件都得到了尽可能快捷 有效的处理 通过有效的服务 如信号量 邮箱 队列 延时 超时 等 RTOS使得资源得到更好的利用 如果应用项目对额外的需求可以承受 应该考虑使用实时内核 这些额外的需求是 内核的价格 额外的ROM RAM开销 2到4百分点的CPU额外负荷 建议 a 趋势是尽可能选用操作系统 b 一般来说 4位 8位单片机为主的嵌入式系统 无力支持RTOS的运行 c 对系统成本要求苛刻或极度追求运算效率而程序结构相对简单可以不使用RTOS 5 嵌入式系统在三个层面上使用操作系统的技术或方法a 在嵌入式系统中选择适当的RTOSb 针对某些特定要求开发嵌入式操作系统智能卡操作系统 COSCardOperationSystem c 将操作系统的技术思想和方法应用在程序设计中 3 嵌入式系统软件的组织结构 1 前后台系统 2 整体式模型 3 客户 服务器模型 前后台系统 1 前后台系统不太复杂的小系统 这种系统可称为前后台系统或超循环系统 super loop 应用程序是一个无限的循环 循环中调用相应的函数完成相应的操作 这部分可以看成后台行为 background 中断服务程序处理异步事件 这部分可以看成前台行为 foreground 后台也可以叫做任务级 前台也叫中断级 时间相关性很强的关键操作 criticaloperation 一定是靠中断服务程序来保证的 因为中断服务提供的信息一直要等到后台程序走到该处理这个信息这一步时才能得到处理 这种系统在处理信息的及时性上 比实际可以做到的要差 这个指标称作任务级响应时间 最坏情况下的任务级响应时间取决于整个循环的执行时间 因为循环的执行时间不是常数 程序经过某一特定部分的准确时间也是不能确定的 进而 如果程序修改了 循环的时序也会受到影响 很多基于微处理器的产品采用前后台系统设计 例如微波炉 电话机 玩具等 在另外一些基于微处理器的应用中 从省电的角度出发 平时微处理器在停机状态 halt 所有的事都靠中断服务来完成 2 整体式模型a 用一个主程序模块来处理系统调用命令的请求 b 用一套服务程序模块来执行系统调用命令 c 用一套公用子程序模块来支持服务程序的运行 整体式实时操作系统模型 3 客户 服务器模型另一种典型的设计方法是客户 服务器模型 这是目前最流行的一种方法 它的基本思想是 尽可能地把实时操作系统中的一些功能作为一些特殊的任务去完成 把这些特殊任务称为服务器任务 而在实时操作系统中 只留下一个很小的内核 为了得到某种服务 例如读取一个文件 用户的实时任务 称为客户任务clienttask 把请求发送给服务器任务 servertask 然后 由服务器任务来完成这个操作 并送回应答信息 按照这种模型进行设计时 把实时操作系统分成若干个部分 每一个部分管理系统的某一方面的功能 而实时操作系统内核 则管理任务的运行 处理客户任务和服务器任务之间的通信 为各个服务器任务的运行提供必要的支持 客户 服务器模型 4 存贮器管理 1 简单方法 2 位图管理法 3 链表管理法 1 简单方法这个指的就是不提供任何内存管理机制 不管理也算是一种管理 用户自行去维护内存空间 用错了 系统就挂了 系统本身只维护一个已经配置的空间的顶部指针 美其名是给用户一个最大的弹性空间 2 位图管理法在采用位图方法时 内存以若干个字节为单位来进行分配 系统中有一个管理内存分配的位图表 位图中的每一位对应于一个分配单位 0表示相应的单位未被分配 1表示相应的单位已经被分配使用 SimpleMethod内存管理 在使用位图管理内存时 需要考虑分配单位的大小 分配单位越大 位图所占的内存空间越小 但内存的浪费越大 例如在极端情况下 以512字节为一个单位和以4字节为一个单位两个系统 后者位图所占空间是前者的128倍 但是 如果一个任务需要513字节 则前者需要分配两个内存块 共1024字节 浪费511个字节 后者分配129个内存块 共516个字节 只浪费3个字节 使用位图管理内存时 如果要为用户任务分配一个n个分配单位的内存空间 需要搜索内存位图 从中找出连续n个为0的位串 这种搜索也比较费时 3 链表管理法 使用位图的内存管理 使用链表的内存管理 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 三个任务的串行执行 三个任务的并发执行 1 多任务的概念多任务是指计算机在同一时刻处理多个任务的能力 2 任务的分解把一个实时应用问题 分解为多个任务 可加快执行速度 有效地利用系统资源 但是 过度的分解 将使系统中有大量的任务 经常进行任务的切换 任务与任务之间 还需进行很多同步和互斥控制 将增加大量的系统服务工作 降低系统的速度和有效性 因此 在把一个实时应用问题分解为若干个任务时 还必须进行各种综合平衡和折衷 有时 把两个操作合并在一起处理 效果可能好些 有时 则必须分开处理 这都必须依赖于实时应用的特性 但是 还是可以提出一些任务分解的准则 假设 act表示某个代码段的一个执行 相关操作dact c 是相关条件c为TRUE 真 时才执行的操作 那么 可按如下一些准则来分解 a 时间原则 如果dact A 和dact B 所依赖的相关条件 有不同的时间频度或阶段 则可把dact A 和dact B 分解为独立的任务 b 异步原则 如果dact A 和dact B 所依赖的相关条件 互相之间没有临时性的关系 可把dact A 和dact B 分解为独立的任务 c 优先性原则 如果dact A 和dact B 所依赖的相关条件 要求有不同的优先性 则可把dact A 和dact B 分解为独立的任务 d 清晰度和可维护性原则 如果dact A 和dact B 在功能上和逻辑上互相独立 可把dact A 和dact B 分解为独立的任务 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 3 任务的状态任务就可能处于如下4种基本状态之中 静止状态 任务建立之后 但尚未被启动 不具备运行条件 这时就认为任务处于静止状态 运行状态 任务正在占用CPU运行 就绪状态 任务已具备运行条件 准备运行 但CPU被别的任务所占有 挂起状态 任务因某种原因 无法继续运行 第2 3两种状态在逻辑上是类似的 处于这两种状态下的任务都可以占有CPU而运行 前者可实际占用CPU 而后者只要CPU空闲就可以运行 处于挂起状态下的任务 只有等待某个事件出现才得以运行 否则 就是CPU已经空闲了也不可能占用CPU 很多计算机的操作系统没有静止状态这一概念 任务一旦建立就马上启动 处于就绪状态 但也有一些实时操作系统 把任务代码调入内存 并且已拥有任务控制块的任务 称为静止状态的任务 静止状态的任务需要另一个任务予以启动 才可能进入就绪状态准备运行 这只是在任务的管理上存在一些细小的差别 没有本质的不同 有些系统为了区别挂起的原因 有时还把挂起状态分为4种情况 阻塞状态 任务等待输入输出操作的完成 例如等待键盘输入 而无法继续运行时 处于阻塞状态 暂停状态 在必要时 任务本身可以使自己或使其他任务暂停运行 使其处于暂停状态 处于暂停状态的任务只有由其他任务激活 才能再次运行 等待状态 任务在等待某种事件或信号量 而使自己处于等待状态 延时状态 任务可以使本身或其他任务延时一个时刻再运行 被延时的任务就处于延时状态 以上4种状态只是进一步说明挂起的原因 任何任务在任何时刻 只能处于静止 运行 就绪 挂起这4种基本状态中的一种 当任务处于静止状态时 就称这个任务是非活动的任务 否则 就称为活动的任务 任务的状态可由本任务 其他任务或其他内部的 外部的事件所改变 无论任何时候 一旦某个任务的状态发生变化 就进行任务的调度 一般说来 当系统发生下列事件时 有些任务的状态就可能发生变化 执行中的任务调用系统的任务管理命令 来控制自己 改变自己的状态 执行中的任务调用系统的任务管理命令 来控制其他任务 改变其他任务的状态 外部事件中断可能改变某个任务的状态 定时器中断可以改变一些任务的状态 执行中的任务因等待信号量 事件或消息等 可能改变自己的状态 执行中的任务因发送信号量 事件或消息等 可能改变其他任务的状态 下面是一些可能的状态转换关系 不同系统的实现 有一些差别 处于运行状态的任务 因运行结束或中止运行 将转为静止状态 被其他高优先级的任务占先 将转为就绪状态 因暂停 延时 等待I O完成或等待信号量 事件等 而转为挂起状态 被自己撤消而消亡 处于静止状态的任务被启动 将处于就绪状态 被其他任务撤消而消亡 处于就绪状态的任务经过调度 可占先正在运行的任务 使其处于运行状态 也可以被其他任务所中止 而转为静止状态 或被其他任务暂停 而处于挂起状态 被其他任务所撤消而消亡 处于挂起状态的任务 被其他任务所激活或I O事件完成 所等待的信号量 事件已发生或延时的时刻已到达 而转为就绪状态 被其他任务所中止 而处于静止状态 被其他任务所撤消而消亡 任务状态的转换 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 4 进程和线程a 进程进程常常被定义为一个执行程序 一个程序由程序代码所表达的算法构成 一个进程就是一个活动 根据程序的算法来进行工作 一个进程由一组分配给操作系统来处理的内存区域以及当前的CPU状态构成 当一个程序被启动 操作系统创建一个进程并分配一组内存区域 这组内存区域构成如下 代码区域 存放进程的可执行代码 堆栈区域 存放局域变量和函数返回指针 数据区域 进程存放其全局变量的地方 动态堆栈区域 存放动态分配的内存 比如由malloc C运行库调用所返回的内存区域 系统区域 存放由操作系统为该进程维护的信息 系统区域包括分配给该进程的资源的有关信息 如用于打开文件或网络连接的数据结构 系统区域还包括该进程本身的信息 如该进程的内存区域位置 以及 在该进程当前没运行时 所保存的处理器的状态 b 线程线程是一个进程中独立的执行流程 在一个多任务操作系统中 一个进程由一个或多个线程构成 一个进程中的所有线程共享该进程的代码 数据 动态堆以及系统内存区 每个线程有一个单独的CPU状态和一个单独的堆栈 即一块从该进程的堆栈区域中划分出来的内存 由于一个进程的所有线程共享同样的数据和动态堆内存区域 所有的全局数据都能被这些线程的任何一个访问 由于每个线程有其自己的堆栈 所有的局域变量和函数参数对一个给定的线程来说都是特有的 私有的 由于所有线程共享同样的代码和全局数据 它们比进程间更紧密 比单独的进程间更趋向于相互作用 由于这个原因 同步对象在多线程应用程序中比多进程应用程序中被使用的可能性更大 不过 在进程间和在线程间使用同步对象和任务间的通信的方式是同样的 线程间的相互作用要容易些 因为它们本身就有某些供通信用的共享内存 进程的全局数据 但相互作用的原理是相同的 无论你是在编写线程还在编写进程 进程 线程 c 多任务体系的一种分类多进程 单线程这种操作系统支持多个同时执行的进程 但每个进程只含一个执行线程 单进程 多线程这种操作系统只运行一个进程 但在这个进程中 可发生多个执行的线程 多进程 多线程这种操作系统允许有多个进程以及每个进程中有多个线程 许多嵌入系统 如打印机 手机或调制解调器 都设计成用于完成一个基本的活动 在这类系统中 代码所进行的动作往往是相互关联的 即各种代码子系统需要容易地相互通信 对这种系统 单进程应用程序通常是最好的解决方法 把所有的代码放在一个进程中可使所有的线程共享全局数据和其他系统资源 这样使系统不同部分间的通信直截了当 还有一些嵌入系统要完成很多种操作 这些操作中有一些只需很小 或无需 相互作用 这样的系统作为多进程来处理要容易得多 每个进程都可作为一个单独的程序来设计 实现和调试 并作为一个单独程序来运行 将一个进行几个不同的 相互关联很少的 活动的系统划分成独立的进程可使用系统易于理解 易于实现 在多进程系统中 如何将系统划分成进程通常是很显然的 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 5 协作式和占先式多任务系统a 协作式多任务系统非占先式 non preemptive 内核要求每个任务自我放弃CPU的所有权 非占先式调度法也称作合作型多任务 cooperativemultitasking 各个任务彼此合作共享一个CPU 异步事件还是由中断服务来处理 非占先式内核的一个优点是响应中断快 非占先式内核允许使用不可重入函数 非占先式内核的另一个优点是 几乎不需要使用信号量保护共享数据 运行着的任务占有CPU 而不必担心被别的任务抢占 非占先式内核的最大缺陷在于其响应时间 总之 非占先式内核允许每个任务运行 直到该任务自愿放弃CPU的控制权 中断可以打入运行着的任务 中断服务完成以后将CPU控制权还给被中断了的任务 任务级响应时间要大大好于前后系统 但仍是不可知的 商业软件几乎没有非占先式内核 非占先式内核 b 占先式多任务系统最高优先级的任务一旦就绪 总能得到CPU的控制权 当一个运行着的任务使一个比它优先级高的任务进入了就绪态 当前任务的CPU使用权就被剥夺了 或者说被挂起了 那个高优先级的任务立刻得到了CPU的控制权 如果是中断服务子程序使一个高优先级的任务进入就绪态 中断完成时 中断了的任务被挂起 优先级高的那个任务开始运行 使用占先式内核 最高优先级的任务什么时候可以执行 可以得到CPU的控制权是可知的 使用占先式内核使得任务级响应时间得以最优化 使用占先式内核时 应用程序不应直接使用不可重入型函数 调用不可重入型函数时 要满足互斥条件 占先式内核 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 6 任务的调度a 循环调度 Round robin b 先来后到 FirstComefirstServe c 速率单调算法速率单调算法是一个经典的算法 它是针对那些响应和处理周期性事件的实时任务的 它事先为每个这样的实时任务 分配一个与事件频率成正比的优先级 例如 周期为20ms的实时任务 优先级有50 而周期为100ms的实时任务 优先级为10 运行时 调度程序总是调度优先级最高的就绪任务 必要时抢占当前正在运行的任务 d 截止期最早优先算法在这种算法里 截止期最早的任务优先级最高 对于周期任务 其截止期即为下一周期开始的时间 有时 把这种算法称为时限驱动算法 e 最小裕度算法优先性由截止期时间的早晚而定 可能使一些不可达截止期的任务 因来不及处理而夭折 另外一种算法是 计算任务的富余时间 称为裕度 laxity 裕度小的优先级高 f 价值最高优先算法在这种算法里 每一个任务有一个价值函数 价值最大 优先级最高 循环调度 优先级任务 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 7 任务间的通信a 共享内存顾名思义 共享内存就是一块由多个进程共享的内存区域 每个访问共享内存的进程都把这块内存看成是该进程私有的内存空间 共享内存是为进程 而不是为线程 间的通信而配备的 一个进程中的线程毕竟已经在共享它们所有的全局数据 用全程变量时 必须保证每个任务或中断服务程序独享该变量 中断服务中保证独享的惟一办法是关中断 如果两个任务共享某变量 各任务实现独享该变量的办法可以是关中断再开中断 或使用信号量 如前面提到的那样 b 消息邮箱通过内核服务可以给任务发送消息 典型的消息邮箱 messagemailbox 也称作消息交换 messageexchange 是用一个指针型变量 通过内核服务 一个任务或一个中断服务程序可以把一则消息 即一个指针 入到邮箱里去 同样 一个或多个任务可以通过内核服务接收这则消息 发送消息的任务和接收消息的任务约定 该指针指向的内容就是那则消息 c 消息队列消息队列 messagequeue 用于给任务发消息 消息队列实际上是邮箱阵列 通过内核提供的服务 任务或中断服务子程序可以将一条消息 该消息的指针 放入消息队列 同样 一个或多个任务可以通过内核服务从消息队列中得到消息 发送和接收消息的任务约定 传递的消息实际上是传递的指针指向的内容 通常 先进入消息队列的消息先传给任务 也就是说 任务先得到是最先进入消息队列的消息 即先进行出原则 FIFO 5 多任务 1 多任务的概念 2 任务的分解 3 任务的状态 4 进程和线程 5 协作式和占先式多任务系统 6 任务的调度 7 任务间的通信 8 与多任务有关的其它概念和方法 8 与多任务有关的其它概念和方法a 互斥资源任何为任务所占用的实体都可称为资源 资源可以是输入输出设备 例如打印机 键盘 显示器 资源也可以是一个变量 一个结构或一个数组等 共享资源可以被一个以上任务使用的资源叫做共享资源 互斥为了防止数据被破坏 每个任务在与共享资源打交道时 必须独占该资源 这叫做互斥 mutualexclusion 互斥条件实现任务间通信最简便的办法是使用共享数据结构 特别当所有任务都在一个单一地址空间下 能使用全程变量 指针 缓冲区 链表 循环缓冲区等 使用共享数据结构通信就更为容易 虽然共享数据区法简化了任务间的信息交换 但是必须保证每个任务在处理共享数据时的排它性 以避免竞争和数据的破坏 与共享资源打交道时 使之满足互斥条件最一般的方法有 关中断 使用测试并置位指令 禁止做任务切换 利用信号量 关中断和开中断处理共享数据时保证互斥 最简便快捷的办法是关中断和开中断 可是 必须十分小心 关中断的时间不能太长 因为它影响整个系统的中断响应时间 即中断延迟时间 当改变或复制某几个变量的值时 应想到用这种方法来做 这也是在中断服务子程序中处理共享变量或共享数据结构的惟一方法 在任何情况下 关中断的时间都要尽量短 如果使用某种实时内核 一般地说 关中断的最长时间不超过内核本身的关中断时间 就不会影响系统中断延迟 当然得知道内核里中断关了多久 凡好的实时内核 厂商都提供这方面的数据 总而言之 要想出售实时内核 时间特性最重要 测试并置位如果不使用实时内核 当两个任务共享一个资源时 一定要约定好 先测试某一全程变量 如果该变量是0 允许该任务与共享资源打交道 为防止另一任务也要使用该资源 前者只要简单地将全程变量置为1 这通常称作测试并置位 Test And Set 或称作TAS 因为内核最主要的功能就是做任务的调度与协调 禁止任务切换显然与内核的初衷相违 b 信号量信号量实际上是一种约定机制 在多任务内核中普使用信号量用于 控制共享资源的使用权 满足互斥条件 标志某事件的发生 使两个任务的行为同步 信号像是一把钥匙 任务要运行下去 得先拿到这把钥匙 如果信号已被别的任务占用 该任务只得被挂起 直到信号被当前使用者释放 信号量两种类型 二进制型 binary 和计数器型 counting c 死锁有人给死锁下这样的定义 若任务集中的每一个任务都在等待事件 而所等待的事件 又只能由这个任务集中的某一个任务所触发 这种情况就被认为是死锁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字绘画课件
- 汉字的艺术魅力课件
- 户口迁移单位介绍信
- 汉字字谜的多媒体课件
- 《英语语言与文化》2019秋冬知到智慧树答案
- 房产销售个人月工作总结
- 通信行业G技术应用前景展望
- 汉字书法课件模板慧字
- 2024年秋新北师大版数学一年级上册课件 我上学啦 我上学啦 2.认识新同学
- 2024年秋新北师大版数学一年级上册教学课件 第四单元 10以内数加与减 第1课时 猜数游戏
- 医院患者病情评估制度
- 钢栏杆安装工程施工方案
- 2025年幼儿教师师德培训案例集
- GB/T 33130-2024高标准农田建设评价规范
- 养老院老人权益保护制度
- 高空作业车安全知识培训
- 吉林大学《计算机网络(双语)》2021-2022学年期末试卷
- 《解除保护性止付申请书模板》
- 2024年云网安全应知应会考试题库
- 高层建筑火灾扑救
- 南京大学介绍
评论
0/150
提交评论