浙江大学嵌入式课件-嵌入式系统_第1页
浙江大学嵌入式课件-嵌入式系统_第2页
浙江大学嵌入式课件-嵌入式系统_第3页
浙江大学嵌入式课件-嵌入式系统_第4页
浙江大学嵌入式课件-嵌入式系统_第5页
已阅读5页,还剩210页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课件,1,嵌入式系统软件,课件,2,1. 嵌入式操作系统,嵌入式操作系统是个集合,而且是个无限集合 监控程序常规操作系统 (红外线 紫外线) 一维和多维,课件,3,嵌入式操作系统常常有实时要求 早期:嵌入式操作系统 = 实时操作系统 近期: 1)手持计算机和掌上计算机的出现; 2)CPU速度的提高; 3)常规操作系统增加实时进程调度的支持,如POSIX.4 嵌入式操作系统 实时操作系统,课件,4,许多嵌入式操作系统的内核是微内核结构 许多嵌入式操作系统都不带磁盘 根本不支持文件系统 结构上为了设备驱动而支持文件系统,但不支持文件系统的文件存储功能,课件,5,许多嵌入式操作系统不采用存储管理技术

2、,即不支持虚拟存储技术 许多嵌入式操作系统不划分“系统空间”和“用户空间” 操作系统的“内核”与外围应用程序之间不再有物理的边界; 系统中所谓“进程”实际上全都是内核线程 静态连接、系统调用、进程调度/切换,课件,6,对任何一个应用程序做细微的修改,都得重新生成整个系统,并且“下载”之; 系统调用的界面太庞大; 共享变量的访问,需要谨慎对待; 把通用操作系统上的应用移植过来需考虑“可重入”的问题;,课件,7,不分系统空间和用户空间 必须静态连接 如DOS、CP/M的INT21 不分系统空间和用户空间 不能用页面映射技术 但只用于不同进程之间,而非不同空间之间 即使采用了存储管理,基本上都不采用

3、页面交换技术 重启动技术(watch dog),课件,8,2. RTOS,是否实时 一方面是多大程度上充分发挥硬件潜力,即综合速度快慢的问题; 另一方面同时也是反映的速度在多大的程度上得到保证的问题,课件,9,中断延迟(Interrupt Latency) 中断不可嵌套 LINUX的Bottom Half 中断可嵌套:优先级中断 大多微处理器不支持; LINUX不支持; UNIX支持 与指令集有关 DMA操作有关 保证系统调用的原子性有关,课件,10,调度延迟(Scheduling Latency) 中断处理程序 进程处理 一般调度算法(Round Robin)不能及时选中 基于优先级调度算法

4、,一般能及时选中 如果目标进程优先级低呢? 可剥夺调度和不可剥夺调度 LINUX是属于什么调度?,Linux既不是完全的可剥夺,也不是完全的不可剥夺,课件,11,上下文切换延迟(Context Switch Latency) 大小取决于CPU和操作系统 采用MMU 不采用MMU,课件,12,只要发生调度,就能选中目标进程吗? 根据时间片的耗用调整优先级 拉开距离,分等级 对实时进程而言,“应该没有问题”不够。 是否可以不用中断、也不用调度,回到最简单的“监控程序” ?,课件,13,实时性简介,对于什么是实时系统,POSIX 1003.b作了这样的定义:指系统能够在限定的响应时间内提供所需水平的

5、服务 实时系统根据其对于实时性要求的不同,可以分为软实时和硬实时两种类型 一个计算机系统为了提供对于实时性的支持,它的操作系统必须对于CPU和其他资源进行有效的调度和管理,即实时调度,课件,14,实时调度分类,各种实时操作系统的实时调度算法从调度策略上可以分为如下三种类别:基于优先级的调度算法(Priority-driven scheduling-PD)、基于CPU使用比例的共享式的调度算法(Share-driven scheduling-SD)、以及基于时间的进程调度算法(Time-driven scheduling-TD) 从调度方式上来讲可以分为:可抢占、不可抢占;从时间片来分:固定时间

6、片、可变时间片,课件,15,实时性改造,对操作系统实时性的扩展可以从两方面进行:向外扩展和向上扩展 向外扩展是从范围上扩展,让实时系统支持的范围更广,支持的设备更多 向上扩展是扩充操作系统内核,从功能上扩充系统的实时处理,课件,16,实时多任务OSRTOS,单片机 无os 主程序 RTOS 资源包装 API 可移植(只要14%),课件,17,实时系统,在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间 响应时间限定 可预知,课件,18,实时操作系统与I/O,实时操作系统还需要有效的中断处理能力来处理异步事件和高效的I/O能力来处理有严格时间限制的数据收发应用。就是:

7、系统应该有在事先定义的时间范围内识别和处理离散的事件的能力。 系统能够处理和存储控制系统所需要的大量的数据。,课件,19,周期性的系统 非周期性系统 硬实时系统 灾难后果 软实时系统 性能下降,课件,20,RTOS与分时系统,事件响应时间限定 事件随机到达 系统可确定性,课件,21,Rtos的历史,1)早早期的监控系统 系统init 时钟 简单的任务调度 2)专用实时OS 依赖于特定硬件 移植性不好 3)通用RTOS,课件,22,嵌入式软件开发平台,RTOS 标准化 可移植 设备独立,课件,23,RTOS基本struct,实时多任务core 任务管理:多任务和基于优先级的任务调度 定时器:系统

