《嵌入式系统基础教程第18讲第9章嵌入式操作系统概论.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统基础教程第18讲第9章嵌入式操作系统概论.ppt(74页珍藏版)》请在三一办公上搜索。
1、嵌入式系统原理与开发,第18讲南京大学计算机系 俞建新主讲,2008年春季,2008年6月24日,南京大学计算机系,2,第9章 嵌入式操作系统概论,本章主要介绍以下内容:实时系统嵌入式操作系统的特点与分类RTOS常用调度算法启动代码Bootloader嵌入式操作系统uCOS-II,2008年6月24日,南京大学计算机系,3,9.1 实时系统,什么是实时系统一般而言具有实时性能的控制系统是实时系统。实时表示一个非常短的时间间隔“time gap”(也可以认为表示时间框架“time frame”或者时间窗口“time window”),具有“立即”之含义。当计算机进行实时处理时,要求在接收到数据的
2、同时执行操作并输出计算结果,不能超出计算机系统所能容忍的时限。,2008年6月24日,南京大学计算机系,4,实时系统的定义,IEEE(美国电气电子工程师协会)给出的实时系统定义是“那些正确性不仅取决于计算的逻辑结果,也取决于产生结果所花费的时间的系统”。这就是说,实时系统运算能力具有及时与正确的双重特征。本教程给出的实时系统(Real-Time System)定义是:对外来事件能在限定的响应时间内做出预定质量处理的计算机系统。,2008年6月24日,南京大学计算机系,5,实时系统的主要特点,及时响应外部发生的随机任务请求在规定的时间内完成任务任务执行的时间限制类型和类型间关系截止时间(fini
3、sh time)任务执行预设时间(budget time)一个任务的截止时间通常大于任务执行预设时间,2008年6月24日,南京大学计算机系,6,实时系统的关键因素,计算机系统的实时性能主要由操作系统和运行在操作系统上的应用软件决定,对于无操作系统的计算机则由控制程序决定。具有实时性能的操作系统称为实时操作系统(Real-Time Operating System,RTOS),2008年6月24日,南京大学计算机系,7,实时系统与非实时系统的例子,实时系统典型例子民用飞机的导航系统汽车的防刹车抱死系统(ABS)非实时系统典型例子银行数据查询处理系统视频播放系统图像扫描文字识别系统,2008年6
4、月24日,南京大学计算机系,8,提高实时性能的因素,以下几种途径常常用来提高应用系统实时性能尽量采用硬件处理优化微处理器的中断机制采用简单的单线程循环程序采用基于实时操作系统的复杂多线程操作,2008年6月24日,南京大学计算机系,9,实时系统的属性和指标,实时系统的两个基本属性可预测性和可靠性实时系统的实时性能主要根据其RTOS的三个主要指标来衡量 响应时间(response time)吞吐量(throughput)生存时间(survival time),2008年6月24日,南京大学计算机系,10,响应时间,计算机从识别一个外部事件到做出响应的时间 RTOS响应时间的具体指标是:中断延迟时
5、间(Interrupt Latency)任务切换时间(Task Switching Latency),2008年6月24日,南京大学计算机系,11,响应时间(续),两个时间指标的计算公式是:中断延迟时间=TCloseINT+TDoISR+TSaveReg+TStartServiceTCloseINT:关中断的最长时间TDoISR:开始执行中断服务子程序的第一条指令的时间TSaveReg:保存CPU内部寄存器的时间TStartService:内核进入中断服务函数的执行时间任务切换时间:T to Do B Task Time T to Pause A Task TimeT to Do B Task
6、 Time:开始执行B任务的时刻T to Pause A Task:暂停执行A任务的时刻,2008年6月24日,南京大学计算机系,12,响应时间(续),任务的切换时间就是CPU从停止一个任务的执行切换到另一个任务所需时间VxWorks是实时嵌入式系统,内核为Wind。下表给出了eCos操作系统内核实时响应时间参考数据,2008年6月24日,南京大学计算机系,13,实时系统的分类,根据响应性能分硬实时系统系统未能在时限内就某一事件做出响应而失败,并且该失败被认为是一种全面的系统失败,则可以认为该系统是一个硬实时(hard real-time)系统。软实时系统非硬实时的实时系统可以归类为软实时系统
7、。在一个软实时(soft real-time)系统中,存在时限指标,但是如果输出响应超过时限,一般不会造成严重后果。,2008年6月24日,南京大学计算机系,14,硬实时系统和软实时系统时限效益,下面是两种实时系统的时限效益图,2008年6月24日,南京大学计算机系,15,实时系统的分类(续),按照响应时间的快慢分类:强实时系统:其响应时间在毫秒级或微秒级普通实时系统:其响应时间一般几秒弱实时系统:其响应时间一般在数十秒,2008年6月24日,南京大学计算机系,16,9.2 嵌入式操作系统的特点和分类,操作系统可以最粗略地分为内核(kernel)、设备驱动与外壳(shell)三大部分。通俗地讲
8、,内核是操作系统的核心模块,管理CPU的运行;而外壳是内核的外围模块,对用户发出的命令进行解释和处理。,2008年6月24日,南京大学计算机系,17,嵌入式系统内核,广义解释指装入到存储器的嵌入式软件中的操作系统部分,在这种情况下,除了操作系统内核之外,嵌入式软件还包括板级支持包,驱动程序和应用软件 狭义解释指嵌入式操作系统中负责多任务管理及任务之间进行通信的多任务处理部分。它进行任务管理(进程管理),时钟管理,内存管理等,2008年6月24日,南京大学计算机系,18,嵌入式操作系统的特点,可移植性强调实时性能内核精简,所占空间小抢占式内核使用可重入函数可配置可裁剪高可靠性,2008年6月24
9、日,南京大学计算机系,19,可移植性,硬件平台的多样性以及提高代码可重用性的双重条件,导致嵌入式操作系统研发机构力求做到嵌入式系统具有良好的可移植性。考虑到移植性,嵌入式系统通常分为两部分硬件相关部分包括班级支持包(BSP)或硬件抽象层(HAL)硬件无关部分包括内核、中间件和API,2008年6月24日,南京大学计算机系,20,强调实时性能,传统观点嵌入式操作系统应该具有强实时性能 现代由于手机和媒体播放器之类的软实时嵌入式产品日益普及,导致一些嵌入式操作系统降低了实时性能 实时性能仍然被认为是评价嵌入式操作系统的最重要技术指标,2008年6月24日,南京大学计算机系,21,内核精简:所占空间
10、小,内核是操作系统中靠近硬件并且享有最高特权的一层。为了适应嵌入式计算机存储空间小的限制,嵌入式操作系统的内核都尽量小型化。,2008年6月24日,南京大学计算机系,22,典型的操作系统内核空间尺寸,VxWorks操作系统内核最小可裁减到8KBNucleus Plus内核在典型的CISC体系结构上占据大约20KB空间,而在典型的RISC体系结构上占据空间为40KB左右,其内核数据结构占据1.5KB空间QNX的内核大约占12KB国产Hopen操作系统的内核大约占10KBWinCE操作系统的内核大约占25KB,2008年6月24日,南京大学计算机系,23,抢占式内核,从内核调度基本特点分类,嵌入式
11、操作系统内核分为抢占式内核(preemptive kernel)和不可抢占式内核(non-preemptive kernel)抢占式内核的最大特点是最高优先级任务能够立即得到执行,从而能够保证系统具有高度实时性能。,2008年6月24日,南京大学计算机系,24,抢占式内核(续1),不可抢占式内核不可抢占式内核称为合作型多任务(进程)处理,要求每个任务在程序代码执行完毕后自我放弃CPU的所有权 不可抢占式内核的最大缺陷在于响应时间。高优先级的任务已经进入就绪态,但还不能运行,直到当前运行的任务释放CPU为止。,2008年6月24日,南京大学计算机系,25,抢占式内核(续2),抢占式内核的工作原理
12、最高优先级的任务就绪必然得到CPU的控制权。当一个运行着的任务使另一个比它优先级高的任务进入了就绪态,则当前任务的CPU控制权就会被抢占,那个高优先级的任务立刻获得CPU的控制权。通常把最高优先级指派给实时要求最高的任务。且绝大多数嵌入式操作系统的内核采用抢占式调度策略,2008年6月24日,南京大学计算机系,26,使用可重入函数,实时操作系统要求使用可重入函数 什么是可重入函数?如果一个函数的代码能够同时被多个任务并发地调用(分享),并且在调用该函数时这些任务之间不会产生数据干扰错误,那么这个函数就是可重入(reentrant)函数。,2008年6月24日,南京大学计算机系,27,意义和准则
13、,可重入函数的重要价值在于:任意时刻被中断后再继续运行不会丢失数据 可重入函数中使用变量有两个准则尽量使用局部变量,即把变量保存在CPU寄存器中或者栈区中如果使用全局变量,则要对全局变量进行保护,2008年6月24日,南京大学计算机系,28,使用可重入函数(续1),不可重入函数的特征有函数体内使用了静态的数据结构函数体内调用了malloc()或者free()函数函数体内调用了标准I/O函数抢占式内核的函数必须是可重入的。在抢占式内核控制之下,如果有两个以上任务需要调用同一个不可可重入函数,则必须使之满足互斥条件。,2008年6月24日,南京大学计算机系,29,使用可重入函数(续2),为了保证编
14、写的函数具有可重入性,其关键之处是应当做到以下几点:使用本地数据。不返回指向静态数据的指针,所有数据都由函数的调用者提供。不为连续的调用持有静态数据。通过制作全局数据的本地拷贝来保护全局数据。不调用任何不可重入函数。,2008年6月24日,南京大学计算机系,30,可配置,嵌入式操作系统必须具有良好的可配置功能,这也是嵌入式操作系统区别于通用操作系统的一个重要方面 最典型的可配置型嵌入式操作系统是eCos,在内部设计了大量可以调节操作系统特性和性能的参数,并为配置这些参数设计了专门的配置工具,2008年6月24日,南京大学计算机系,31,可裁剪,指编译之前对嵌入式操作系统功能部件进行增加和删除,
15、可定制是可裁减的另外一种表达方式 可以根据产品的资源限制和功能/性能需求对嵌入式操作系统的功能部件进行增删,将所有不必要的部件去除,同时把增强功能和提高性能的部件添加进去,最终编译成一个满足特定设计要求的最小尺寸的操作系统目标程序,2008年6月24日,南京大学计算机系,32,高可靠性,嵌入式系统往往在无人操作和值守的环境下运行,有的嵌入式系统运行时间长甚至是常年运行,因此对可靠性的要求就成为嵌入式操作系统的一个重要特点 VxWorks、C/OS-II等,都已经经过了多年应用的考验,一般来说这些操作系统都是稳定和安全的,具有公认的高可靠性,2008年6月24日,南京大学计算机系,33,嵌入式操
16、作系统分类,按源代码分类商用型和开源型按实时性能分类强实时型和普通实时型按内核结构分类单内核型和微内核型,2008年6月24日,南京大学计算机系,34,单内核,单内核(monolithic kernel)是传统型操作系统内核,有时也被称为宏内核(macro kernel)单内核内部包含I/O管理和设备管理、进程管理、调度器、内存管理、文件管理和时间管理等模块各模块之间的耦合度很紧,模块之间的通信通过直接函数调用实现,而不是消息传递,2008年6月24日,南京大学计算机系,35,单内核(续),缺点占内存空间大,缺乏可扩展性,维护困难,排除故障和增加新功能需要重编译 优点系统花在内核功能切换的开销
17、非常小,对外来事件反应速度快,2008年6月24日,南京大学计算机系,36,单内核/微内核的内部结构图解,单内核与微内核操作系统模块框架,2008年6月24日,南京大学计算机系,37,微内核,基本思想是在内核模式中执行基本的核心操作系统功能,非基本的服务和应用构筑在微内核之上 微内核用水平架构代替了传统的垂直分层架构 设备驱动程序、文件系统、虚拟内存管理程序和窗口系统等以服务器进程方式工作。它们之间的相互作用变成了对等地通过微内核传递消息,2008年6月24日,南京大学计算机系,38,微内核(续),突出特点内核小巧,通常微内核只有任务管理、虚存管理和进程间通信3个部分接口一致,所有进程请求使用
18、统一接口,进程不需要区分内核模式和用户模式服务各个功能模块之间松散耦合,只完成服务功能,系统管理功能交给一个或多个特权服务程序基于客户/服务器体系结构,在微内核结构的操作系统中,任务间通信机制消息机制是系统的基础微内核功能扩充方便,但是各个功能之间的切换而引起的开销非常大。,2008年6月24日,南京大学计算机系,39,9.3 RTOS常用的调度算法,本节内容基于优先级的调度算法时钟驱动调度算法基于比例共享的调度算法非周期任务的调度优先级反转和对策,2008年6月24日,南京大学计算机系,40,基于优先级的调度算法,大多数实时系统采用该算法该算法给每个任务分配一个优先级,在每次任务调度时,总是
19、执行最高优先级的任务。优先级驱动算法是事件驱动算法在基于该算法调度的内核中,保存就绪任务队列的数据结构有几种,可以是位图,也可以是表格根据不同的优先级指派方法,该调度算法可以分为静态实时调度和动态实时调度两种类型,2008年6月24日,南京大学计算机系,41,静态实时调度,在系统编译的时候就做出决定从就绪任务队列中选择哪个任务来运行 假设系统中实时任务特性是事先知道可以完全脱机的进行可调度性分析 两种静态实时调度算法RMS算法 和 DMS 算法,2008年6月24日,南京大学计算机系,42,RMS算法,全称速率单调调度(Rate Monotonic Scheduling),它是由Liu和Lay
20、and在1973年提出来的静态多任务调度算法,适用于那些响应和处理周期性事件的实时任务 基本原理是任务的速率与其周期成反比,2008年6月24日,南京大学计算机系,43,RMS算法(续),RMS算法基于嵌入式系统做出了如下5个模型假设所有的任务请求都是周期性的,必须在限定的时限内完成;任务之间都是独立的,每个任务的请求不依赖于其他任务请求的开始或完成;每个任务的运行时间是不变的(不考虑中断情况);所有的非周期性任务都在特殊的情况下运行抢占式调度,单处理器,任务切换的时间忽略不计。,2008年6月24日,南京大学计算机系,44,RMS算法(续1),RMS模型设S=S1,S2,S3,.Sn为一个含
21、有n个周期性任务的集合,S集合中的任务用Si=Ti,Ci,Di,Pi,Ui(i=1,2,3,.n)来表示。其中:Ti表示任务的发生周期,Ci表示任务的最长执行时间,Di表示任务的相对截止时间,Pi表示任务在S中的优先级(优先级数值越小,优先权越高),Ui表示任务的CPU利用率 整个任务集S的CPU利用率为:Un=,2008年6月24日,南京大学计算机系,45,RMS算法(续2),RMS算法的任务优先级,2008年6月24日,南京大学计算机系,46,DMS算法,全称是截止时间单调调度(Deadline Monotonic Scheduling)DMS是在速率单调调度的基础上发展起来的。不同的是任
22、务Si的优先级按相对截止时间Di来分配。相对截止时间短的任务优先级高,相对截止时间长的任务优先级低,2008年6月24日,南京大学计算机系,47,动态实时调度,指调度器在运行期间才决定选择哪个就绪任务来运行 主要算法最早截止时间优先(EDF,Earliest Deadline First)最小空闲时间优先(LSF,Least Slack Time First)等,2008年6月24日,南京大学计算机系,48,最早截止时间优先算法,1973年由Liu和Layland首先提出来的 是一个动态优先级驱动的调度算法,其中分配给每个任务的优先级根据它们当前对截止时限的要求而定 离截止时限最短时间的就绪任
23、务分配最高的优先级,而离截止时限最长时间的任务被分配最低优先级。,2008年6月24日,南京大学计算机系,49,最早截止时间优先(续),抢占式EDF调度算法基于如下的假设 所有实时任务的启动时间为零;所有的任务都是无关的,不存在先后次序的约束;任何任务不存在不可抢占的代码段,且抢占的代价可以忽略;只有处理器请求是有意义的,内存、I/O和其它资源请求可以忽略;任务的相对最终完成时限与它的周期相等,2008年6月24日,南京大学计算机系,50,最小空闲时间优先,是对经典的动态优先级算法EDF的改进提出了空闲时间(也就是时间裕度)的概念,进程的优先级由空闲时间大小决定 LSF算法的缺点:由于等待任务
24、的空闲时间是递减的,其等待执行的缓急程度也随时间逝去越来越紧迫,因此在系统执行过程中,等待任务随时可能会抢占当前执行的任务,2008年6月24日,南京大学计算机系,51,静态的与动态的基于优先级调度算法比较,静态调度算法适合于任务时间要素比较明确场合 静态调度算法不适合用于任务时限未明确场合动态调度算法需要不断地调整任务的优先级别,以适应任务时限变化的执行环境 一般而言,动态优先级调度算法对资源的利用率高于静态优先级调度算法,2008年6月24日,南京大学计算机系,52,时钟驱动调度算法,该算法是系统调度程序通过时钟驱动,在事先确定的某些时刻做出调度决策作业的调度表可以脱机计算并保存下来 运行
25、时的调度开销可被最小化 调度时刻通常由一个硬件定时器的时钟中断产生 采用该算法的嵌入式操作系统可以是实时的,也可以是分时的,2008年6月24日,南京大学计算机系,53,基于比例共享的调度算法,基本思想就是按照一定的权重(比例)对一组需要调度的任务进行调度,让它们的执行时间与它们的权重完全成正比 通过两种方法来实现比例共享调度算 第一种方法是调节各个就绪进程出现在调度队列队首的频率,并调度队首的进程执行 第二种做法就是逐次调度就绪队列中的各个进程投入运行,但根据分配的权重调节分配给每个进程的运行时间片,2008年6月24日,南京大学计算机系,54,非周期任务的调度,非周期任务被实时系统用来响应
26、外部触发事件,非周期任务完成的时间越快,系统的响应性能越好 实时系统设计重要目标之一是提高混合任务集的响应性能,也就是说除了保证周期任务得到正确执行外,还应该减小非周期任务的响应时间 非周期任务的调度三种方法:后台处理、中断驱动执行和周期查询执行。,2008年6月24日,南京大学计算机系,55,临界资源和代码临界区,临界资源指在一段时间只允许一个进程访问的资源。硬件临界资源和软件临界资源之分代码临界区指处理时不可分割的代码进入临界区时必须关中断执行完临界区代码之后要立即开中断,2008年6月24日,南京大学计算机系,56,优先级反转和对策,优先级翻转现象由于多进程共享资源,具有最高优先权的进程
27、被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。解决该问题的方法优先级封顶协议优先级继承协议,2008年6月24日,南京大学计算机系,57,9.4 启动程序Bootloader,本节讲授以下内容嵌入式系统的启动方式Bootloader的程序结构与调试Bootloader人机交互接口设计常用Bootloader介绍,2008年6月24日,南京大学计算机系,58,启动程序Bootloader,属于嵌入式软件最底层的部分。从软件角度(分两部分)固件(fireware)中的引导代码(可选)Bootloader,2008年6月24日,南京大学计算机系,59,嵌入式系统
28、的启动方式,整个系统的加载启动任务就完全由Bootloader完成。是嵌入式系统加电后运行的第一段软件代码,先于内核以及用户应用程序运行。Bootloader初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境设定在一个正确的状态,以便接下来加载操作系统内核、运行用户应用程序。,2008年6月24日,南京大学计算机系,60,Bootloader系统架构用例分析,2008年6月24日,南京大学计算机系,61,Bootloader的安装,对于每一个嵌入式硬件电路板,需要开发人员单独编写该电路板所使用的Bootloader代码 安装统加电或复位后,所有的微处理器通常都从某个由CPU制造商预先
29、安排的地址上取指令。通常基于微处理器构建的嵌入式系统都有某种类型的固态存储设备被映射到这个预先安排的地址上。而Bootloader则从这个地址开始固化到固态存储设备中例如,基于ARM7TDMI核的微处理器在复位时都从地址0 x00000000取得它的第一条指令。,2008年6月24日,南京大学计算机系,62,Bootloader的操作方式,两种操作模式启动加载模式和下载模式启动加载模式(boot loading)也称自主(Autonomous)模式,是指Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入是Bootloader的正常工作模式,
30、在嵌入式产品完工交付时或者实际使用时,必须使得Bootloader工作在这种模式下,2008年6月24日,南京大学计算机系,63,Bootloader的操作方式(续1),下载模式(downloading)目标板上的Bootloader将先通过串口连接或网络连接等通信手段从主机下载文件 Bootloader 的这种模式通常在开发过程中以及第一次安装内核与根文件系统时被使用,此外,以后的系统更新也会用到Bootloader的这种工作模式 这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口,2008年6月24日,南京大学计算机系,64,Bootloader通信接口及协议,
31、两种通信方式串口通信常用的串口协议:XMODEM,YMODEM和ZMODEM以太网通信常用协议:TFTP,2008年6月24日,南京大学计算机系,65,Bootloader的程序结构与调试,Bootloader的实现依赖于CPU的体系结构,故大多数Bootloader都分为stage1和stage2两大部分 stage1的主要操作 基本的硬件初始化 为加载stage2准备RAM空间拷贝stage2的执行代码到RAM中设置栈区指针SP跳转到stage2的入口点,2008年6月24日,南京大学计算机系,66,Bootloader的程序结构与调试(续),stage2的主要操作初始化本阶段要使用的硬件
32、设备检测系统的内存映射Bootloader的调试交叉调试技术可分为硬件调试和源码软件调试,2008年6月24日,南京大学计算机系,67,Bootloader人机交互接口设计,通过串口实现。用户使用超级终端或minicom与目标板通信U-Boot是目前广泛使用的一个通用引导加载程序,2008年6月24日,南京大学计算机系,68,常用Booloader介绍,U-BootU-Boot全称Universal Bootloader,是德国DENX软件公司开发的,用于多种嵌入式CPU的Bootloader程序 U-Boot不仅支持嵌入式Linux系统的引导,还能支持NetBSD、VxWorks、QNX、R
33、TEMS、ARTOS、LynxO、Windows CE、QNX等嵌入式操作系统的引导,2008年6月24日,南京大学计算机系,69,常用Booloader介绍(续1),RedbootRedBoot,是基于eCos实时操作系统硬件抽象层实现的一个嵌入式系统的引导程序 支持的处理器也很多,包括PowerPC、MIPS、x86、ARM等,支持的操作系统主要有eCos和Linux RedBoot支持串口和网口下载嵌入式应用程序,包括嵌入式Linux和eCos的应用,2008年6月24日,南京大学计算机系,70,常用Booloader介绍(续2),ARMbootARMboot是针对ARM处理器编写的开源
34、固件套件ARMboot支持的处理器构架有StrongARM,ARM720T,PXA250等 ARMboot是GPL下的ARM固件项目中为数不多的多种功能嵌入式操作系统引导加载程序。它能够支持闪存,BOOTP、DHCP、TFTP网络下载,PCMCLA的CF卡引导等,2008年6月24日,南京大学计算机系,71,第18讲重点,实时系统的定义、特点和分类嵌入式操作系统特点和分类术语内核的内涵与外延抢占式内核微内核RTOS常用调度算法RMS算法DMS算法启动程序Bootloader两种Bootloader类型Bootloader程序结构常用的Bootloader介绍,2008年6月24日,南京大学计算
35、机系,72,第18讲复习题思考题,请列举出在你周围的典型实时系统,并说明它们的系统结构和特点。试分析教材第315页图9-2的非抢占式内核和抢占式内核的操作时序区别。中断服务子程序的执行对抢占式内核的任务调度有何影响?如何理解嵌入式操作系统的可配置性和可裁减性?它们是同一个术语吗?试比较它们的共同点和不同点。考察一些知名的嵌入式操作系统,试说明它们是属于单内核还是微内核,判断的依据又是什么?如果在嵌入式开发过程中遇到优先级反转问题,你认为应该如何处理,2008年6月24日,南京大学计算机系,73,第18讲复习题思考题(续),试阅读S3C44B0X实验平台上不含操作系统的Bootloader源代码,在理解的基础上绘制该启动代码的流程图。试阅读S3C44B0X实验平台上基于C/OS-II操作系统的Bootloader源代码,在理解的基础上绘制该启动代码的流程图。比较这两种Bootloader的不同之处。试列出你所知道的常用的Bootloader,并且比较它们的特点和适用范围。针对图9-10的火星探路者优先级反转案例,试编写一个基于C/OS-II操作系统的实验程序,该实验程序能够反映这种优先级反转的时序特点,而后考虑如何采取措施避免发生这种错误操作。,2008年6月24日,南京大学计算机系,74,第19讲结束,谢谢大家!欢迎各位读者提出宝贵的意见和建议!,
链接地址:https://www.31ppt.com/p-5395512.html