嵌入式操作系统chap7

上传人:油条 文档编号:1272237 上传时间:2017-06-04 格式:PPT 页数:74 大小:522KB
返回 下载 相关 举报
嵌入式操作系统chap7_第1页
第1页 / 共74页
嵌入式操作系统chap7_第2页
第2页 / 共74页
嵌入式操作系统chap7_第3页
第3页 / 共74页
嵌入式操作系统chap7_第4页
第4页 / 共74页
嵌入式操作系统chap7_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《嵌入式操作系统chap7》由会员分享,可在线阅读,更多相关《嵌入式操作系统chap7(74页珍藏版)》请在金锄头文库上搜索。

1、第七章中断与系统调用,在Linux系统中,中断是外设与系统通信的必须手段,是处理器实时性的重要体现。通过这一章的学习,需要掌握以下基本内容中断概念基于ARM平台的中断特点Linux内核中断机制Linux中断处理程序设计Linux的中断处理机制Linux的系统调用,学习目标,主要内容,1,3,2,5,中断概念,嵌入式ARM平台的中断特点,Linux内核中断机制,Linux中断处理机制,6,Linux的系统调用,4,Linux中断处理程序设计,一、中断概念,中断机制中断含义中断响应过程,Linux内核要管理计算机上的硬件设备,首先要和他们通信。而处理器的速度跟外围硬件设备的速度往往不在一个数量级上

2、,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然效率很低。既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。更好的办法是由人为的来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动)。这就是中断机制。,一、中断概念,1、中断机制,在嵌入式系统中外部

3、设备的功能实现主要是依靠中断机制来实现的,即将设备功能程序的实现以中断服务子程序的形式进行组织。 中断(interrupt)是指CPU正在执行的程序时,被内部/外部事件或有程序预先安排的事件所打断,当前正在执行的程序被中止,CPU转去处理所发生的事件,处理完毕后再返回继续执行暂时中止的程序执行,这一过程称为中断。,一、中断概念,2、中断的含义,中断的作用:并行操作硬件故障报警与处理支持多道程序并发运行,提高计算机系统的运行效率支持实时处理功能 Linux中通常分为外部中断(又叫硬件中断)、内部中断(又叫异常)和软件中断。内中断:即程序运行错误引起的中断外中断:即由外部设备、接口卡引起的中断软件

4、中断:由写在程序中的语句引起的中断程序的执行,称为软件中断,一、中断概念,2、中断的含义,2、中断的含义,按中断源进行分类: 中断源:引起中断的事件称为中断源。中断源是多种多样的,按其性质可分为内部中断源和外部中断源。 内部中断源位于CPU内部。主要的内部中断源有:(1)CPU指令运行产生异常,如除法溢出(除0中断)。(2)程序执行INT软件中断指令。如INT 21H等。(3)程序调试过程中的中断,如单步中断。外部中断源是通过CPU的中断请求引脚发出中断请求信号。主要外部中断源有:(1)I/O设备,如键盘、显示器、打印机。(2)数据通道,如软盘、硬盘等。(3)故障源,如电源掉电、内存及外部设备

5、出错等。(4)其它外部设施备。,一、中断概念,2、中断的含义,允许/禁止(开/关)中断: CPU通过指令限制某些设备发出中断请求,称为屏蔽中断。从CPU要不要接收中断即能不能限制某些中断发生的角度 ,中断可分为:可屏蔽中断 :可被CPU通过指令限制某些设备发出中断请求的中断不可屏蔽中断:不允许屏蔽的中断如电源掉电 中断优先级:为了管理众多的中断请求,需要按每个(类)中断处理的急迫程度,对中断进行分级管理,称其为中断优先级。在有多个中断请求时,总是响应与处理优先级高的设备的中断请求。中断嵌套:当CPU正在处理优先级较低的一个中断,又来了优先级更高的一个中断请求,则CPU先停止低优先级的中断处理过