8、的实时时钟服务,以及各个定时任务的调入等 Mem:管理系统的内存资源,如DRAM,ROM,FLASHRAM等 资源管理:管理系统的各种资源如系统的各种设备,端口,中断等; 事件和消息管理:管理各种系统级的事件,如实时中断响应,各种异常等;任务间同步和通信(信号量和邮箱等)以及各种系统消息和应用程序之间的通讯,课件,24,RTOS的系统调用 90%以上的设备独立 RTOS的任务分时系统Process,课件,25,实时带来的问题1-时间,在实时系统中最基本的是系统应该能够提供对时间正确性进行指定的方法 系统提供一种指定时间尺度的方法 通用系统的延时不能满足,课件,26,问题2实时系统的结构,实时系

9、统的体系结构必须满足: 高运算速度 高速的中断处理 高的I/O吞吐率 合理的处理器和I/O设备的拓扑连接 高速可靠的和有时间约束的通信 体系结构支持的出错处理, 体系结构支持的调度 体系结构支持的操作系统, 体系结构支持的实时语言特性。,课件,27,问题3容错与分布,稳定性 容错 分布式应用,课件,28,问题4实时通讯,逻辑正确 要有确定的延迟时间,课件,29,问题5其他问题,时间特性的指定和确正,这点与实际系统设计相同。 实时的调度理论。由于实时系统应用的特殊性以往通用系统中以大吞吐量为目标的调度算法必须改进以适应实时应用的需要。主要要求是满足时间的正确性,然后提供高度动态的,满足在线需求的

10、,适应性的实时调度。 实时操作系统的设计和实现。在设计上首要目标是提供保证实时性的方法,包括一系列的经典问题的针对实时系统的解决方案。实现上要求操作系统的低开销,而且必须保证内核以及其他关键的可重入性。,课件,30,实时的编程语言和设计方法。在编程语言级完成或提供实时应用所需要的方法。 比如象Ada语言,FORTH语言。 分布式的实时数据库。 系统的容错。 实时时钟的同步。 实时系统中的人工智能,课件,31,与通用计算机区别,通用: 方便用户管理计算机资源 追求系统资源最大利用率 RTOS 调度的实时性 响应时间可确定性 高可靠性,课件,32,性能衡量标准,对传统的通用系统: 大的系统吞吐量

11、合理的响应速度 对每个系统用户相对公平的进行计算资源的分配 实时系统 实时的数据吞吐取代了以吞吐量为目标的标准。 对硬实时应用的优先响应取代了对每个用户的恰当的反应速度。 系统的计算资源和其他外设资源必须优先满足实时应用的要求,课件,33,RTOS的衡量指标,系统响应时间(System response time ):系统发出处理要求到系统给出应答信号的时间; 任务切换时间(Context-switching time):任务之间切换而使用的时间; 中断延迟(Interrupt latency time ) :是计算机接收到中断信号到操作系统作出响应,并完成换道转入中断服务程序的时间;,课件,

12、34,RTOS的任务调度机制,决定了多任务能力与实时性 通用模式: 调度策略:优先级调度、时间片轮转调度 调度方式:抢占式、不可抢占式、选择可抢占式 时间片:定长时间片与变长时间片 RTOS一般使用抢占式任务调度,课件,35,时间限定的任务调度算法,速度单调算法 工作由定期任务组织 任务时间定长度 使用频率高的优先级高 时限驱动算法 工作定期与不定期 执行时长随着时间变化 下一个要安排执行的任务是时限最早的任务,课件,36,MMU 实模式 保护模式,Mem管理,课件,37,最小mem开销,Price 256K RAM 4M 32M RAM,课件,38,中断禁止时间,用户态中断态,课件,39,中

13、断延时时间,确认中断-中断服务第一语句执行 三部分 Microprocessor 的硬件延时 RTOS由中断将权利交给相关代码的时间 中断禁止时间,课件,40,可中断式内核,中断发生时;即使运行核心服务也保证一定时间内响应 缩短中断延时时间,课件,41,任务切换时间,控制权取回 交给另外一任务,课件,42,两个主要评价实时性的指标:,最大中断禁止时间任务切换时间,课件,43,任务,分时系统以进程(线程)为基本单位 RTOS以任务为基本单位 组成: 任务控制块 程序区 数据区 堆栈区 系统堆栈 用户堆栈,课件,44,任务的状态,运行 就绪 挂起 休眠,课件,45,任务的同步与通讯,消息 事件 信

14、号量 信箱 共享内存,课件,46,消息,系统公用数据交换区 私有消息缓冲区 公用消息缓冲池 消息机制 创建 删除 接受消息 发送消息 广播消息 紧急消息 消息可以是定长与不定长,课件,47,事件,应用于同步,通讯数据量不大 接受事件 发送事件 RTOS一般有1532个事件,课件,48,信号量,创建 删除 P操作 V操作 RTOS需要解决优先级倒置问题,课件,49,优先级倒置问题,条件 高优先级任务H 低优先级任务L 中优先级任务M 共享内存Y,写操作 信号量S,互斥 步骤 1)L取得S(P操作),但是未做V操作 2)H中断,H运行态 3)H写Y,但是Y的S被占用,课件,50,4)L重新取得控制

