1.2k likes | 1.39k Views
嵌入式操作系统 . 陈天洲、陈文智. 实时性 简介. 对于什么是实时系统, POSIX 1003.b 作了这样的定义:指系统能够在限定的响应时间内提供所需水平的服务 实时系统根据其对于实时性要求的不同,可以分为软实时和硬实时两种类型 一个计算机系统为了提供对于实时性的支持,它的操作系统必须对于 CPU 和其他资源进行有效的调度和管理,即实时调度 . 实时调度分类.
E N D
嵌入式操作系统 陈天洲、陈文智
实时性简介 • 对于什么是实时系统,POSIX 1003.b作了这样的定义:指系统能够在限定的响应时间内提供所需水平的服务 • 实时系统根据其对于实时性要求的不同,可以分为软实时和硬实时两种类型 • 一个计算机系统为了提供对于实时性的支持,它的操作系统必须对于CPU和其他资源进行有效的调度和管理,即实时调度
实时调度分类 • 各种实时操作系统的实时调度算法从调度策略上可以分为如下三种类别:基于优先级的调度算法(Priority-driven scheduling-PD)、基于CPU使用比例的共享式的调度算法(Share-driven scheduling-SD)、以及基于时间的进程调度算法(Time-driven scheduling-TD) • 从调度方式上来讲可以分为:可抢占、不可抢占;从时间片来分:固定时间片、可变时间片
实时性改造 • 对操作系统实时性的扩展可以从两方面进行:向外扩展和向上扩展 • 向外扩展是从范围上扩展,让实时系统支持的范围更广,支持的设备更多 • 向上扩展是扩充操作系统内核,从功能上扩充系统的实时处理
Linux的实时性 • 一般的通用linux已经具备一定的实时性 • 但无法满足硬实时的要求 • 运行于linux内核空间的进程(核心态)不能被抢先 • 在linux中,中断有时候会出于保护临界区操作的目的而被屏蔽 • 通用linux的时间滴答长度为10ms(硬件时钟频率100HZ),但是这对于时间精度要求很高(微秒级)的实时进程来说是不够的
嵌入式Linux的实时性改造 • 可以引入一个双内核结构 • 对Linux内核代码作一些修改Linux本身的任务以及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务以Linux的内核模块(Loadable Kernel Module,LKM)的形式存在的 • 资源核方法:这种方法是为解决传统实时操作系统中固定优先级抢占式调度策略的局限性而产生的
Linux 2.6内核实时性分析 • 2.6中内核自身是可抢占的,它允许自身在执行任务时被打断 • 2.6版本的Linux内核使用了由 Ingo Molnar 开发的新的调度器算法,称为O(1)算法
RTLinux硬实时操作系统简介 • RTLinux是一硬实时操作系统 • 实现了一个微内核的小的实时操作系统,而将普通Linux系统作为一个该操作系统中的一个低优先级的任务来运行 • 普通Linux系统中的任务可以通过FIFO和实时任务进行通信 • 通过软件来模拟硬件的中断控制器 • RT-Linux通过将系统的实时时钟设置为单次触发状态,可以提供十几个微秒级的调度粒度
启动优化基本技术 • 一、固化各种不可扩展硬件的设置,尽量标准化可扩展设备的接口,节约设备检测时间。 • 二、Lazy Loading,也即不加载当前非必需的模块,这些模块可以在启动后待机时间内加载,或者在具体用到之后再加载,把启动时间打散,从而缩短对用户来说至关重要的反应时间(Responding Time)。 • 三、任务并行化,很多系统在启动任务时,是顺序执行,按部就班。为了减少启动时间,我们可以考虑任务的并行化,以减少启动时间的消耗。
嵌入式Linux启动过程分析 • 在内核运行之前需要系统引导程序(Bootloader)完成加载内核和一些辅助性的工作,然后跳转到内核代码的起始地址并执行。 • 整个arm linux内核的启动可分为三个阶段:第一阶段主要是进行cpu和体系结构的检查、cpu本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化
嵌入式Linux的启动优化 • 系统任务裁减 • 裁减不适合本系统的部分任务 • 系统任务并行 • 明确任务依赖关系 • 任务并行启动(make -j 工具的使用)
电源管理综述 • 现在Linux中,最主要的电源管理方案主要有三种:APM、ACPI、DPM • 传统的APM(Advanced Power Management)是一种基于bios的电源管理标准 • ACPI(Advanced Configuration and Power Interface),它主要是将电源管理的主要执行者由bios转换成为操作系统,这样可以提供更大的灵活性以及可扩展性
DPM简介 • DPM-Dynamic Power Management • 在面向Linux的DPM架构中,内核中的DPM子系统负责维持整个系统的电源状态 • 并把DPM系统的不同电源管理模块联系在一起。 • 可以把DPM看成是为驱动程序、中间件和应用程序提供服务的元素
存储管理 • 多程序模型 • 这是没有硬件地址转换的内存管理模型。即使没有硬件地址转换功能支持,多个程序也可以共享相同的物理地址 • 具有地址转换硬件的内存管理模型 • 应用程序使用的是虚拟地址,CPU实际执行程序所示用的是物理地址,从虚拟地址到物理地址的转换需要操作系统和MMU硬件的参与
高速缓冲(Cache)简介 • Buffer Cache • Page Cache • Swap Cache • Hardware Cache
虚拟存储功能 • 巨大的寻址空间 • 内存映射 • 公平的物理内存分配 • 共享虚拟内存
主存与辅存层次信息传送 • 页式虚拟存储器 • 段式虚拟存储器 • 段页式虚拟存储器
Linux存储管理 • Linux使用了上述第二种存储管理模型。 • 应用程序在标准Linux中的加载使用了“按需”分页的策略 • Linux 的内存管理采取的是分页机制 • Linux虚拟内存的实现,需要几种不同的机制来实现:地址映射机制、内存的分配与回收、请求页机制、交换机制、内存共享机制。
地址映射机制 • 地址映射机制,主要完成主存、辅存和虚存之间的关联 • Linux采用一系列的数据结构和一个硬件缓存(TLB)来实现地址映射机制 • Linux内核的映射机制被设计成三层,在页面目录和页表之间增设了一层“中间目录”
内存的分配与回收 • 最近被执行过的地址转换结果会被保留在MMU的转换后备缓存(TLB)中 • 页分配使用2的幂数大小的块 • Linux使用Buddy算法有效地分配和回收页块
Buddy算法 • 这个算法首先找它请求大小的内存页块 ,它跟踪free_area数据结构中的list单元队列中的空闲页的链表 • 如果找到的页块大于请求的页块,则该块将被分开成为合适大小的块 • 因为所有的块都是2的幂次的页数组成,所以这个分割的过程比较简单,你只需要将它平分就可以了。空闲的块则放到适当的队列,而分配的页块则返回给调用者。
μCLinux存储管理 • 其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术 • μCLinux仍采用存储器的分页管理,系统在启动时把实际存储器进行分页 • 没有MMU管理,所以实际上μCLinux采用实存储器管理策略(real memeory management) • μCLinux系统对于内存的访问是直接 • 一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中
嵌入式系统的文件系统管理 • 嵌入式系统的物理存储 • Flash存储器由于其安全性高,存储密度大,体积小,价格相对便宜,是嵌入式领域中最受欢迎的一类存储器 • 嵌入式系统中使用Flash存储器,通常有两种使用方式 • 只进行只读访问 • 在系统运行的时候既需要进行读操作,也需要进行写操作。
存储设备的管理方式 • 直接访问Flash • 自己编写Flash的驱动程序(即基本操作函数) • Flash Disk • 有些Flash存储设备上附带了控制电路,并且提供了IDE的接口。这些设备通常都是模拟了PC中的IDE之类设备的接口 • 专用于Flash的文件系统 • JFFS等文件系统,目前已经非常成熟,并有了成功的应用
嵌入式文件系统的类型 • RAMDISK • 在RAMDISK文件系统中,当系统启动的时候,会把外存中的映像文件加压缩到内存中,形成RAMDISK环境,便可以开始运行程序了。这种文件系统最大的问题就是,运行的程序的代码在内存和外存都占据了空间 • cramfs • cramfs也是一种压缩式的文件系统。但是它不是一次性地把所有内容都解压缩到内存中,而所需数据的位置,计算数据在cramfs的位置,然后把所需的部分解压缩到内存中,再通过访问内存来得到所需的数据。由于这个整个过程,包括内存中数据的位置都是由cramfs文件系统自己来维护。所以对开发人员是透明的,也节省了空间。 • romfs • romfs是一种只读文件系统,占用的系统资源也比较小。在romfs中,文件系统的管理代码占用的空间也比较小,但是romfs的文件访问权限和属主这些信息尚没有完全实现。此外,由于romfs文件系统是只读的,所以可以做得很小。
日志文件系统 • 在嵌入式设备断电可能性比一般的计算机的可能性要大 • 日志文件系统相对于普通文件系统,主要的变化就是增加了日志记录
JFFS与JFFS2文件系统 • 2000年Axis公司发布了他们开发的日志式Flash文件系统 • JFFS文件系统是开放源代码的文件系统,可以说是专门用于嵌入式Linux等系统的 • JFFS是直接在Flash设备上实现的文件系统 • JFFS2没有为Flash设备专门设计一个转换层来模拟普通的文件系统,而是直接对Flash进行操作
输入输出与设备管理概述 • I/O设备抽象 • I/O调度 • 缓冲技术 • 高速缓存 • 错误处理 • 性能与优化
I/O设备抽象 • 不同的I/O设备,它们的读写方式不尽相同 • 对于应用程序来说最好是所有的设备都可以通过一个相同的界面来进行读写操作 • 需要通过一套机制对某一类相似的I/O设备的具体操作细节进行封装 • 在操作系统中是通过设备驱动来实现的
操作系统内核 操作系统内核I/O子系统 软件 LCD驱动 触摸屏驱动 …… PCI bus驱动 LCD控制器 触摸屏控制器 …… PCI bus控制器 硬件 LCD 触摸屏 …… PCI bus I/O设备抽象层次结构
I/O调度 • I/O调度指的是对一组I/O请求进行安排,决定它们的执行顺序 • 操作系统一般会把对某个设备的I/O请求放入那个设备的请求队列中去 • 然后由I/O调度器对这些请求进行重新安排以改进系统的整体性能
缓冲技术 • 引入缓冲技术,主要有以下三个原因 : • 一、是协调数据产生设备(producer)和数据接收设备(consumer)的速度 • 二、是协调数据产生设备和数据接收设备的数据大小 • 三、是因为为了保证写入外设的数据的一致性,要先把数据转移到内核空间 • 在缓冲技术(Buffering)中,两个设备之间或者一个设备与一个应用程序之间需要传输数据时,这些数据会先保存在内存中,这个内存区域称为缓冲区
高速缓存 • 高速缓存(Caching)是指把低速存储器的部分数据保存在高速存储器中以提高系统性能的技术 • 缓冲技术跟缓存技术的区别:缓冲块中的数据是独一无二仅此一份的,而缓存中的数据是低速存储器中的数据的拷贝。
错误处理 • 使用保护内存 • I/O设备和传输操作在很多情况下都会发生错误,有的是暂时性的,有的是永久性的 • 操作系统的错误提示能力相对硬件设备来说一般都比较低 • 一个硬件设备可以提供非常丰富和详细的出错信息,但是操作系统往往会忽略其中的很多信息
/O性能对系统性能的影响 • 首先它需要CPU执行设备驱动程序,并对I/O请求进行调度 • 其次,I/O操作造成的程序执行上下文切换(context switch)也加重了CPU和缓存的负担 • 并且I/O是中断操作的主要组成部分,内核的中断处理性能稍有不足就会在I/O操作中暴露无遗 • 最后,I/O操作需要频繁的在设备控制器与内存、内存中用户空间与内核空间缓冲区之间拷贝数据
性能与优化 • 减少上下文切换次数。 • 减少数据在内存与设备之间复制的次数。 • 通过使用更大的数据传输单元、智能化的设备控制器和轮循(如果空等可以有效减少)等手段来减少中断次数。 • 把一部分I/O处理工作转移到硬件设备中去,使得外设能够跟CPU形成一定的并行处理,分担CPU的任务。 • 在CPU、存储器、总线和I/O之间平衡工作量。因为任何一部分的过载都会导致其余部分的等待,从而造成整体性能下降。
构件化操作系统 • 传统操作系统及视窗操作系统 • 因特网时代应用模型的演变 • 硬件设备即插即用 • 体系结构由固定变为灵活 • 浏览器成为统一的用户界面 • 操作系统对XML的支持 • 服务器-中间件-用户”编程模型 • 操作系统与虚拟机 • 基于中间件技术的嵌入式操作系统 • 基于中间件技术的操作系统的技术优势
传统操作系统及视窗操作系统 • 因特网时代以前的传统应用软件,大多是静态链接而成 • 由某一家公司提供,所有功能都集成在同一个软件中,一旦链接之后就不可能替换其中的软件模块 • 那时的操作系统有两大功能:首先它向用户提供一个分时系统;其次是向用户提供一组函数库
因特网时代应用模型的演变 • 程序作为动态构件自动加载运行,而不需要由用户去逐个启动。 • 构件支持脚本语言控制,多个构件可以相互操作,交换信息。 • 以浏览器为交互式操作界面,既便于有户掌握,又为程序开发提供了统一标准。 • 网络化资源管理,程序自动下载运行,不需要用户介入。
因特网时代应用模型的演变 来自不同软件开发商的软件模块动态组织起来运行
硬件设备即插即用 • 因特网时代要求硬件设备能即插即用 • 解决方案只能是在驱动程序对象中加入非执行的描述信息, • 这种描述信息就是通常所说的元数据(metadata),它可以“告诉”访问者它有哪些特性和功能。 • 元数据可以是XML形式、二进制或两者兼有。我们知道对象加上元数据就是构件。 • 操作系统可以根据构件中的元数据生成中间件。这种在内核里动态生成的中间件是连接驱动构件与用户程序的“桥梁”, • 而这"桥梁"是内核根据硬件设备的元数据动态生成的,此时的新型操作系统仍然是"以不变应万变"
体系结构由固定变为灵活 • 操作系统体系结构大致分为两种:大内核(Monolithic Kernel)和微内核(Micro Kernel) • 大内核操作系统将图形、设备驱动、文件系统等全部功能在操作系统内核中实现,运行在内核状态、同一地址空间。优点是减少进程间通信和状态切换的系统开销,获得较好的运行效率。缺点是内核庞大,占用资源多,剪裁不易,并且一旦个别驱动程序运行出错,就会导致整个系统崩溃,稳定性、安全性不好。 • 微内核在内核中只实现那些必须由内核实现的基本功能,而将图形、文件系统、设备驱动、通讯等功能放在内核之外,作为系统服务来提供相应的功能,这些程序在用户状态下运行。这样做的优点是有一个精炼的内核,便于剪裁、移植。
操作系统对XML的支持 • XML文本描述语言的广泛使用将是因特网时代操作系统的另一明显标志 • XML的每个标签(tag)都可以由用户定义 • XML兼顾了对于人的可读性和计算机的处理效率 • XML已经成了因特网信息交换的标准,未来的操作系统内核会对XML进行最有效的支持
操作系统与虚拟机 • 操作系统可以作为虚拟机,直接提供中间件的运行环境 • 操作系统可以对应用程序构件进行各种各样的控制,使得封装好的构件能够适应不同的运行环境和用户要求 • 操作系统利用中间件技术支持和控制应用程序的运行环境,就形成了因特网时代操作系统的关键技术