6、程,去响应优先级更高的中断请求,在优先级更高的中断处理完成之后,再继续处理低优先级的中断,这种情况称为中断嵌套。,一、中断概念,具体的中断过程:一次完整的中断过程由中断请求、中断响应和中断处理三个阶段组成。中断请求:是由中断源发出的并送给CPU的控制信号,由中断源设备通过将接口卡上的中断寄存器的相应位置“1”完成。中断响应:当CPU接到中断请求,若满足下列条件,就会响应中断。中断处理过程:关中断-保存断点保护现场-判中断源转中断服务-开中断-执行中断服务程序-关中断-恢复现场恢复断点-开中断-返回断点,3、中断过程,一、中断概念,主要内容,1,3,2,5,中断概念,嵌入式ARM平台的硬件中断特

7、点,Linux内核中断机制,Linux中断处理机制,6,Linux的系统调用,4,Linux中断处理程序设计,二、嵌入式ARM平台的硬件中断特点,硬件中断中断请求过程ARM平台中断,1、硬件中断,二、嵌入式ARM平台中断特点,2、中断请求过程,二、嵌入式ARM平台中断特点,中断发生时,外设需要通知操作系统它那里发生了一些事情,但是中断的功能仅仅是一个设备报警,当报警灯亮时中断处理程序只知道有事情发生,但发生了什么事情还需要查看设备才行。即就是访问设备上的一些寄存器后,才知道具体发生什么的事情,如何怎么处理。具体过程:设备通过中断线向中断控制器发送信号告诉操作系统它产生了一个中断;操作系统从中断

8、控制器的状态位得知哪条中断线上产生的中断;根据中断线上的设备特点来处理中断。,2、中断请求过程,二、嵌入式ARM平台中断特点,在Linux下,硬件中断叫做IRQ(Interrupt Requests的缩写) ,通常把申请一条中断线称为申请一个IRQ或者申请一个中断号。申请IRQ(Interrupt Requirement)的过程,分为3步: 将所有的中断线探测一遍,看看哪些中断还没有被占用。从这些还没有被占用的中断中选一个作为该设备的IRQ。通过中断申请函数申请选定的IRQ,这时要指定申请的方式是独占还是共享。根据中断申请函数的返回值决定是否重新申请或者放弃申请并返回错误。,3、ARM平台的中

9、断,二、嵌入式ARM平台中断特点,系统中每一个注册的中断源,都会分配一个唯一IRQ编号用于识别该中断。IRQ编号贯穿在整个Linux的通用中断子系统中。在嵌入式平台中,每个中断源的IRQ编号都会在arch相关的一些头文件中,例如arch/xxx/mach-xxx/include/irqs.h。驱动程序在请求中断服务时,它会使用IRQ编号注册该中断,中断发生时,CPU通常会从中断控制器中获取相关信息,然后计算出相应的IRQ编号,然后把该IRQ编号传递到相应的驱动程序中。,主要内容,1,3,2,5,中断概念,嵌入式ARM平台的硬件中断特点,Linux内核中断机制,Linux中断处理机制,6,Lin

10、ux的系统调用,4,Linux中断处理程序设计,三、Linux内核中断机制概述,Linux内核中断原理Linux内核中断方式Linux内核中断方式的区别,1、Linux内核中断机制,三、Linux内核中断概述,Linux系统的中断就是通常意义上的“中断处理程序”,它是直接处理由硬件发过来的中断信号。当Linux内核收到中断请求后,它首先判断中断源,然后调用相应的设备驱动程序, 驱动程序会去设备上查看其状态寄存器以了解发生了什么事情,并进行相应的操作。Linux内核与中断相关的部分包括:硬件中断,下半部任务和内核线程。,2、Linux内核中断方式,三、Linux内核中断概述,(1)硬中断任务 硬