15、权 5)M出现,取得控制权 结果: M比H优先如果不断的M出现,H不能执行,课件,51,解决方法,1、采用非抢占式任务管理 2、优先级继承 L抢回控制权后,暂时继承H的优先级 (priority inheritance) 设S为正占用着某项共享资源的进程P以及所有正在等待占用这个资源的进程的集合; 找出这个集合中的优先级最高者,其优先级为P 把进程P的优先级设置成P,课件,52,优先级封顶(priority ceiling) 设S为所有可能竞争使用某项共享资源的进程的集合。事先为这个集合规定一个优先级上限p,使得这个集合中所有进程的优先级都小于p。注意p并不一定是整个系统中的最好优先级。 在创

16、建保护该项资源的信号量或互斥量时,将p作为一个参数。 每当有进程通过这个信号量或互斥量取得共享资源时,就将此进程的优先级暂时提高到p,一直到释放该项资源的时候才恢复其原有的优先级。,课件,53,可以看出,操作系统的“实时”与否,并不仅仅取决于速度问题,甚至更多的是反应速度和处理时间的可预测性问题。,课件,54,实时操作系统和通用操作系统区别,对于通用操作系统,总体的效率是更高的目标,必要时宁可牺牲个别进程的反应速度来达到总体效率的提高;而实时操作系统却反过来,必要时宁可牺牲总体效率也要保证个别进程的反应速度。 对于通用操作系统,公正性更为重要,必要时宁可“劫富济贫”。而实时操作系统,高优先级进

17、程的运行更为重要,必要时宁可“劫贫济富”,课件,55,对于通用操作系统,性能的分析是统计分析、平均值分析。而实时操作系统性能分析则是“最坏情况”分析。 通用操作系统充分利用CPU处理能力,而实时操作系统有意让CPU处理能力供过于求,以确保反应速度和任务的完成。,课件,56,3. 微内核与单内核,分层模拟 通用计算机需要“大而全”的内核 你不需要,别人可能需要 当局限于某个具体领域时,做些“裁减” 嵌入式系统的用户群以及对功能的要求是相对封闭的 商业上考虑,大而全也不合适,课件,57,“裁减”或“系统生成”没有根本上解决问题 将内核中的部分内容移到内核外面,作为服务进程运行。 代表:MACH 把

18、内核中的部分内容移到外面,但不作为独立的进程运行,而是作为让应用程序调用的库函数存在。 fopen与open socket,课件,58,在微内核中保留哪些东西? 进程管理 存储管理 进程间通信 中断响应框架,课件,59,微内核的优先级倒置问题,有A、B两个应用程序,A的优先级比B高,但是A在睡眠,而B在运行。 B需要进行文件操作,发请求给文件服务进程,自己进入睡眠,等待文件操作完成 本来在睡眠的文件服务进程接受到B的请求后开始为B服务。 此时A因某外部事件而变成就绪。 发生调度时,A与文件服务进程都是就绪状态。文件服务进程由于优先级高而更为优先。可是文件服务进程代表的是B,因此发生优先级倒置。

19、,课件,60,以上问题的解决办法是采用“客户驱动优先级”,但是对于LINUX等操作系统,由于是不可剥夺的,因此天生不可解决。,课件,61,A B C ,C正在运行 C需要文件操作,发请求给文件服务进程,进入睡眠,等待文件操作完成。 文件服务进程开始为C服务,并将优先级设成与C相同。 此时A被外部时间唤醒,也需要文件操作,发请求,进入睡眠。 A的请求在文件服务进程的等待队列中。发生优先级倒置。,课件,62,B由于外部事件变成就绪 由于B C,B会被调度。 对于C是合理的,但是对于A,太不公平。 如果还有B1,B2,B3,B4,噢。,课件,63,微内核的优点,小而且简单,容易理解,容易维护 各模块

20、可以独立开发 系统配置灵活方便,课件,64,微内核的缺点,效率降低 安全降低 Minux的作者Andy Tanenbaum:“Only because the brain-dead nature of the Intel CPUs makes that difficult to do otherwise”,课件,65,单一内核的努力: 可安装模块,课件,66,4 常用的商品嵌入式操作系统,License CE的源代码,课件,67,VxWorks,美国WindRiver 统一空间 函数接口多(3000多) 是UNIX的远房变种,但区别也很大 为不带MMU的处理器设计的,当然允许可选 可剥夺调度

21、采用优先级继承方法解决倒置问题 支持消息、信号、管道等进程间通信 支持POSIX 网络支持很全面 新版本:VxWorks AE,分离空间,课件,68,QNX,加拿大QNX Software System公司 类似于MACH 进程管理、文件系统管理、设备管理、网络管理都在内核之外 符合POSIX 采用消息作为进程间通信 可剥夺 GUI类似于X WINDOWS 支持网络和分布式计算,课件,69,pSOS,原美国Integrated System公司产品,现被WindRiver收购 接近单一内核的微内核系统 文件系统移到内核外 采用优先级继承和优先级封顶技术 存储管理可以根据需要舍取 消息和事件作为

