1、嵌入式系统概念:嵌入式计算机系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪,同时适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2、嵌入式系统的组成
3、嵌入式系统的特点
嵌入式系统发展至今,具备了许多与通用计算机不同的特点,主要包括以下五点:
因为嵌入式系统资源受限,一般不具备自主开发能力,产品发布后,用户通常不能对其中的软件进行修改,必须有一套专门的开发环境
该开发环境包括专门的开发工具(包括设计、编译、调试、测试等工具),采用交叉开发的方式进行。
1、嵌入式操作系统概念:顾名思义,用于嵌入式系统的操作系统。具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点。
2、嵌入式操作系统通常包括与硬件相关的底层驱动协议、系统内核、设备
驱动接口、通信协议、图形界面、标准化浏览器BrowSer等。
3、嵌入式操作系统的重要指标
4、嵌入式操作系统的特点:嵌入式操作系统(Embedded Operating System,简称EOS)是相对于一般操作系统而言的,它除了具备一般操作系统的最基本功能,如任务调度、同步机制、中断处理、文件功能外,还有以下特点:
5、EOS的分类
类别 | 描述 |
---|---|
商用型 | 系统功能稳定、可靠,有完善的技术支持,但价格昂贵,如VxWorks、WinCE等 |
免费型 | 价格方面有优势,主流的有嵌入式Linux、uCOS都是源码开放的商业EOS |
嵌入式微处理器体系结构:
传统的微处理器采用的冯·诺依曼结构
将指令和数据存放在同一存储空间中,统一编址,指令和数据通过同一总线访问。
哈佛结构
则是不同于冯·诺依曼结构的一种并行体系结构,其主要特点是程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编制、独立访问。与之相对应的是系统中设置的两条总线(程序总线和数据总线),从而使数据的吞吐率提高了一倍。
嵌入式微处理器分类:
1、软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。 其中:
2、嵌入式软件的特点:
3、嵌入式软件分类:
类别 | 描述 | 举例 |
---|---|---|
系统软件 | 控制、管理计算机系统资源 | 嵌入式操作系统、嵌入式中间件(Java、CORBA)等等 |
支撑软件 | 辅助软件开发的工具 | 系统分析设计工具、仿真开发工具、交叉开发工具等 |
应用软件 | 面向应用领域 | 手机软件、交换机软件、路由器软件等 |
1、操作系统定义:操作系统是用以控制和管理计算机硬件和软件资源、合理地组织计算机的工作流程以及方便用户使用计算机的程序的集合。
2、操作系统的功能:操作系统的基本功能包括:
3、操作系统的根本目标:实现系统资源的最大吞吐率,使用户充分、有效的利用系统资源。
1、μC/OS-II是一种专门为嵌入式设备设计的,基于优先级的可抢先式的硬实时EOS内核。
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
2、μC/OS-II特点:
3、实时系统:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失败。
4、一个实时操作系统面对变化的负载时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!
5、硬实时:硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。
6、软实时:软实时系统就是那些从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误。
7、μC/OS-II的内核功能:
8、任务的定义:任务是一个具有独立功能的无限循环的程序段的一次运行活动。任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。
9、EOS任务的特性:
程序:程序(program)是一组指令的有序集合。
进程:进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。
线程:线程(tread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。
10、任务的内容:
11、任务参数
11.1 任务的优先级
(1)任务对应工作内容在处理上的优先程度
(2)优先级越高,表明任务越需要得到优先处理
(3)任务的优先级分为静态优先级和动态优先级:
11.2 任务周期:周期任务所具有的参数,表示任务周期性执行的间隔时间
11.3 任务的计算时间:任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)。
11.4 就绪时间:任务具备了在处理器上被执行所需要条件时的时间
11.5 截止时间:任务需要在该时间到来之前被执行完成
12、任务的状态与变迁
任务拥有的资源情况发生变化导致任务状态发生改变。
补充:
空闲任务定义:
统计任务使用OSIdleCtr来确定应用程序软件实际消耗的CPU时间(百分比)
13、任务管理:任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的。
14、任务控制块:任务控制块是包含任务相关信息的数据结构,包含了任务执行过程中所需要的所有信息
15、任务管理机制
补充:关于任务扩展:
任务扩展表用来存放实现任务扩展处理的例程,实时内核通过查找任务扩展表来获取扩展处理的入口函数。
通过创建任务扩展表,把任务扩展例程添加到系统中去;通过删除任务扩展表则可把任务扩展例程删除掉。
16、任务调度
1)任务队列:由任务控制块组成
单等待队列:
多等待队列:
2)任务调度-优先级位图算法:优先级位图算法详解
3)任务切换时机:
4)任务切换基本步骤:
16、任务调度
17、调度算法:在一个特定时刻用来确定将要运行的任务的一组规则
18、离线调度和在线调度:根据获得调度信息的时机。
19、抢占式调度和非抢占式调度:任务在运行过程中能否被打断的处理情况。
20、内核的可抢占性
不可抢占内核:
可抢占内核:
21、静态和动态调度
22、基于优先级的可抢占调度方式:如果出现具有更高优先级
的任务处于就绪状态时,当前任务将停止运行,把CPU的控制权交给具有更高优先级的任务,使更高优先级的任务得到执行。
23、时间片轮转调度:当有两个或多个就绪任务具有相同的优先级,且它们是就绪任务中优先级最高的任务时,任务调度程序按照这组任务就绪的先后次序调度第一个任务,让第一个任务运行一段时间,然后又调度第二个任务,让第二个任务又运行一段时间,依次类推,到该组最后一个任务也得以运行一段时间后,接下来又让第一个任务运行。任务运行的这段时间称为时间片
24、小结:
调度用来确定多任务环境下任务执行的
顺序
和在获得CPU资源后能够执行的时间长度
。
操作系统通过一个调度程序
来实现调度功能。调度本身需要一定的系统开销,需要花费时间来计算下一个可被执行的任务。
调度程序的设计需要优先考虑最重要的需求,然后在各种因素之间进行折衷处理
。
常用的任务调度算法有基于优先级的可抢占调度
和时间片轮转调度算法
。
25、优先级反转(Priority Inversion):高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象。
优先级反转和“死锁”的区别?
优先级反转是高优先级的任务在特定的时间内得不到响应(打破实时性)
“死锁”是(无外界干涉的情况下)永远的阻塞
26、动态优先级
为EOS解决优先级反转问题提供了思路,解决优先级反转现象的常用协议为: 优先级继承协议
、优先级天花板协议
。
27、优先级继承协议基本思想:
28、优先级继承协议特点:
29、优先级继承协议优缺点:
30、优先级继承协议——死锁:
假定在时刻t1,任务T2获得信号量S2,进入临界区。在时刻t3,任务T2又试图获得信号量S1,但一个高优先级任务T1在这个时候就绪,抢占任务T2并获得信号量S1,接下来任务T1又试图获得信号量S2。这样就出现了死锁现象
。
31、优先级继承协议——阻塞链:
任务T3在S1控制的临界区中被T2抢占,然后T2进入S2控制的临界区。这个时候,任务T1被激活而获得CPU资源,发现信号量S1和S2都分别被低优先级任务T2和T3加锁,使得T1将被阻塞两个临界区,需要先等待任务T3释放信号量S1,然后等待任务T2释放信号量S2,这样就形成了关于任务T1的阻塞链
。
32、优先级天花板协议
33、优先级天花板协议的主要处理内容:
34、信号量分类:互斥信号量、二值信号量、计数信号量
35、任务间的通信方式分类:
36、系统调用
:是操作系统提供给用户程序调用的一组特殊接口
。用户程序可以通过这组特殊接口来获得操作系统内核提供的服务。
37、用户编程接口
:遵循了在Unix世界中最流行的应用编程界面标准——POSIX标准,这套标准定义了一系列API。
38、系统命令
:系统命令相对编程接口更高了一层,它是内部引用API的可执行程序,如常用的系统命令ls、hostname等。
39、内核函数
其实它们和普通函数很像,只不过在内核实现,因此要满足一些内核编程的要求。
40、关系:
并非直接和程序员或系统管理员打交道
,它仅仅是一个通过软中断机制向内核提交请求
,获取内核服务的接口
。程序员调用的多是用户编程接口——API
,而管理员使用的则多是系统命令。用户编程接口其实是函数定义
,说明了如何获得一个给定的服务,比如read()、abs()等。内核函数
其实它们和普通函数很像,只不过在内核实现
,因此要满足一些内核编程的要求。Linux编程部分就省了,熟悉一下命令、shell编程就可以啦…
点个赞吧,祝大家考个好成绩!!!