11、中断是指那些由处理器以外的外设产生的中断,这些中断被处理器接收后交给内核中的中断处理程序处理。要注意的是:第一,硬中断是异步产生的,中断发生后立刻得到处理,也就是说中断操作可以抢占内核中正在运行的代码。这点非常重要。第二,中断操作是发生在中断上下文中的(所谓中断上下文指的是和任何进程无关的上下文环境)。中断上下文中不可以使用进程相关的资源,也不能够进行调度或睡眠。异步发生的中断处理程序根本不知道当前进程的任何信息,也不关心当前哪个进程在运行,它完全是个过客。,2、Linux内核中断方式,三、Linux内核中断概述,(2)下半部分任务 Linux中,中断处理程序从概念上被分为上半部分(top h

12、alf)和下半部分(bottom half);在中断发生时上半部分的处理过程立即执行,但是下半部分(如果有的话)却推迟执行。内核把上半部分和下半部分作为独立的函数来处理,上半部分决定其相关的下半部分是否需要执行。必须立即执行的部分必须位于上半部分,而可以推迟的部分可能属于下半部分。,2、Linux内核中断方式,三、Linux内核中断概述,(2)下半部分任务 下半部任务是一种推后执行任务,它将某些不那么紧迫的任务推迟到系统更方便的时刻运行。内核中实现下半部的手段经过不断演化,目前已经从最原始的BH(bottom half) 衍生出tasklet,软中断softirq,工作队列(work queu

13、es)。 上半部只能通过中断处理程序来完成,下半部的实现却是有很多种方式。,为什么这样划分成两个部分呢,3、Linux内核中断方式,三、Linux内核中断概述,(3)软中断操作 软中断softirq不象硬中断那样是由硬件中断信号触发执行的,所以也不同于硬件中断那样随时都能够被执行。软中断会在内核处理任务完毕后返回用户级程序前得到处理机会。即就是有三个时刻它将被执行do_softirq函数。硬件中断操作完成后,系统调用返回时,内核调度程序中。从中可以看出软中断会紧随硬中断处理,所以抢占内核任务至少在时钟中断后总有机会运行一次。还要记得软中断可以在不同处理器上并发执行。,2、Linux内核中断方式

14、,三、Linux内核中断概述,(3)软中断操作 实际上软中断使用的并不多,反而是后面的tasklet比较多,但tasklet是通过软中断实现的,软中断的代码位于/kernel/softirq.c中。软中断是在编译期间静态分配的,由softirq_action结构表示,它定义在linux/interrupt.h中。 使用时先open_softirq,需要发出此软中断时使用raise_softirq或cpu_raise_softirq。软中断的执行也处于中断上下文中,所以中断上下文对它的限制是和硬中断一样的,一样不能进入阻塞状态。,3、Linux内核中断方式区别,三、Linux内核中断概述,tas

15、klet和bottom half都是建立在软中断之上的两种延迟机制,其具体不同之处在于:软中断是静态分配的,而且同类软中断可以并发地在几个CPU上运行。tasklet可以动态分配,并且不同种类的Tasklets可以并发地在几个CPU上运行,但同类的Tasklets不可以。bottom half 只能静态分配。实际上,下半部分是一个不能与其它下半部分并发执行的高优先级tasklet,即使它们类型不同,而且在不同 CPU上运行。tasklet可以理解为软中断的派生,所以它的调度时机与软中断一致。,3、Linux内核中断方式区别,三、Linux内核中断概述,Tasklets与softirq的主要一个

16、区别就是在同一时刻,只能用一个cpu来运行一个tasklet。而softirq就不然,可以在不同cpu上运行同一个softirq,但要注意做好相关的保护工作。Tasklets而它与BH的区别是不同的Tasklets可以在同一时刻运行在不同的cpu上,而BH是不可以的。而在它的结构定义中,最重要的就是func成员,它所指的地址就是最终要执行的处理函数。对于内核中需要延迟执行的多数任务都可以利用tasklet来完成,由于同类tasklet本身已经进行了同步保护,所以使用tasklet相比软中断要简单得多,而且效率也不错。,3、Linux内核中断方式区别,三、Linux内核中断概述,bottom half 是Linux最早的内核延迟方法,它结构简单且容易控制,因为所有的BH处理程序都被严格地顺序执行,不允许任何两个BH处理程序同时并发执行,即使它们的类型不同也不可以,这样一来BH执行期间减少了许多同步保护。但是BH不得不被淘汰,因为它的简便牺牲了多处理器并发处理的高性能,等于一队人过独木桥那样速度受到牵制。 任务列队是BH的替代品,来自BH,所以它的属性也和BH相同。它的原意在于简化BH的操作接口,但它的随意性(数量随意、执行时机随意)却给系统带来了混乱,所以到今天已经被工作队列所取代。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号