22、进程间通信 设备驱动留在内核中 Socket提供网络接口,课件,70,Windows CE,Microsoft公司的产品 微内核,可剥夺 采用页式存储管理,页面换入技术(可以锁定) 内核映像既可以在ROM中,也可以在RAM中运行 动态连接DLL 中断处理分ISR与IST,不支持嵌套 设备驱动也分两层 Winsock提供网络接口 GUI丰富,课件,71,5 开源的嵌入式操作系统,公开源码 不是商品,课件,72,C/OS,课件,73,MACH,Carnegie Mellon University RT-MACH,课件,74,RTLINUX,New Mexico Tech的Victor Yodaik

23、en等人研制 变种: RTAI ADEOS,课件,75,KURT,Linux的变种,Kansas University 时钟精度提高 增加一些系统调用 增加针对硬实时进程的调度策略,课件,76,ARM-LINUX,课件,77,Preempt Linux,Robert M. Love 针对LINUX的不可剥夺调度 2001年RML补丁,课件,78,TimeSys Linux,美国公司,原致力于MACH,现转向linux,课件,79,6 因特网时代应用模型的演变,程序作为动态构件自动加载运行,而不需要由用户去逐个启动。 构件支持脚本语言控制,多个构件可以相互操作,交换信息。 以浏览器为交互式操作界

24、面,既便于有户掌握,又为程序开发提供了统一标准。 网络化资源管理,程序自动下载运行,不需要用户介入。,课件,80,因特网时代应用模型的演变,来自不同软件开发商的软件模块动态组织起来运行,课件,81,灵活内核技术,课件,82,浏览器成为统一的用户界面,课件,83,操作系统对XML的支持,XML文本描述语言的广泛使用将是因特网时代操作系统的另一明显标志 XML的每个标签(tag)都可以由用户定义 XML兼顾了对于人的可读性和计算机的处理效率 XML已经成了因特网信息交换的标准,未来的操作系统内核会对XML进行最有效的支持,课件,84,因特网时代操作系统技术的发展,课件,85,硬件设备即插即用,因特

25、网时代要求硬件设备能即插即用 解决方案只能是在驱动程序对象中加入非执行的描述信息, 这种描述信息就是通常所说的元数据(metadata),它可以“告诉”访问者它有哪些特性和功能。 元数据可以是XML形式、二进制或两者兼有。我们知道对象加上元数据就是构件。 操作系统可以根据构件中的元数据生成中间件。这种在内核里动态生成的中间件是连接驱动构件与用户程序的“桥梁”, 而这桥梁是内核根据硬件设备的元数据动态生成的,此时的新型操作系统仍然是以不变应万变,课件,86,体系结构由固定变为灵活,操作系统体系结构大致分为两种:大内核(Monolithic Kernel)和微内核(Micro Kernel) 大内

26、核操作系统将图形、设备驱动、文件系统等全部功能在操作系统内核中实现,运行在内核状态、同一地址空间。优点是减少进程间通信和状态切换的系统开销,获得较好的运行效率。缺点是内核庞大,占用资源多,剪裁不易,并且一旦个别驱动程序运行出错,就会导致整个系统崩溃,稳定性、安全性不好。 微内核在内核中只实现那些必须由内核实现的基本功能,而将图形、文件系统、设备驱动、通讯等功能放在内核之外,作为系统服务来提供相应的功能,这些程序在用户状态下运行。这样做的优点是有一个精炼的内核,便于剪裁、移植。,课件,87,服务器-中间件-用户”编程模型,课件,88,操作系统与虚拟机,操作系统可以作为虚拟机,直接提供中间件的运行

27、环境 操作系统可以对应用程序构件进行各种各样的控制,使得封装好的构件能够适应不同的运行环境和用户要求 操作系统利用中间件技术支持和控制应用程序的运行环境,就形成了因特网时代操作系统的关键技术,课件,89,基于中间件技术的嵌入式操作系统,操作系统的实现采用构件技术,提供构件运行的虚拟机环境,支持动态加载构件 构件的互操作性定义了编程语言无关、可扩展、跨平台的二进制标准。构件之间的相互作用通过一组称作接口(interface)的功能实现 提供接口描述语言CDL,为服务器中新功能的实现提供了方便,如脚本语言调用构件对象函数等 运行环境(虚拟机)可以在操作系统上自动生成中间件(代理构件),提供构件定位

