第1章 实时操作系统基础(g)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.5 同步和通信 1.5.1 同步
任务是独立的,但是任务之间又有着各种各样的 关系,以成为一个整体,来完成某一项工作。有时候一 个任务完成的前提是需要另一个任务给出一个结果,任 务之间的这种制约性的合作运行机制叫做任务间的同步。 例如,A任务实现计算功能,B任务输出A任务计 算的结果,然后循环运行。A任务和B任务就必须同步, 否则B任务输出的可能不是A任务刚完成的结果,或则B 任务访问结果时,A任务正在修改,因而输出错误的结 果。A和B就是必须进行同步的任务。
1.2 实时操作系统概述
1.2.1 什么是实时操作系统 实时操作系统RTOS(Real Time Operating System)是 指当外界事件或数据产生时,能够接收并以足够快的速 度予以处理,其处理的结果又能在规定的时间之内来控 制生产过程或对处理系统作出快速响应,并控制所有实 时任务协调一致运行的操作系统。
任务的一个例子
void usertask(void *pParam) { INT8U i=0; for(;;){ printf("%d\n",i); i++; OSTimeDly(100); } }
见识一下RTOS中的任务
1.3.2 多任务
实时操作系统的是多任务的操作系统,系统中必然有多 任务在执行。 任务的种类: 用户任务,如前面的usertask; 系统任务,如空闲任务和统计任务。 多任务的的优点: 可以大大提高CPU的利用率; 使应用程序分成多个程序模块,实现模块化,应用程 序更易于设计和维护。
如下两个任务分别同时调用上述函数运行的结果是什么?
void usertask1(void *pParam) { int sum; for(;;){ sum=add2(1,2); printf("\ntask%d call add2(1,2) solution is %d\n",1,sum); } } void usertask2(void *pParam) { int sum; for(;;){ sum=add2(100,200); printf("\ntask%d call add2(100,200) solution is %d\n",2,sum); } }
在μC/OS-II中,可以同时有64个就绪任务,每个任 务都有各自的优先级。 优先级用无符号整数来表示,从0到63,数字越大 则优先级越低。 μC/OS总是调度就绪了的,优先级最高的任务获得 CPU的控制权,不管这个任务是什么,执行什么样 的功能,也不管该任务是否已经等了很久。
1.4.3 不可剥夺和可剥夺内核(抢占优先级的问题)
在操作系统移植的时候,任务切换代码就是必须要实现 的部分之一。 (移植最为困难的部分)
1.3.5 可重入和不可重入函数
函数可重入是指一个函数可以被多个任务调用,而不需要担心 在任务切换的过程中,代码的执行会产生错误的结果。 如果函数被多个任务调用,可能产生错误的结果,就是重入函 数。
int a,b; int add1(int *p1,int *p2) { int a,b; a=*p1; b=*p2; OSTimeDly(OS_TICKS_PER_SEC); c=a+b; return(c); } int add2(int p1,int p2) { //int a,b; a=p1; b=p2; OSTimeDly(OS_TICKS_PER_SEC); c=a+b; return(c); }
嵌入式实时操作系统 μC/OS原理与实践
教材和参考书籍
教材 :
卢有亮,嵌入式实时操作系统μC/OS分析与实践(第2版),
电子工业出版社 参考书籍:
(1)Jean J. Labrosse著,邵贝贝译,嵌入式实时操作系统μC/OS-II (第2版),北航出版社
(2)JeanFra Baidu bibliotekJ. Labrosse著,邵贝贝译,嵌入式实时操作系统μC/OS-III (第3版),北航出版社
挂起态
1.3.4 任务切换
任务切换就是context switch,是任务调度的重要部分。 从字面上是上下文切换。任务切换是暂停一个任务的运 行,运行另一个就绪的任务。暂停一个任务,以后又能 恢复运行,必须考虑将这个任务运行的信息保存,而恢 复运行的时候需要将这些信息恢复到运行环境。 任务切换必须做环境的保存和恢复的操作。
实时系统与非实时系统的本质 区别就在于实时系统中的任务 都有时间限制。
1.2 实时操作系统概述
1.2.1实时操作系统基本特征
1.实时操作系统首先是多任务操作系统。
2.多级中断机制。 3.优先级调度机制。
1.3 任务 1.3.1 任务的概念
任务是程序的动态表现,在操作系统中体现为线程,是 程序的一次执行过程。 程序是静止的,存在于ROM、硬盘等外部设备。任务 是运动的,存在于内存中,有睡眠、就绪、运行、阻 塞、挂起等多种状态。 相同的程序的多次执行是可以的,就形成了多个优先 级不同的任务,每一个都是独立的。 在实时系统中,把应用程序的设计过程分割为多个任 务,每个任务都有自己的优先级,在操作系统的调度 下协调运行。
1.5.2 互斥
前面的例子中,A和B两个任务都要访问计算结果这个 共享,但是在A写这个资源的同时,B必须等待,而不 能在A写到一半的时候结束A而让B来读,这样会产生 灾难性的后果。 这样的共享资源称为临界资源(Critical Resource)。 这种访问共享资源的排他性就是互斥。 资源的特征:占用性
(3)任哲,嵌入式实时操作系统μC/OS-II原理及应用,北航出版社
网上学习参考
教材作者讨论群 :
教材作者网上授课视频:
在网上观看视频(土豆、优酷) http://www.tudou.com/playlist/id/15295771/
章节介绍
第一章 操作系统和嵌入式实时操作系统的基本 原理。 第二章 任务管理,是基本内容,需要对数据结 构和源代码仔细体会。 第三章 时间和中断管理,时间管理包括一些函 数,中断管理主要是中断的流程。 第四章、第五章 事件和消息部分,包含了各种 事件和消息机制。 第六章 内存管理。
1.5.3 临界区
每个任务中访问共享资源的那段程序称为临界区(Critical Section),因为共享资源的访问是要互斥的。在临界区不 允许任务切换, 这是最根本的原则。因为如果在访问共享 资源的时候进行任务切换,就可能发生前面提到的灾难性后 果。因此,在进入临界区访问共享资源之前,采用关中断, 给调度器上锁或使用信号量的方法,达到互斥的目的。
看看两个任务执行的情况
创建任务 运行结果
2
1.3.3 任务的状态
5
1.睡眠态 删除任务 任务已经被装入内存了,可是并没有准备好运行。例如上面给出的 阻塞态 2.就绪态 事件等待 usertask代码,以代码的形式存在于内存中,在调用 等待的事件发生 当操作系统调用 OSTaskCreate创建一任务后,任务就进入就绪态。 3. 运行态 OSTaskCreate (任务创建函数)创建之前,处于睡眠态。睡眠态 从图 1.4还可以看出,任务也可以从其他状态转到就绪态。处于就 任务真正占有 CPU,得到运行。这时运行的代码就是任务的代码。 的任务不会得到运行的,操作系统也不会给其设置为运行而准备的 4. 阻塞 绪态的任务操作系统已经为其运行配置好了任务控制块等数据结构, 如 usertask。处于运行态的任务如果运行完成,就会转为睡眠态。 数据结构。 阻塞对于操作系统的调度,任务的协调运行是非常重要的。我们能 当没有比其更高优先级的任务,或比其优先级更高的任务处于阻塞 5. 挂起态 如果有更高优先级的任务抢占了 CPU,就会转到就绪态。如果因 看到图 1.3 的运行结果,而不是只有一个高优先级的任务得到运行, 状态的时候,就能被操作系统调度而进入运行态。从就绪态到运行 当任务在运行时,因为中断的发生,例如定时器中断每个时钟滴答 为等待某一事件,例如等待一秒钟的时间,如 就是因为 usertask 在没有事情可做,等待一秒钟的时候,不是强 态,操作系统调用任务切换函数完成。 创建任务 中断 任务切换 ( clock tick, 指每个时钟周期)中断一次,而被剥夺 CPU 的使用权, OSTimeDly(OS_TICKS_PER_SEC) ,需要暂时放弃 CPU 的使用 睡眠态 就绪态 运行态 行运行代码,而是把自己阻塞起来,使操作系统可以调度其他的任 返回 而进入挂起态。在中断返回的时候,若该任务还是最高优先级的, 权而让其他任务得以运行,就进入了阻塞状态。当由于中断的到来 删除任务 任务切换 (仍为最高优先级) 务。 就恢复运行,如果不是这样,只能回到就绪态。 而使CPU进入中断服务程序(ISR),必然使正在运行的任务放弃 当任务在等待某些还没有被释放的资源,等待一定的时间等时候, CPU而转入中断服务程序,这时被中断的程序就被挂起而进入挂 删除任务 要阻塞起来,等到条件满足的时候再重新回到就绪态,又能被操作 返回 起态。 系统调度以进入运行态,这是实时系统必须要实现的功能之一。 (不是最高优先级) 总之,任务要得到运行必须进入运行态,CPU只有一个不能让每 一些不理解操作系统的同学在编程的时候,在等待的时候常常使用 个任务同时进入运行态,进入运行态的任务有且只有一个。 FOR循环,不停的执行代码而使CPU的利用率暴增,使系统的运 行环境十分恶劣,甚至造成死机,是不可取的
int function(void) { OS_ENTER_CRITICAL; //访问临界资源 OS_EXIT_CRITICAL; //其它程序代码 }
1.4 内核 1.4.1 内核
内核是操作系统最核心的部分,其主要功能就是进 行任务调度。 所谓调度,就是决定多任务的运行状态,哪个任务 应该处于图1.4中的哪种状态。 内核中最最核心的基本服务就是调度的核心——任 务切换 μC/OS使用的是一种基于优先级的可剥夺型内核。
1.4.2 基于优先级的调度算法
第1章 实时操作系统基础
1.1 操作系统概述 1.2 实时操作系统概述 1.3 任务 1.4 基于优先级的不可剥夺内核 1.5 同步与通信
1.1 操作系统概述
1.1.1 什么是操作系统
操作系统OS(Operating System) 是裸机上的第一层软件。 操作系统是计算机系统中最重 要的系统软件,是硬件的第一 层封装与抽象,在计算机系统 中占据着重要的地位,所有其 他的系统软件与应用软件都依 赖于操作系统的支持与服务。 除提供编程接口,操作系统还 承担着任务管理、事件管理和 消息通信、CPU管理、内存管 理、IO管理等核心功能。
1.1 操作系统概述
1.任务管理 2.CPU管理 3.内存管理 4.文件管理 5.IO设备管理
1.1.2 操作系统基本功能
5 任务是程序的一次执行。任务可以 分为系统任务和用户任务。系统任 CPU管理的含义在于多任务OS对 务是操作系统本身的任务,如操作 CPU 的分配,也就是分配对CPU 内存是任务的生存空间。内存管理 系统的主程序,时钟中断服务程序, 的所有权,简单说,哪个软件正在 用于给任务分配内存空间,相应的, 文件管理系统是实现对文件的统一 如后面要讲到的空闲任务和统计任 运行,占有 CPU。可以把它归入 在任务结束后释放内存空间。 管理,是对文件存储器的存储空间 务等。用户任务是用户应用程序的 管理系统中的各种硬件设备,如打 任务管理。 进行组织,分配和回收,负责文件 运行,如用户设计的计算器软件的 印机,显示器,硬盘等。很明显, 的存储,检索,共享和保护。从用 一次执行或 WORD软件的运行, 用户应用程序应该调用 IO设备管理 户角度来看,文件系统主要是实现 如本书中给出的一些用户任务。这 模块提供的API来对设备进行操作, " 按名取存",文件系统的用户只要 些任务都需要任务管理部分来管 而不是直接读写硬件。 知道所需文件的文件名,就可存取 理。。 文件中的信息,而无需知道这些文 件究竟存放在什么地方。