28、、调用、管理、中间件自动生成、构件通信(进程内、跨进程、跨网络等不同运行环境)等机制 件技术保证了软件互操作性、版本升级独立性和运行环境透明性,提供了提高系统安全、软件协同开发、软件容错、可靠性、软件复用、软件升级的有效手段,课件,90,基于中间件技术的操作系统的技术优势,提供系统的安全保护机制 硬件设备的即插即用 稳定、健壮的系统特性 灵活内核操作系统体系结构,课件,91,7.嵌入式Linux,课件,92,一、嵌入式Linux的定义,嵌入式Linux(Embeded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式

29、场合的专用Linux操作系统,课件,93,嵌入式Linux的优势,Linux系统是层次结构且内核完全开放 强大的网络支持功能 Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中仿真工具的障碍 Linux具有广泛的硬件支持特性,课件,94,嵌入式Linux的特点,课件,95,主流嵌入式Linux系统,Clinux Embedix RTLinux RTAI Monta Vista Linux,课件,96,Linux的实时性,一般的通用linux已经具备一定的实时性 但无法满足硬实时的要求 运行于linux内核空间的进程(核心态)不能被抢先 在l

30、inux中,中断有时候会出于保护临界区操作的目的而被屏蔽 通用linux的时间滴答长度为10ms(硬件时钟频率100HZ),但是这对于时间精度要求很高(微秒级)的实时进程来说是不够的,课件,97,嵌入式Linux的实时性改造,可以引入一个双内核结构 对Linux内核代码作一些修改Linux本身的任务以及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务以Linux的内核模块(Loadable Kernel Module,LKM)的形式存在的 资源核方法:这种方法是为解决传统实时操作系统中固定优先级抢占式调度策略的局限性而产生的,课件,98,Linux 2.6内核实时性分

31、析,2.6中内核自身是可抢占的,它允许自身在执行任务时被打断 2.6版本的Linux内核使用了由 Ingo Molnar 开发的新的调度器算法,称为O(1)算法,课件,99,嵌入式Linux面临的挑战,1、扩充Linux的实时系统 内核不支持事件优先级和抢占实时特性 对Linux实时性的扩展可以从两方面进行: 向外扩展(让实时系统支持的范围更广,支持的设备更多) 向上扩展(扩充Linux内核,从功能上扩充Linux的实时处理和控制系统),课件,100,RT-Linux的做法 Linux本身的任务以及Linux内核本身作为一个优先级最低的任务 实时任务作为优先级最高的任务 实时任务以Linux的

32、内核模块(Loadable Kernel Module,LKM)的形式存在,课件,101,RTLinux硬实时操作系统简介,RTLinux是一硬实时操作系统 实现了一个微内核的小的实时操作系统,而将普通Linux系统作为一个该操作系统中的一个低优先级的任务来运行 普通Linux系统中的任务可以通过FIFO和实时任务进行通信 通过软件来模拟硬件的中断控制器 RT-Linux通过将系统的实时时钟设置为单次触发状态,可以提供十几个微秒级的调度粒度,课件,102,RTLinux内核结构,课件,103,2、改变Linux内核的体系结构,Monolithic内核体系 MicroKernel体系 执行效率

33、内核的体积 升级、维护和移植,课件,104,微内核技术,缺点:操作系统的服务模块在独立的地址空间运行,使得进程间通信和上下文切换的系统开销大大增加,降低了系统效率。,课件,105,3、完善Linux的集成开发环境,Linux在基于图形界面的特定系统定制平台的研究上,与Windows操作系统相比还存在差距,课件,106,POSIX实时扩展,POSIX(Portable Operating System Interface)是为标准化类UNIX操作系统所必须具有的特征和接口而制定,其思想就是为了增强为类UNIX操作系统编写的软件的可移植性,课件,107,二、嵌入式linux开发,最小的嵌入式 Li

34、nux 系统仅需要三个基本元素: 引导实用程序 Linux 微内核,由内存管理、进程管理和定时服务构成 初始化过程 硬件驱动程序 一个或多个应用进程,以提供所需功能,课件,108,面向嵌入式Linux 系统的图形用户界面,MicoroWindows/NanoX 开放源码 无任何硬件加速能力 图形引擎中存在许多低效算法 代码质量较差 OpenGUI 可移植性稍差 Qt/Embedded 低的程序效率、大的资源消耗 MiniGUI,课件,109,嵌入式Linux开发,了解硬件 针对所用CPU的编译器/汇编器/连接器,相应的库工具,目标文件分析/管理工具,符号查看器 编程器,下载工具和查错器 安排内

35、存地址 编写启动代码和机器相关代码:硬件初始化,装载内核及安装根文件系统以及开始内核执行 驱动程序,课件,110,嵌入式Linux的一般开发步骤:,精简内核 系统启动 驱动程序开发 界面开发:将X-Window换成MicroWindows,课件,111,精简内核,构造内核的常用命令包括:make config、dep、clean、mrproper、zImage、bzImage、modules、modules_install。,课件,112,精简内核的实例,使用 make config 去掉多余功能。 ./Makefile ./arch/i386/kernel/ Makefile,课件,113,

36、启动优化基本技术,一、固化各种不可扩展硬件的设置,尽量标准化可扩展设备的接口,节约设备检测时间。 二、Lazy Loading,也即不加载当前非必需的模块,这些模块可以在启动后待机时间内加载,或者在具体用到之后再加载,把启动时间打散,从而缩短对用户来说至关重要的反应时间(Responding Time)。 三、任务并行化,很多系统在启动任务时,是顺序执行,按部就班。为了减少启动时间,我们可以考虑任务的并行化,以减少启动时间的消耗。,课件,114,嵌入式Linux启动过程分析,在内核运行之前需要系统引导程序(Bootloader)完成加载内核和一些辅助性的工作,然后跳转到内核代码的起始地址并执行

37、。 整个arm linux内核的启动可分为三个阶段:第一阶段主要是进行cpu和体系结构的检查、cpu本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化,课件,115,系统启动,系统启动的相关文件如下: ./arch/$ARCH/boot/ bootsect.s ./arch/$ARCH/boot/setup.s ./init/main.c bootsect.S 及 setup.S,课件,116,嵌入式Linux的启动优化,系统任务裁减 裁减不适合本系统的部分任务 系统任务并行 明确任务依赖关系 任务并行启动(make j 工具的使用),课件,

38、117,IBM系列PC的启动,IBM系列PC在电源打开后,由内存中地址FFFF:0000开始执行(这个地址一定在ROM BIOS中,ROM BIOS一般是在FE000h到FFFFFh中),而此处的内容则是一个jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作。 紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine)。这个程序会将磁盘上的第零轨第零扇区读入内存物理地址07C0:0000(即07C00h处。而位于Linux开机磁盘的boot sector上的是Linux的bootsect程序。,课件,118,Linux的启

39、动,Linux是由位于boot sector 的bootsect程序负责把setup及Linux的kernel载入内存中,再将控制权交给setup。,课件,119,驱动程序,在Linux系统里,设备驱动程序提供一组入口点,它们由一个结构在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。Linux系统里,通过调用register_chrdev 向系统注册字符型设备驱动程序。,课件,120,添加驱动程序,1.直接修改系统核心的源代码,把设备驱动程序加进核心里 2.把设备驱动程序作为可加载的模块,由系统管理员动态地加载它,使之成为核心的一部分。,课件,121,驱动程序模块,Linu

40、x中,模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在)。为此需要在gcc命令行里加上-c的参数。在成功地向系统注册了设备驱动程序后(调用register_chrdev),就可以用mknod命令来把设备映射为一个特别文件。其它程序需要使用这个设备的时候,对此特别文件进行操作。,课件,122,三、linux启动流程,初始化流程 1 加电或复位 2 BIOS的启动 3 Boot Loader 4 操作系统初始化,课件,123,1 加电或复位,冷启动过程开始,中央处理器进入复位状态,将内存中的所有数据清零,对内存进行校验,如果没错,CS寄存器将置入FFFF,IP寄存器置入

41、0000,这个CS:IP组合指向的是BIOS的入口。系统就是这样进入BIOS启动过程的。,课件,124,2 BIOS启动,上电自检POST(Power On Self Test) 对系统内的硬件设备进行监测和连接 最后,BIOS将从软盘或硬盘上读入Boot Loader.如果从硬盘启动,BIOS将读入该盘的零柱面零磁道1扇区(MBR),这个扇区上就放着Boot Loader.,课件,125,2 BIOS启动,除了启动程序,BIOS还提供了一组中断以便于对硬件设备的访问。我们知道,当键盘上的某一键被按下,CPU就会产生一个中断并把这个键的信息读入。 在操作系统没有被装入以前(Bootsect.S

42、还没有被读入),中断的响应程序由BIOS提供。,课件,126,3 Boot Loader,Boot Loader是一段汇编代码,存放在MBR中,它的主要作用就是将系统启动代码读入内存。,课件,127,3 Boot Loader,因为在启动过程中,BIOS会把Boot Loader读入内存,并把控制权交给它。MBR(硬盘启动)内的代码就是Boot Loader或者它的一部分,为了说明Boot loader的实现,先解释磁盘结构。,课件,128,3 Boot Loader,一个硬盘在DOS文件系统下可被分为四个基本分区,可以把一个基本分区定义为一个扩展分区,然后再把这个基本分区分为一个或多个逻辑分

43、区。 整个硬盘的分区表存放在硬盘的第一个扇区(MBR),每个扩展分区也对应一个分区表,它存放在该扩展分区对应的第一个扇区里。 除主引导扇区外,每个基本分区和扩展分区也有自己的引导扇区,结构与MBR相同,但逻辑分区的引导扇区不能用于启动。,课件,129,3 Boot Loader,如果是硬盘启动,Boot Loader将查找主分区表中标记为活动分区的表项,把该表项对应的分区的引导扇区读入,然后将控制权交给该扇区内的引导程序。,课件,130,3 Boot Loader,如果计算机上装有不只一个操作系统,仅仅MS-DOS的Boot Loader无法完成这种工作,需要一个可以多重起动的工具,下面介绍L

44、inux下最常用的LILO.,课件,131,3 Boot Loader,LILO实际上是一个在Linux环境下编写的Boot Loader程序,主要功能是引导Linux操作系统的启动。 LILO的功能实际上是有几个程序共同实现的,它们是: (1)Map Installer 这是LILO用于管理启动文件的程序。它将boot loader写入引导分区,创建纪录文件以映射内核的启动。 (2)The boot loader 它负责把Linux内核或其他操作系统 的引导分区读入内存。还提供命令行接口,让用户选择从哪个操作系统启动和加入启动参数。 (3)其他文件:主要包括用于存放Map Installer

45、记录的map文件和存放LILO配置信息的配置文件。,课件,132,3 Boot Loader,从代码分析层次认识LILO运行过程。,课件,133,4 进入操作系统,Boot Loader 做了这么多工作,一言以蔽之,只是把操作系统的代码调入内存,所以当它执行完后,自然该把控制权交给操作系统,由操作系统的启动程序来完成剩下的工作。,课件,134,4 进入操作系统,把控制权交给Setup.S这段程序 进入保护模式,同时把控制权交给Head.S Head.S调用/init/main.C中的start_kernel函数,启动程序从start_kernel()函数继续执行,课件,135,4 进入操作系统

46、(1)Setup.S,首先,Setup.S对已经调入内存的操作系统代码进行检查,如果没错,它会通过BIOS中断获取内存容量,硬盘等信息(实模式) 准备让CUP进入保护模式 a.先屏蔽中断信号 b.调用指令lidt和lgdt c.对8259中断控制器进行编程 d.协处理器重新定位 完成这几件事后,Setup.S设置保护模式的标志,重取指令,再用一条跳转指令jmpi 0 x100000,KERNEL_CS。进入保护模式下的启动阶段,控制权交给Head.S.,课件,136,4 进入操作系统(2)Head.S,也要先做屏蔽中断一类的工作 然后对中断向量表做一定的处理 Boot Loader读入内存的启

47、动参数和命令行参数,Head.S把它们保存在empty_zero_page页中 检查CUP类型 对协处理器进行检查 页初始化,调用setup_paging这个子函数 因为已进入保护模式,段机制的多任务属性体现,课件,137,4 进入操作系统(3)main.c中的初始化,Head.S调用/init/main.c中的start_kernel函数,把控制权交给它,这个函数是整个操作系统初始化的最重要的函数,一旦它执行完,整个操作系统的初始化也就完成了。,课件,138,4 进入操作系统(3)main.c中的初始化,计算机在执行start_kernel前以进入了保护模式,使处理器完全进入了全面执行操作系

48、统代码的状态。 但直到目前为止,这都是针对处理器的。而一旦start_kernel开始执行,Linux内核就一步步展现。 Start_kernel执行后,就可以以一个用户的身份登陆和使用Linux了,课件,139,4 进入操作系统(3)main.c中的初始化,较为重要的函数如下 Setup_arch() 最基本硬件的初始化 Paging_init() 线性地址空间映射 Trap_init()中断向量表初始化 Int_IRQ与中断有关的初始化 Sched_init()进程调度初始化 Console_init()对中断的初始化,课件,140,4 进入操作系统(3)main.c中的初始化,对文件系统

49、的初始化 Inode_initI() i节点管理机制初始化 Name_cache_init() 目录缓存机制初始化 Buffer_init() 块缓存机制初始化,课件,141,4 进入操作系统(3)main.c中的初始化,启动到了目前这种状态,只剩下运行/etc下的启动配置文件。 这时初始化程序并没有完成操作系统各个部分的初始化,更关键的文件系统的安装还没有涉及,这是在init进程建立后完成的。就是start_kernel()最后部分内容。,课件,142,4 进入操作系统(4)建立init进程,Linux要建立的第一个进程是init进程 启动所需的Shell脚本文件 a.Linux系统启动所必

50、须的 b.用户登陆后自己设定的 系统启动所必须的脚本存放在系统默认的配置文件目录/etc下。首先调用的是/etc/inittab.,课件,143,四、Linux系统移植的两大部分,内核部分和系统部分 (1)内核部分初始化和控制所有硬件设备(严格说不是所有,而是绝大部分),为内存管理、进程管理、设备读写等工作做好一切准备。(2)系统部分加载必需的设备,配置各种环境以便用户可以使用整个系统。,课件,144,(1)内核移植,Linux内核可以视为由五个功能部分组成:进程管理(包括调度和通信)、内存管理、设备管理、虚拟文件系统、网络 需要改动的就是进程管理、内存管理和设备管理中被独立出来的那部分即硬件

51、相关部分的代码,课件,145,修改的代码,进程管理底层代码 BIOS接口代码 时钟、中断等板上设备支持代码 特殊结构代码:SMP 内存管理,课件,146,(2)系统移植,一个最小系统的重建过程 类似Linux系统应急盘DiskOnChip 包括:init、libc库、驱动模块、必需的应用程序和系统配置脚本。,课件,147,电源管理综述,现在Linux中,最主要的电源管理方案主要有三种:APM、ACPI、DPM 传统的APM(Advanced Power Management)是一种基于bios的电源管理标准 ACPI(Advanced Configuration and Power Inter

52、face),它主要是将电源管理的主要执行者由bios转换成为操作系统,这样可以提供更大的灵活性以及可扩展性,课件,148,DPM简介,DPMDynamic Power Management 在面向Linux的DPM架构中,内核中的DPM子系统负责维持整个系统的电源状态 并把DPM系统的不同电源管理模块联系在一起。 可以把DPM看成是为驱动程序、中间件和应用程序提供服务的元素,课件,149,DPM框架,课件,150,存储管理,多程序模型 这是没有硬件地址转换的内存管理模型。即使没有硬件地址转换功能支持,多个程序也可以共享相同的物理地址 具有地址转换硬件的内存管理模型 应用程序使用的是虚拟地址,C

53、PU实际执行程序所示用的是物理地址,从虚拟地址到物理地址的转换需要操作系统和MMU硬件的参与,课件,151,高速缓冲(Cache)简介,Buffer Cache Page Cache Swap Cache Hardware Cache,课件,152,虚拟存储功能,巨大的寻址空间 内存映射 公平的物理内存分配 共享虚拟内存,课件,153,主存与辅存层次信息传送,页式虚拟存储器 段式虚拟存储器 段页式虚拟存储器,课件,154,Linux存储管理,Linux使用了上述第二种存储管理模型。 应用程序在标准Linux中的加载使用了“按需”分页的策略 Linux 的内存管理采取的是分页机制 Linux虚拟

54、内存的实现,需要几种不同的机制来实现:地址映射机制、内存的分配与回收、请求页机制、交换机制、内存共享机制。,课件,155,地址映射机制,地址映射机制,主要完成主存、辅存和虚存之间的关联 Linux采用一系列的数据结构和一个硬件缓存(TLB)来实现地址映射机制 Linux内核的映射机制被设计成三层,在页面目录和页表之间增设了一层“中间目录”,课件,156,内存的分配与回收,最近被执行过的地址转换结果会被保留在MMU的转换后备缓存(TLB)中 页分配使用2的幂数大小的块 Linux使用Buddy算法有效地分配和回收页块,课件,157,Buddy算法,这个算法首先找它请求大小的内存页块 ,它跟踪fr

55、ee_area数据结构中的list单元队列中的空闲页的链表 如果找到的页块大于请求的页块,则该块将被分开成为合适大小的块 因为所有的块都是2的幂次的页数组成,所以这个分割的过程比较简单,你只需要将它平分就可以了。空闲的块则放到适当的队列,而分配的页块则返回给调用者。,课件,158,CLinux存储管理,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术 CLinux仍采用存储器的分页管理,系统在启动时把实际存储器进行分页 没有MMU管理,所以实际上CLinux采用实存储器管理策略(real memeory management) CLinux系统对于内存的访问是直接 一个进程在执行

56、前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中,课件,159,嵌入式系统的文件系统管理,嵌入式系统的物理存储 Flash存储器由于其安全性高,存储密度大,体积小,价格相对便宜,是嵌入式领域中最受欢迎的一类存储器 嵌入式系统中使用Flash存储器,通常有两种使用方式 只进行只读访问 在系统运行的时候既需要进行读操作,也需要进行写操作。,课件,160,存储设备的管理方式,直接访问Flash 自己编写Flash的驱动程序(即基本操作函数) Flash Disk 有些Flash存储设备上附带了控制电路,并且提供了IDE的接口。这些设备通常都是模拟了PC中的IDE之类设备的接

57、口 专用于Flash的文件系统 JFFS等文件系统,目前已经非常成熟,并有了成功的应用,课件,161,嵌入式文件系统的类型,RAMDISK 在RAMDISK文件系统中,当系统启动的时候,会把外存中的映像文件加压缩到内存中,形成RAMDISK环境,便可以开始运行程序了。这种文件系统最大的问题就是,运行的程序的代码在内存和外存都占据了空间 cramfs cramfs也是一种压缩式的文件系统。但是它不是一次性地把所有内容都解压缩到内存中,而所需数据的位置,计算数据在cramfs的位置,然后把所需的部分解压缩到内存中,再通过访问内存来得到所需的数据。由于这个整个过程,包括内存中数据的位置都是由cram

58、fs文件系统自己来维护。所以对开发人员是透明的,也节省了空间。 romfs romfs是一种只读文件系统,占用的系统资源也比较小。在romfs中,文件系统的管理代码占用的空间也比较小,但是romfs的文件访问权限和属主这些信息尚没有完全实现。此外,由于romfs文件系统是只读的,所以可以做得很小。,课件,162,日志文件系统,在嵌入式设备断电可能性比一般的计算机的可能性要大 日志文件系统相对于普通文件系统,主要的变化就是增加了日志记录,课件,163,JFFS与JFFS2文件系统,2000年Axis公司发布了他们开发的日志式Flash文件系统 JFFS文件系统是开放源代码的文件系统,可以说是专门

59、用于嵌入式Linux等系统的 JFFS是直接在Flash设备上实现的文件系统 JFFS2没有为Flash设备专门设计一个转换层来模拟普通的文件系统,而是直接对Flash进行操作,课件,164,输入输出与设备管理概述,I/O设备抽象 I/O调度 缓冲技术 高速缓存 错误处理 性能与优化,课件,165,I/O设备抽象,不同的I/O设备,它们的读写方式不尽相同 对于应用程序来说最好是所有的设备都可以通过一个相同的界面来进行读写操作 需要通过一套机制对某一类相似的I/O设备的具体操作细节进行封装 在操作系统中是通过设备驱动来实现的,课件,166,I/O设备抽象层次结构,课件,167,I/O调度,I/O调度指的是对一组I/O请求进行安排,决定它们的执行顺序 操作系统一般会把对某个设备的I/O请求放入那个设备的请求队列中去 然后由I/O调度器对这些请求进行重新安排以改进系统的整体性能,课件,168,缓冲技术,引入缓冲技术,主要有以下三个原因 : 一、是协调数据产生设备(producer)和数据接收设备(consumer)的速度 二、是协调数据产生设备和数据接收设备的数据大小 三、是因为为了保证写入外设的数据的一致性,要先把数据转移到内核空间 在缓冲技术(Buffering)中,两个设备之间或者一个设备与一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论