-
2021-07-17 01:44:22
《计算机操作系统》名词解释及简答题
并发与并行
并发性指两个或两个以上的事件或活动在同一时间间隔内发生;并行性指两个或两个以
上的事件或活动在同一时刻发生。并行的事件或活动一定是并发的,但反之并发的事件或活
动未必是并行的。并行性是并发性的特例,而并发性是并行性的扩展。
分时系统
允许多个联机用户同时使用一个计算机系统进行交互式计算机的操作系统称为分时操
作系统。
实时调度算法
调度那些存在时间上的紧迫性的进程或任务。
实时与分时
实时强调在一定时间条件下做出响应,分时强调同时多用户交互。
模式切换,进程切换,两者之间的关系
模式切换时CPU 从核心态到用户态,或从用户态到核心态
进程切换是指从一个进程上下文切换到另外的进程上下文
模式切换不一定导致进程切换
进程切换一定是先发生模式切换
对换与替换与切换
对换指进程粒度的(中级)调度,替换是存储管理的页面操作,切换是指进程上下文或
模式的改变操作。
管道与通道
管道是连接读写进程的一个特殊文件,允许进程按 FCFS 方式传送数据,也能够使进程
同步执行。
通道又称 I/O 处理机,具有自己的指令系统,能完成主存储器和设备之间的信息传送,
与CPU 并行执行的操作。
进程
是一个可并发执行的且具有独立功能的程序关于某个数据集合的一次执行过程,也是操
作系统进行资源分配和保护的基本单位。
线程
线程是进程中能够并发执行的实体,是进程的组成部分,也是处理器调度和分派的基本
单位。
进程与程序(作业)
进程是程序关于数据的执行。程序是静态的,进程是动态的。
进程通信及其分类
进程之间相互交换信息的工作称之为进程通信,可以通过高级通信机制来完成。进程间
通信的方式包括:通过软中断提供信号的通信机制;使用信号量及其原语操作(PV、读写
锁、管程)控制的共享存储区通信机制;通过管道提供的共享文件通信机制;使用信箱和发
信/收信原语的消息传递通信机制。
线程的实现机制有哪几种,试比较各种实现机制的优缺点
内核级实现 KLT 优:在多处理器上,能同时调度统一进程中的多个线程并行执行;切
换速度快,提高系统执行效率
缺:系统开销大
用户级实现 ULT 优:节省模式切换开销和内核宝贵资源;按需选择调度算法;能运行
在任何操作系统上
缺:一个用户级线程的阻塞将引起整个进程的阻塞;不
能利用多重处理的有点
混合实现 优:宏观和微观上都有很好的并行性;系统开销小,窗口系统执行效率高
管程及其特性
由表示共享资源的数据结构及其上的一组操作过程组成,是一种程序设计语言结构成份,
和信号量有同等的表达能力。主要特性:共享性、安全性、互斥性。
死锁
如果在一个进程集合中,每个进程都在等待只能由该集合中的其他一个进程才能引发的
事件,则称一组进程或系统此时发生了死锁。
死锁与饥饿
死锁:一组进程如果都获得部分资源,还想要得到其它进程所占有的资源,最终所有进
程将陷入永远等待状态
饥饿:一个可运行进程由于其它进程总是优先于它,而被调度程序无限期地拖延而不能
被执行。
进程死锁的必要条件及几种死锁处理方法
互斥条件,占有和等待条件,不剥夺条件,循环等待条件
死锁的避免、死锁的防止、死锁检测与解除
文件
由文件名字标识的一组信息的集合
文件存取方式
顺序、直接、索引
内存映射文件和优点
内存映射文件技术把进程的虚拟地址空间与某一个盘文件关联起来,使得进程对文件的
存取转化为对关联存储区域的访问,通过文件系统与存储管理相结合来实现。优点:方便易
用、节省空间、便于共享、灵活高效的特点。
文件目录与目录文件
为了加快文件的查找速度,通常把FCB (文件控制块)集中起来进行管理,组成文件目
录。目录项的格式按统一标准定义,全部由目录项所构成的文件称为目录文件。
文件的共享方式
动态、静态、符号链接
操作系统
操作系统是管理系统资源、控制程序执行、改善人机界面、提供各种服务、合理组织计
算机工作流程、为用户有效使用计算机提供良好运行环境的系统软件。主要特性:并发性、
共享性、异步性。
操作系统的用户接口
操作系统提供两种用户接口:操作(命令)接口和
更多相关内容 -
MCS-51的中断系统
2020-06-05 09:43:03MCS-51单片机内的中断系统主要用于实时测控,即要求单片机能及时地响应和处理单片机外部或内部事件所提出的中断请求。由于这些中断请求都时随机发出的,如果采用定时查询方式来处理这些中断请求,则单片机的工作效率...【说明】本文学习自《单片机原理及应用(张毅刚)》
目录
MCS-51单片机内的中断系统主要用于实时测控,即要求单片机能及时地响应和处理单片机外部或内部事件所提出的中断请求。由于这些中断请求都时随机发出的,如果采用定时查询方式来处理这些中断请求,则单片机的工作效率低,且得不到实时处理。因此,MCS-51单片机要实时处理这些中断请求,就必须采用具有中断处理功能的部件——中断系统来完成。
* 为什么用中断,因为定时查询的效率低。(注意这里讲的定时查询不是定时器查询)
1 中断的概念
当MCS-51单片机的CPU正在处理某件事情(例如,正在执行主程序)的时候,单片机外部或内部发生的某一事件(如外部设备产生的一个电平的变化,一个脉冲沿的发生或内部计数器的计数溢出等)请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。中断服务处理程序处理完该事件后,再回到原来被中止的地方,继续原来的工作(例如,继续执行被中断的主程序),这称为中断。CPU处理事件的过程,称为CPU的中断响应过程,如图5-1所示。对事件的整个处理过程,称为中断处理(或中断服务)。
图 1-1 中断响应过程
能够实现中断处理功能的部件称为中断系统;产生中断的请求源称为中断请求源(或中断源);中断源向CPU提出的处理请求,称为中断请求(或中断申请)。当CPU暂时中止正在执行的程序,转去执行中断服务程序时,除了硬件自动把断点地址(16位程序计数器PC的值)压入堆栈之外,用户应注意保护有关的工作寄存器、累加器、标志位等信息,这称为保护现场。在完成中断服务程序后,恢复有关的工作寄存器、累加器、标志位内容,这称为恢复现场。最后执行中断返回指令RETI。从堆栈中自动弹出断点地址到PC,继续执行被中断的程序,这称为中断返回。
如果没有中断技术,CPU的大量时间可能会浪费在原地踏步的查询操作上,或者采用定时查询,即不论又无中断请求,都要定时去查询。采用中断技术完全消除了CPU在查询方式中的等待现象,大大地提高了CPU的工作效率。由于中断工作方式的优点极为明显,因此在单片机的硬件结构中都带有中断系统。
2 MCS-51中断系统的结构
MCS-51单片机的中断系统有5个中断请求源,具有2个中断优先级,可实现2级中断服务程序嵌套。用户可以用关中断指令“CLR EA”来屏蔽所有的中断请求,也可以用开中断指令“SET EA”来允许CPU接收中断请求;每一个中断源可以用软件独立地控制为允许中断或关中断状态;每一个中断源的中断级别均可用软件来设置。
MCS-51的中断系统结构示意图如图5-2所示。下面将从应用的角度来说明MCS-51的中断系统的工作原理和编程方法。
图2-2 MCS-51 的中断系统结构
3 中断请求源
MCS-51中断系统共有5个中断请求源(见图3-1),它们是:
(1)
——外部中断请求0,由
引脚输入,中断请求标志为IE0。
(2)
——外部中断请求1,由
引脚输入,中断请求标志为IE1。
(3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。
(4)定时器/计数器T1溢出中断请求,中断请求标志为TF1。
(5)串行口中断请求,中断请求标志为T1或R1。
这些中断请求源的中断请求标志位分别由特殊功能寄存器TCON和SCON的相应位锁存。
TCON为定时器/计数器的控制寄存器,字节地址为88H,可位寻址。该寄存器中既有定时器/计数器T0和T1的溢出中断请求标志位TF1和TF0,也包括了有关外部中断请求标志位IE1和IE0。其格式如图5-3所示:
图3-1 TCON中的中断请求标志位
TCON寄存器中与中断系统有关的各标志位的功能如下:
(1)IT0——选择外部中断请求0为跳沿触发方式还是电平触发方式;
IT0=0,为电平触发方式,加到引脚 上的外部中断请求输入信号为低电平有效。
IT1=1,为跳沿触发方式,加到引脚 上的外部中断情求输入信号电平从高到低的负跳变有效。
IT0位可由软件置1或清0。
(2)IE0 —— 外部中断请求0的中断请求标志位。
当IT0=0,为电平触发方式,CPU在每个机器周期的S5P2采样 引脚,若 引脚为低电平,则置IE0为1,说明有中断请求,否则IE0清0。
当IT0 = 1,即外部中断请求0设置为跳沿触发方式时,当低一个机器周期采样到 为低电平时,则置IE0为1。IE0=1,表示外部中断0正在向CPU请求中断。当CPU响应该中断,转向中断服务程序时,由硬件对IE0清0。
(3)IT1——选择外部中断请求1为跳沿触发方式还是电平触发方式,其意义与IT0类似。
(4)IE1——外部中断请求1的中断请求标志位,其意义与IE0类似。
(5)TF0——MCS-51片内定时器/计数器T0溢出中断请求标志位。
当启动T0计数后,定时器/计数器T0从初值开始加1计数,当最高位产生溢出时,由硬件对TF0置1,向CPU申请中断,CPU响应TF0中断时,对TF0清0,TF0也可由软件清0。
(6)TF1——MCS-51片内的定时器/计数器T1的溢出中断请求标志位,功能和TF0类似。
TR1(D6位)、TR0(D4位)这2个位与中断无关,仅与定时器/计数器T1和T0有关,它们的功能将在定时器/计数器一章中介绍。
当MCS-51复位后,TCON被清0,则CPU关中断,锁由中断请求被禁止。
SCON为串行口控制寄存器,字节地址为98H,可位寻址。SCON的低2位锁存串行口的发送中断和接收中断的中断请求标志T1和R1,其格式如图3-2所示:
图3-2 SCON中的中断请求标志位
SCON中各标志位的功能入下:
(1)TI——串行口的发送中断请求标志位。CPU将1B的数据写入发送缓冲器SBUF时,就启动1帧串行数据的发送,每发送完1帧串行数据后,硬件自动对T1置1。CPU响应串行口发送中断时,CPU并不清除T1中断请求标志,必须在中断服务程序中用软件对T1标志清0。
(2)RI——串行口接收中断请求标志位。在串行口接收完1个串行数据帧,硬件自动对RI中断请求标志置1。CPU在响应串行口接收中断时,并不对RI标志清0,必须在中断服务程序中用软件对RI清0。
4 中断控制
4.1 中断允许寄存器IE
MCS-51的CPU对中断源的开放或屏蔽,是由片内的中断允许寄存器IE控制的。IE的字节地址为A8H,可进行位寻址。其格式如图4-1所示:
图4-1 中断允许寄存器IE的格式
中断允许寄存器IE对中断的开放和关闭实现2级控制。所谓2级控制,就是有1个总的开关中断控制位EA(IE.7位),当EA=0时,所以的中断请求被屏蔽,CPU对任何中断请求都不接受,称CPU关中断;当EA=1时,CPU开放中断,但5个中断源的中断请求是否允许,还要由IE中的低5位所对应的5个中断请求允许控制位的状态来决定(见图4-1)。
IE中各位的功能如下:
(1)EA——中断允许总控制位
EA = 0,CPU屏蔽所有的中断请求(CPU关中断);
EA = 1,CPU开放所有中断(CPU开中断)。
(2)ES——串行口中断允许位
ES = 0,禁止串行口中断;
ES = 1,允许串行口中断;
(3)ET1——定时器/计数器T1的溢出中断允许位
ET1 = 0,禁止T1溢出中断;
ET1 = 1,允许T1溢出中断;
(4)EX1——外部中断1中断允许位
EX1 = 0,禁止外部中断1中断;
EX1 = 1,允许外部中断1中断。
(5)ET0——定时器/计数器T0的溢出中断允许位
ET0 = 0,禁止T0溢出中断;
ET0 = 1,允许T0溢出中断。
(6)EX0——外部中断0中断允许位。
EX0 = 0,禁止外部中断0中断;
EX0 = 1,允许外部中断0中断。
MCS-51复位以后,IE被清0,所有的中断请求被禁止。由用户程序置1或对IE相应的位清0,即可允许或禁止各中断源的中断申请。若使某一个中断源被允许中断,除了相应的位被置1外,还必须使EA=1,即CPU开放中断。改变IE的内容,可由位操作指令来实现(即SETB bit; CLR bit),也可用字节操作指令实现(即MOV IE, #data; ANL IE, #data; ORL IE,#data; MOV IE, A等)。
例4-1 若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。请编写出设置IE的相应程序段。
(1)用位操作指令来编写如下程序段:
CLR ES ;禁止串行口中断 CLR EX1 ;禁止外部中断1中断 CLR EX0 ;禁止外部中断0中断 SETB ET0 ;允许定时器/计数器T0中断 SETB ET1 ;允许定时器/计数器T1中断 SETB EA ;CPU开中断
(2)用字节操作指令来编写:
MOV IE, #8AH
或者用:
MOV 0A8H, #8AH ;A8H为IE寄存器的地址字节地址
4.2 中断优先级寄存器IP
MCS-51的中断请求源有2个中断优先级,每一个中断请求源可由软件定为高优先级中断或低优先级中断,可实现2级中断嵌套,所谓2级中断嵌套,就是CPU正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,去执行高优先级中断服务程序,待高优先级中断处理完毕后,再返回低优先级中断服务程序。
2级中断嵌套的过程如图4-2所示。
图 4-2 2级中断嵌套
由图4-2可见,一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断,一直执行到中断服务程序结束,遇到中断返回指令RETI,返回主程序再执行一条指令后才能响应新的中断请求。以上所述可以归纳为下面两条基本规则:
(1)低优先级可被高优先级中断,反之则不能。
(2)任何一种中断(不管时高级还是低级),一旦得到响应,不会再被它的同级中断源所中断。如果某一中断源被设置为高优先级中断,在执行该中断源的中断服务程序时,则不能被任何其它中断源的中断请求所中断。
MCS-51的片内有一个中断优先级寄存器IP,其字节地址为B8H,可位寻址。只要用程序改变其内容,即可进行各中断源中断级别的设置,IP寄存器的格式如图4-3所示:
图 4-3 中断优先级寄存器IP的格式
中断优先级寄存器IP各个位的含义如下:
(1)PS——串行口中断优先级控制位
PS=1,串行口中断定义为高优先级中断;
PS=0,串行口中断定义为低优先级中断。
(2)PT1——定时器T1中断优先级控制位
PT1=1,定时器T1定义为高优先级中断;
PT1=0,定时器T1定义为低优先级中断。
(3)PX1——外部中断1中断优先级控制位
PX1=1,外部中断1定义为高优先级中断;
PX1=0,外部中断1定义为低优先级中断。
(4)PT0——定时器T0中断优先级控制位
PT0=1,定时器T0定义为高优先级中断;
PT0=0,定时器T0定义为低优先级中断。
(5)PX0——外部中断0中断优先级控制位
PX0=1,外部中断0定义为高优先级中断;
PX0=0,外部中断0定义为低优先级中断。
中断优先级控制寄存器IP的各位都由用户程序置1和清0,可用位操作指令或字节操作指令更新IP的内容,以改变各中断源的中断优先级。
MCS-51复位以后,IP的内容为0,各个中断源均为低优先级中断。
为进一步了解MCS-51中断系统的优先级,简单介绍一下MCS-51的中断优先级结构。MCS-51的中断系统有两个不可寻址的优先级激活触发器。其中一个指示某高优先级的中断正在执行,所有后来的中断均被阻止。另一个触发其指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。
在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序如下:
由上可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断的优先权最低。
例4-2 设置IP寄存器的初始值,使得MCS-51的2各外中断请求为高优先级,其它中断请求为低优先级。
(1)用位操作指令
SETB PX0 ;2个外中断为高优先级 SETB PX1 CLR PS ; 串行口、2个定时器/计数器为低优先级中断 CLR PT0 CLR PT1
(2)用字节操作指令
MOV IP, #05H
或者用:
MOV 0B8H, #05H ;B8H为IP寄存器的字节地址
5 响应中断请求的条件
一个中断源的中断请求被响应,需满足以下必要条件:
(1)CPU开中断,即IE寄存器中的中断总允许位EA=1。
(2)该中断源发出中断请求,即该中断源对应的中断请求标志为1。
(3)该中断源的中断允许位=1,即该中断没有被屏蔽。
(4)无同级或更高级中断正在被服务。
中断响应就是CPU对中断源提出的中断请求的接受。当CPU查询到有效的中断请求,并满足上述条件时,紧接着就是进行中断响应。
中断响应的主要过程是首先由硬件自动生成一条长调用指令LCALL addr16。这里的addr16就是程序存储区中的相应的中断入口地址。例如,对于外部中断1的响应,产生的长调用指令为:
LCALL 0013H
生成LCALL指令后,紧接着就由CPU执行该指令。首先是将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。各中断服务程序的入口地址是固定的,如下所示:
2个中断入口间只相隔8B,一般情况下难以安排一个完整的中断服务程序。因此,通常总是再中断入口地址放置1条无条件转移指令,使程序执行转向在其它地址存放的中断服务程序。
中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当遇到下列三种情况之一时,中断响应被封锁:
(1)CPU正在处理同级的或更高优先级的中断。因为当一个中断被响应时,要把对应的中断优先级状态触发器置1(该触发器指出CPU所处理的中断优先级别),从而封锁了低级中断和同级中断请求。
(2)所查询的机器周期不是当前所正在执行指令的最后一个机器周期。作这个限制的目的是只有在当前指令执行完毕后,才能进行中断响应,以确保当前指令完整的执行。
(3)正在执行的指令是RETI或是访问IE或IP的指令。因为按MCS-51中断系统特性的规定,在执行完这些指令后,需要再去执行完一条指令,才能响应新的中断请求。
如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能对中断进行响应。
6 外部中断的响应时间
在设计者使用外部中断时,有时需考虑从外部中断请求有效(外部中断请求标志置1)到转向中断入口地址所需要的响应时间。下面来讨论这个问题。
外部中断的最短响应时间为3个机器周期。其中中断请求标志位查询占起个机器周期,而这个机器周期恰好是处于指令的最后一个机器周期,在这个机器周期结束后,中断即被响应,CPU接着执行1条硬件子程序调用指令LCALL以转到相应的中断服务程序入口,则需要2个机器周期。
外部中断响应的最长时间为8个机器周期。这种情况发生在CPU进行中断标志查询是,刚好是开始执行RETI或是访问IE或IP的指令,则需把当前指令执行完再继续执行1条指令后,才能响应中断。执行上述的RETI或是访问IE或IP的指令,最长需要2个机器周期。而接着再执行的1条指令,按最长的指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。再加上硬件子程序调用指令LCALL的执行,需要2个机器周期,所以,外部中断响应最长时间为8个机器周期。
如果已经在处理同级或更高级中断,外部中断请求的响应时间取决于正在执行的中断服务程序的处理时间,这种情况下,响应时间就无法计算了。
这样,在1个单一中断的系统里,MCS-51单片机对外部中断请求的响应时间总是在3~8个机器周期之间。
7 外部中断的触发方式选择
外部中断的触发有2种触发方式:电平触发方式和跳沿触发方式。
7.1 电平触发方式
若外部中断定义为电平触发方式,外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入线的电平变化而变化,这能提高CPU对外部中断请求的响应速度。当外部中断源被设定为电平触发方式时,在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),否则CPU返回主程序后会再次响应中断。所以电平触发方式适合于外部中断以低电平输入而且中断服务程序能清除外部中断请求源(即外部中断输入电平又变为高电平)的情况。
7.2 跳沿触发方式
外部中断若定义为跳沿触发方式,外部中断请求触发器能锁存外部中断输入线上的负跳变。即便是CPU暂时不能响应,中断请求标志也不会丢失。在这种方式里,如果相继连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置1中断申请触发器,直到CPU响应此中断时,该标志才清0。这样不会丢失中断,但输入的负脉冲宽度至少保持12个时钟周期(若晶振频率为6MHz,则为2us),才能被CPU采样到。外部中断的跳沿触发方式适合于以负脉冲形式输入的外部中断请求。
8 中断请求的撤销
某个中断请求被响应后,就存在着一个中断请求的撤销问题。下面按中断请求源的类型分别说明中断请求的撤销方法。
1 定时器/计数器中断请求的撤销
定时器/计数器中断的中断请求被响应后。硬件会自动把中断请求标志位(TF0或TF1)清0,因此定时器/计数器中断请求是自动撤销的。
2 外部中断请求的撤销
(1)跳沿方式外部中断请求的撤销:跳沿方式的外部中断请求的撤销,包括2项内容:中断标志位的清0和外中断信号的撤销。其中,中断标志位(IE0或IE1)的清0是在中断响应后由硬件自动完成的。而外中断请求信号的撤销,由于跳沿信号过后也就消失了,所以跳沿方式的外部中断请求也是自动撤销的。
(2)电平方式外部中断请求的撤销:对于电平方式外部中断请求的撤销,中断请求标志的撤销是自动的,但中断请求信号的低电平可能继续存在,在以后的机器周期采样时,又会把已清0的IE0或IE1标志位重新置1。为此,要彻底解决电平方式外部中断请求的撤销,除了标志位清0之外,必要时还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平。为i此,可在系统中增加如图5-8所示的电路。
图 8-1 电平方式外部中断请求的撤销电路
由图8-1可见,用D触发器锁存外来的中断请求低电平,并通过D触发器的输出端Q接到
(或
)。所以,增加的D触发器不影响中断请求。中断响应后,为了撤销中断请求,可利用D触发器的直接置位端SD实现,把SD端接MCS-51的P1.0端。因此,只要P1.0端输出一个负脉冲就可以使D触发器置1,从而撤销了低电平的中断请求信号。所需的负脉冲可通过在中断服务程序中增加如下2条指令得到:
ORL P1, #01H ;P1.0为1 ANL P1, #0FEH ;P1.0为0
可见,电平方式的外部中断请求信号的完全撤销,是通过软硬件相结合的方法来实现的。
3 串行口中断请求的撤销
串行口中断请求的撤销只有标志位清0的问题。串行口中断的标志位是TI和RI,但着2个中断标志CPU不进行自动清0。因为在响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这2个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即用如下的指令来进行串行口中断标志位的清除:
CLR T1 ;清TI标志位 CLR RI ;清RI标志位
9 中断服务程序的设计
中断系统虽是硬件系统,但必须由相应软件配合才能正确使用。设计中断服务程序需要弄清楚以下几个问题。
1 中断服务程序设计的任务
中断服务程序设计的基本任务有下列几条:
(1)设置中断允许控制寄存器IE,允许相应的中断请求源中断。
(2)设置中断优先级寄存器IP,确定并分配所使用的中断源的优先级。
(3)若是外部中断源,还要设计中断请求的触发方式IT1或IT0,以决定采用电平触发方式还是跳沿触发饭方式。
(4)编写中断服务程序,处理中断请求。
前3条一般方在程序的初始化程序段中。
例9-1 假设允许外部中断0中断,并设定它为高级中断,其它中断源为低机中断,采用跳沿触发方式。在主程序中可编写如下程序段:
SETB EA ;EA位置1,CPU开中断 SETB ET0 ;ET0位置1,允许外部中断0产生中断 SETB PX0 ;PX0位置1,外部中断0为高级中断 SETB IT0 ;IT0位置1,外部中断0为跳沿触发方式
2 采用中断时的主程序结构
由于各中断入口地址是固定的,而程序又必须先从主程序起始地址0000H执行。所以,在0000H起始地址的几个字节中,要用无条件转移指令,跳转到主程序。另外,各中断入口地址之间依次相差8B。中断服务程序稍长就超过8B,这样中断服务程序就占用了其它的中断入口地址,影响其它中断源的中断。为此,一般在进入中断后,利用1条无条件转移指令,跳转到远离其它中断入口的中断服务主程序入口地址。
常用的主程序结构如下:
ORG 0000H LJMP MAIN ORG 中断入口地址 LJMP INT ORG ××××H MAIN:【主程序】 INT:【中断服务程序】
注意:在一上的主程序结构中,如果有多个中断源,就对应有对各“ORG中断入口地址”,多各“ORG中断入口地址”必须依次由小到大排列。主程序MAIN的起始地址××××H,根据具体情况来安排。(如果使用C++进行编程,应该不用考虑这个问题)。
3 中断服务程序的流程
MCS-51响应中断后,就进入中断服务程序。中断服务程序的基本流程如图9-1所示。
图9-1 中断服务程序的基本流程
下面对有关中断服务程序执行过程中的一些问题进行说明。
(1)线程保护和现场恢复
所谓现场是指中断时刻单片机中某些寄存器和存储器单元中的数据或状态。为了使中断服务程序的执行不破坏这些数据或状态。为了使中断服务程序的执行不破坏这些数据或状态,以免在中断返回后影响主程序的运行,因此要把它们送入堆栈中保存起来,这就是现场保护。现场保护一定要位于中断处理程序的前面。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出,以恢复那些寄存器和存储单元中的原由内容,这就是现场恢复。现场恢复一定要位于中断处理程序的后面。MCS-51的堆栈操作指令PUSH direct和POP direct,主要是供现场保护和现场恢复使用的。至于要保护哪些内容,应该由用户根据中断处理程序的具体情况来决定。
(2)关中断和开中断
图5-9中保护现场和恢复现场前关中断,是为了防止此时有高一级的中断进入,避免现场被破坏;在保护现场和恢复现场之后的开中断是为了下一次的中断作好准备,也为了允许有更高级的中断进入。这样作的结果是,中断处理可以被打断,但原来的现场保护和现场恢复不允许更改,除了现场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。
但有的时候,对于一个重要的中断,必须执行完毕,不允许被其它的中断所嵌套。对此可在现场保护之前先关闭中断系统,彻底屏蔽其它中断请求,待中断处理完毕后再开中断。这样,就需要将图9-1中的“中断处理”步骤前后的“开中断”和“关中断”两个过程去掉。
至于具体中断请求源的关与开,可通过CLR或SETB指令清0或置1中断允许寄存器IE中的有关位来实现。
(3)中断处理
中断处理是中断请求中断的具体目的。应用设计者应根据任务的具体要求,来编写中断处理部分的程序。
(4)中断返回
中断服务程序的最后1条指令必须是返回指令RETI,RETI指令是中断服务程序结束的标志。CPU执行完这条指令后,把响应中断时所置1的优先级状态触发器清0,然后从堆栈中弹出栈顶上的2B的断点地址送到程序计数器PC,弹出的第一个字节送入PCH,弹出的第二各字节送入PCL,CPU从断点处重新执行被中断的主程序。
例9-2 根据图9-1的中断服务程序流程,编写出中断服务程序。假设,现场保护只需要将PSW寄存器和累加器A的内容压入堆栈中保护起来。
一个典型的中断服务程序如下:
INT: CLR EA ;CPU关中断 PUSH PSW ;现场保护 PUSH A SETB EA ;CPU开中断 【中断处理程序段】 CLR EA ;CPU关中断 POP A ;现场恢复 POP PSW SETB EA ;CPU开中断 RETI ;中断返回,恢复断点
上述程序有几点需要说明的是:
-
1、 本例的现场保护假设仅仅涉及到PSW和A的内容,如果还有其它的需要保护的内容,需要在相应的位置再加几条PUSH和POP指令即可。注意,对堆栈的操作是先进后出,次序不可颠倒。
-
2、中断服务程序中的“中断处理程序段”,应用设计者应根据中断任务的具体要求,来编写这部分中断处理程序。
-
3、如果本中断服务程序不允许被其它的中断所中断。可将“中断处理程序段”前后的“SETB EA”和“CLR EA”两条指令去掉。
-
4、中断服务程序的最后一条指令必须是返回指令RETI,千万不可缺少。它是中断服务程序结束的标志。CPU执行完着跳指令后,返回断点处,从断点处重新执行被中断的主程序。
10 多外部中断源系统设计
MCS-51为用户提供两个外部中断请求输入端
和
,实际的应用系统中,两个外部中断请求源往往不够用,需对外部中断源进行扩充。本节介绍如何来扩充外部中断源的方法。
10.1 定时器/计数器作为外部中断源的使用方法
MCS-51有两个定时器/计数器(有关定时器/计数器的工作原理将在下一章介绍),当它们选择为计数器工作模式,T0引脚上发生负跳变时,T0(或T1)计数器加1,利用这个特性,可以把T0(或T1)引脚作为外部中断请求输入引脚,而定时器/计数器的溢出中断TF0(或TF1)作为外部中断请求标志。例如:定时器/计数器T0设置为方式2(自动恢复常数方式)外部计数工作模式,计数器TH0、TL0初始值均为0FFH,并允许T0中断,CPU开放中断,初始化程序如下:
ORG 0000H AJMP IINI . . . IINI: MOV TMOD, #06H ;设置T0的工作方式寄存器 MOV TL0, #0FFH ;给计数器设置初值 MOV TH0, #0FFH SETB TR0 ;启动T0,开始计数 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断
当连接在P3.4(T0引脚)的外部中断请求输入线上的电平发生负跳变时,TL0加1,产生溢出,TF0置1,向CPU发出中断请求,同时TH0的内容0FFH送TL0,即TL0恢复初值0FFH,这样,P3.4相当于跳沿触发的外部中断请求源输入端。对P3.5也可作类似的处理。
10.2 中断和查询结合的方法
若系统中有多个外部中断请求源,可以按它们的轻重缓急进行排队,把其中最高级别的中断源直接接到MCS-51的一个外部中断请求源IR0输入端
,其余的外部中断请求源IR1~IR4用线或的办法连到MSC-51的另一个外中断源输入端
,同时还连上P1口,外部中断源的中断请求由外设的硬件电路产生,这种方法原则上可处理任意多个外部中断。例如,5个外部中断源的排队顺序依次为:IR0、IR1、……、IR4,对于这样的中断源系统,可以采用如图10-1所示的中断电路。
图 10-1 中断和查询相结合的外部中断请求源系统
图10-1中的4个外设IR1~IR4的中断请求通过集电极开路的OC门构成线或的关系,它们的中断请求输入均通过
传给CPU。无论哪一个外设提出高电平有效的中断请求信号,都会使
引脚的电平变低。究竟是哪个外设提出的中断请求,可通过程序查询P1.0~P1.3引脚上的逻辑电平即可知道。设IR1~IR4这4个中断请求源的高电平可由相应的中断服务程序清0。
的中断服务程序如下:
ORG 0013H ; $\overline{INT1}$ 的中断入口 LJMP INT1 . . . INT1: PUSH PSW ;保护现场 PUSH A JB P1.0, IR1 ;如P1.0引脚为高,则IR1有中断请求,跳标号IR1处理 JB P1.1, IR2 ;如P1.1引脚为高,则IR2有中断请求,跳标号IR2处理 JB P1.2, IR3 ;如P1.2引脚为高,则IR3有中断请求,跳标号IR3处理 JB P1.3, IR4 ;如P1.3引脚为高,则IR4有中断请求,跳标号IR4处理 INTIR: POP A ;恢复现场 POP PSW RETI ;中断返回 IR1: 【IR1的中断处理程序】 AJMP INTIR ;IR1中断处理完毕,跳标号INTIR处执行 IR2: 【IR2的中断处理程序】 AJMP INTIR ;IR2中断处理完毕,跳标号INTIR处执行 IR3: 【IR3的中断处理程序】 AJMP INTIR ;IR3中断处理完毕,跳标号INTIR处执行 IR4: 【IR4的中断处理程序】 AJMP INTIR ;IR4中断处理完毕,跳标号INTIR处执行
查询法扩展外部中断源比较简单,但是扩展的外部中断源个数较多时,查询时间稍长。
-
-
Linux内核中断系统处理机制-详细分析
2018-08-23 23:09:24日期 ...中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续...日期 内核版本 架构 作者 内容 2018-8-23 Linux-2.6.32 X86
Bystander Linux内核中断 -
一、中断概述
中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。
1.1中断类型
同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。
异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。
异常又可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。而中断可分为故障(fault)、陷阱(trap)、终止(abort)三类。
从广义上讲,中断又可分为四类:中断、故障、陷阱、终止。这些类别之间的异同点请参考 表 1。
表 1:中断类别及其行为
类别
原因
异步/同步
返回行为
中断
来自I/O设备的信号
异步
总是返回到下一条指令
陷阱
有意的异常
同步
总是返回到下一条指令
故障
潜在可恢复的错误
同步
返回到当前指令
终止
不可恢复的错误
同步
不会返回
有些参考资料中按照中断来源进行分类,如下图所示(个人建议不采用这种方式):
图1-1
1.2区分中断号与中断向量
I/O设备把中断信号发送给中断控制器(8259A)时与之相关联的是一个中断号,当中断控制器把中断信号发送给CPU时与之关联的是一个中断向量。换个角度分析就是中断号是从中断控制器层面划分,中断向量是从CPU层面划分,所以中断号与中断向量之间存在一对一映射关系。在Intel X86中最大支持256种中断,从0到255开始编号,这个8位的编号就是中断向量。其中将0到31保留用于异常处理和不可屏蔽中断。
-
二、中断数据处理结构
Linux内核中处理中断主要有三个数据结构,irq_desc,irq_chip和irqaction。
在\include\linux\ irq.h中定义了
1)irq_desc用于描述IRQ线的属性与状态,被称为中断描述符。
/** * struct irq_desc - interrupt descriptor * @irq: interrupt number for this descriptor * @timer_rand_state: pointer to timer rand state struct * @kstat_irqs: irq stats per cpu * @irq_2_iommu: iommu with this irq * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()] * @chip: low level interrupt hardware access * @msi_desc: MSI descriptor * @handler_data: per-IRQ data for the irq_chip methods * @chip_data: platform-specific per-chip private data for the chip * methods, to allow shared chip implementations * @action: the irq action chain * @status: status information * @depth: disable-depth, for nested irq_disable() calls * @wake_depth: enable depth, for multiple set_irq_wake() callers * @irq_count: stats field to detect stalled irqs * @last_unhandled: aging timer for unhandled count * @irqs_unhandled: stats field for spurious unhandled interrupts * @lock: locking for SMP * @affinity: IRQ affinity on SMP * @node: node index useful for balancing * @pending_mask: pending rebalanced interrupts * @threads_active: number of irqaction threads currently running * @wait_for_threads: wait queue for sync_irq to wait for threaded handlers * @dir: /proc/irq/ procfs entry * @name: flow handler name for /proc/interrupts output */ struct irq_desc{ unsigned int irq; struct timer_rand_state *timer_rand_state; unsigned int *kstat_irqs; #ifdef CONFIG_INTR_REMAP struct irq_2_iommu *irq_2_iommu; #endif irq_flow_handler_t handle_irq; struct irq_chip *chip; struct msi_desc *msi_desc; void *handler_data; void *chip_data; struct irqaction *action; /* IRQ action list */ unsigned int status; /* IRQ status */ unsigned int depth; /* nested irq disables */ unsigned int wake_depth; /* nested wake enables */ unsigned int irq_count; /* For detecting broken IRQs */ unsigned long last_unhandled; /* Aging timer for unhandled count */ unsigned int irqs_unhandled; spinlock_t lock; #ifdef CONFIG_SMP cpumask_var_t affinity; unsigned int node; #ifdef CONFIG_GENERIC_PENDING_IRQ cpumask_var_t pending_mask; #endif #endif atomic_t threads_active; wait_queue_head_t wait_for_threads; #ifdef CONFIG_PROC_FS struct proc_dir_entry *dir; #endif const char *name; }
2)irq_chip用于描述不同类型的中断控制器。
/** * struct irq_chip - hardware interrupt chip descriptor * * @name: name for /proc/interrupts * @startup: start up the interrupt (defaults to ->enable if NULL) * @shutdown: shut down the interrupt (defaults to ->disable if NULL) * @enable: enable the interrupt (defaults to chip->unmask if NULL) * @disable: disable the interrupt (defaults to chip->mask if NULL) * @ack: start of a new interrupt * @mask: mask an interrupt source * @mask_ack: ack and mask an interrupt source * @unmask: unmask an interrupt source * @eoi: end of interrupt - chip level * @end: end of interrupt - flow level * @set_affinity: set the CPU affinity on SMP machines * @retrigger: resend an IRQ to the CPU * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ * @set_wake: enable/disable power-management wake-on of an IRQ * * @bus_lock: function to lock access to slow bus (i2c) chips * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips * * @release: release function solely used by UML * @typename: obsoleted by name, kept as migration helper */ struct irq_chip { const char *name; unsigned int (*startup)(unsigned int irq); void (*shutdown)(unsigned int irq); void (*enable)(unsigned int irq); void (*disable)(unsigned int irq); void (*ack)(unsigned int irq); void (*mask)(unsigned int irq); void (*mask_ack)(unsigned int irq); void (*unmask)(unsigned int irq); void (*eoi)(unsigned int irq); void (*end)(unsigned int irq); int (*set_affinity)(unsigned int irq, const struct cpumask *dest); int (*retrigger)(unsigned int irq); int (*set_type)(unsigned int irq, unsigned int flow_type); int (*set_wake)(unsigned int irq, unsigned int on); void (*bus_lock)(unsigned int irq); void (*bus_sync_unlock)(unsigned int irq); /* Currently used only by UML, might disappear one day.*/ #ifdef CONFIG_IRQ_RELEASE_METHOD void (*release)(unsigned int irq, void *dev_id); #endif /* * For compatibility, ->typename is copied into ->name. * Will disappear. */ const char *typename; }
在\include\linux\ interrupt.h中定义了 irqaction用来描述特定设备所产生的中断描述符。
/** * struct irqaction - per interrupt action descriptor * @handler: interrupt handler function * @flags: flags (see IRQF_* above) * @name: name of the device * @dev_id: cookie to identify the device * @next: pointer to the next irqaction for shared interrupts * @irq: interrupt number * @dir: pointer to the proc/irq/NN/name entry * @thread_fn: interupt handler function for threaded interrupts * @thread: thread pointer for threaded interrupts * @thread_flags: flags related to @thread */ struct irqaction { irq_handler_t handler; unsigned long flags; const char *name; void *dev_id; struct irqaction *next; int irq; struct proc_dir_entry *dir; irq_handler_t thread_fn; struct task_struct *thread; unsigned long thread_flags; };
-
三、Linux中断机制
Linux中断机制由三部分组成:
- 中断子系统初始化:内核自身初始化过程中对中断处理机制初始化,例如中断的数据结构以及中断请求等。
- 中断或异常处理:中断整体处理过程。
- 中断API:为设备驱动提供API,例如注册,释放和激活等。
3.1中断子系统初始化
3.1.1中断描述符表(IDT)初始化
中断描述符表初始化需要经过两个过程:
- 第一个过程在内核引导过程。由两个步骤组成,首先给分配IDT分配2KB空间(256中断向量,每个向量由8bit组成)并初始化;然后把IDT起始地址存储到IDTR寄存器中。
- 第二个过程内核在初始化自身的start_kernal函数中使用trap_init初始化系统保留中断向量,使用init_IRQ完成其余中断向量初始化。
3.1.2中断请求队列初始化
init_IRQ调用pre_intr_init_hook,进而最终调用init_ISA_irqs初始化中断控制器以及每个IRQ线的中断请求队列。
3.2中断或异常处理
中断处理过程:设备产生中断,并通过中断线将中断信号送往中断控制器,如果中断没有被屏蔽则会到达CPU的INTR引脚,CPU立即停止当前工作,根据获得中断向量号从IDT中找出门描述符,并执行相关中断程序。
异常处理过程:异常是由CPU内部发生所以不会通过中断控制器,CPU直接根据中断向量号从IDT中找出门描述符,并执行相关中断程序。
图3-1
中断控制器处理主要有5个步骤:1.中断请求 2.中断响应 3.优先级比较 4.提交中断向量 5.中断结束。这里不再赘述5个步骤的具体流程。
CPU处理流程主要有6个步骤:1.确定中断或异常的中断向量 2.通过IDTR寄存器找到IDT 3.特权检查 4.特权级发生变化,进行堆栈切换 5.如果是异常将异常代码压入堆栈,如果是中断则关闭可屏蔽中断 6.进入中断或异常服务程序执行。这里不再赘述6个步骤的具体流程。
3.3中断API
内核提供的API主要用于驱动的开发。
注册IRQ:
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);
释放IRQ:
void free_irq(unsigned int, void *);
注:IRQ线资源非常宝贵,我们在使用时必须先注册,不使用时必须释放IRQ资源。
激活当前CPU中断:
local_irq_enable();
禁止当前CPU中断:
local_irq_disable();
激活指定中断线:
void enable_irq(unsigned int irq);
禁止指定中断线:
void disable_irq(unsigned int irq);
禁止指定中断线:
void disable_irq_nosync(unsigned int irq);
注:此函数调用irq_chip中disable禁止指定中断线,所以不会保证中断线上执行的中断服务程序已经退出。
3.4中断机制划分
由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍;但是在实际系统中,当中断到来时,要完成工作往往进行大量的耗时处理。因此期望让中断处理程序运行得快,并想让它完成的工作量多,这两个目标相互制约,诞生——顶/底半部机制。
中断处理程序是顶半部——接受中断,它就立即开始执行,但只有做严格时限的工作。能够被允许稍后完成的工作会推迟到底半部去,此后,在合适的时机,底半部会被开终端执行。顶半部简单快速,执行时禁止一些或者全部中断。
底半部稍后执行,而且执行期间可以响应所有的中断。这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。顶半部只有中断处理程序机制,而底半部的实现有软中断,tasklet和工作队列实现。
图3-2 注:登记中断,将底半部处理程序挂到该设备的低半部执行队列中。
3.4.1顶/底半部划分原则:
1) 如果一个任务对时间非常敏感,将其放在顶半部中执行;
2) 如果一个任务和硬件有关,将其放在顶半部中执行;
3) 如果一个任务要保证不被其他中断打断,将其放在顶半部中执行;
4) 其他所有任务,考虑放置在底半部执行。
3.4.2底半部实现机制
图3-3
软中断:
软中断作为下半部机制的代表,是随着SMP(share memory processor)的出现应运而生的,它也是tasklet实现的基础(tasklet实际上只是在软中断的基础上添加了一定的机制)。软中断一般是“可延迟函数”的总称,有时候也包括了tasklet(请读者在遇到的时候根据上下文推断是否包含tasklet)。它的出现就是因为要满足上面所提出的上半部和下半部的区别,使得对时间不敏感的任务延后执行,软中断执行中断处理程序留给它去完成的剩余任务,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。它的特性包括:
a)产生后并不是马上可以执行,必须要等待内核的调度才能执行。软中断不能被自己打断,只能被硬件中断打断(上半部)。
b)可以并发运行在多个CPU上(即使同一类型的也可以)。所以软中断必须设计为可重入的函数(允许多个CPU同时操作),因此也需要使用自旋锁来保护其数据结构。
内核中定义了几种软中断的用途:
enum { HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, BLOCK_IOPOLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_SOFTIRQS };
Tasklet:
tasklet是通过软中断实现的,所以它本身也是软中断。
软中断用轮询的方式处理。假如正好是最后一种中断,则必须循环完所有的中断类型,才能最终执行对应的处理函数。显然当年开发人员为了保证轮询的效率,于是限制中断个数为32个。
为了提高中断处理数量,顺道改进处理效率,于是产生了tasklet机制。
Tasklet采用无差别的队列机制,有中断时才执行,免去了循环查表之苦。Tasklet作为一种新机制,显然可以承担更多的优点。正好这时候SMP越来越火了,因此又在tasklet中加入了SMP机制,保证同种中断只能在一个cpu上执行。在软中断时代,显然没有这种考虑。因此同一种软中断可以在两个cpu上同时执行,很可能造成冲突。
总结下tasklet的优点:
(1)无类型数量限制;
(2)效率高,无需循环查表;
(3)支持SMP机制;
它的特性如下:
1)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行。
2)多个不同类型的tasklet可以并行在多个CPU上。
3)软中断是静态分配的,在内核编译好之后,就不能改变。但tasklet就灵活许多,可以在运行时改变(比如添加模块时)。
工作队列:
上面我们介绍的可延迟函数运行在中断上下文中,于是导致了一些问题,说明它们不可挂起,也就是说软中断不能睡眠、不能阻塞,原因是由于中断上下文出于内核态,没有进程切换,所以如果软中断一旦睡眠或者阻塞,将无法退出这种状态,导致内核会整个僵死。因此,可阻塞函数不能用软中断来实现。但是它们往往又具有可延迟的特性。而且由于是串行执行,因此只要有一个处理时间较长,则会导致其他中断响应的延迟。为了完成这些不可能完成的任务,于是出现了工作队列,它能够在不同的进程间切换,以完成不同的工作。
工作队列能运行在进程上下文,它将工作给一个内核线程,作为中断守护线程来使用。多个中断可以放在一个线程中,也可以每个中断分配一个线程。我们用结构体workqueue_struct表示工作者线程,工作者线程是用内核线程实现的。而工作者线程是如何执行被推后的工作——有这样一个链表,它由结构体work_struct组成,而这个work_struct则描述了一个工作,一旦这个工作被执行完,相应的work_struct对象就从链表上移去,当链表上不再有对象时,工作者线程就会继续休眠。因为工作队列是线程,所以我们可以使用所有可以在线程中使用的方法。
如何选择下半部机制:
- 软中断和tasklet运行在中断上下文,工作队列运行在进程上下文。如果需要休眠则选择工作队列,否则选择tasklet;如果对性能要求较高则选择软中断。
- 从易用性考虑,首选工作队列,然后tasklet,最后是软中断,因为软中断需要静态创建。
- 从代码安全考虑,如果对底半部代码保护不够安全,则选择tasklet,因为相对软中断,tasklet对锁要求低,上面也简述它们工作方式以及运用场景。
四、多处理器系统中断相关概念
4.1处理器间中断
在多处理器系统中,操作系统需要在多个处理器中协调操作,所以需要处理器中断(Inter-Processor-Interrupt,IPI)实现,IPI是一种特殊硬件中断,由CPU送出,其他CPU接收,处理CPU之间通信和同步操作。以下是x86中SMP定义的IPI,中断向量号用十六进制表示:
SPURIOUS_APIC_VECTOR 0xff ERROR_APIC_VECTOR 0xfe RESCHEDULE_VECTOR 0xfd CALL_FUNCTION_VECTOR 0xfc CALL_FUNCTION_SINGLE_VECTOR 0xfb THERMAL_APIC_VECTOR 0xfa THRESHOLD_APIC_VECTOR 0xf9 REBOOT_VECTOR 0xf8 INVALIDATE_TLB_VECTOR_END 0xf7 INVALIDATE_TLB_VECTOR_START 0xf0
4.2中断亲和力
将一个或多个中断服务程序绑定到特定的CPU上处理,这就是中断亲和力(SMP IRQ affinity)。我们可以使用中断亲和力来均衡各个CPU的负载,提高系统处理能力。
以上便是本人对Linux中断的理解,若有纰漏欢迎指正!
-
-
简述操作系统
2016-03-18 19:01:44一、操作系统的基本概念 1.计算机系统的资源 在计算机系统中,资源包括两类,即硬件资源和软件资源。软件资源是计算机的灵魂,主要包括各种程序和数据以及操作系统本身等。操作系统的重要任务之一是有序地管理...1.计算机系统的资源
在计算机系统中,资源包括两类,即硬件资源和软件资源。软件资源是计算机的灵魂,主要包括各种程序和数据以及操作系统本身等。操作系统的重要任务之一是有序地管理计算机中的硬件、软件资源,跟踪资源使用状况,满足用户对资源的需求,协调各程序对资源的使用冲突,为用户提供简单、有效的资源使用方法,最大限度地实现各类资源的共享,提高资源利用率,从而提高计算机系统的工作效率。
2.计算机系统的层次结构
安装了操作系统的计算机称为虚拟机(Virtual Machine),是对裸机的扩展。根据计算机系统的组成和功能,可以把计算机系统分为硬件层、操作系统层、实用程序层(或支撑软件层)和应用程序层等4个层次。每一层表示一组功能和一个界面,表现为一种单向服务的关系,即上一层的软件必须以事先约定的方式使用下一层软件或者硬件提供的服务。
硬件层包括所有硬件资源,提供了基本的可计算性资源,是操作系统和上层软件赖以工作的基础。它的对外界面由机器指令系统组成,操作系统及其外层软件通过执行机器指令访问和控制各种硬件资源。
操作系统层主要完成资源的调度和分配,信息的存取和保护,并发活动的协调和控制等工作。操作系统是其他软件的运行基础,并为编译程序和数据库管理系统等系统程序的设计者提供了有力支撑。
实用程序层是计算机系统软件的基本组成部分,通常包括各种语言的编译程序、文本编辑程序、调试程序、连接程序、系统维护程序、文本加密程序、终端通信程序以及图文处理软件、数据库管理系统等。其功能是为应用层软件及最终用户处理自己的程序或者数据提供服务。
应用程序层处于计算机系统的最外层,解决用户不同的应用问题,应用程序开发者借助于程序设计语言来表达应用问题,开发各种应用程序,既快捷又方便。而最终用户则通过应用程序与计算机交互来解决应用问题。包括用户在操作系统和实用软件支持下自己开发的应用程序,以及软件厂家为行业用户开发的专用应用程序包(例如财务软件、Office套件)等。应用程序层是最终用户使用的界面。当然,从最终用户的角度,除了利用应用程序层的软件之外,也可以利用一些未被隐藏的实用层、操作系统层和硬件层的特性来处理自己的程序和数据。
3.操作系统的层次结构
操作系统分为系统层、管理层和应用层。内层为系统层,具有初级中断处理、外部设备驱动、处理机调度以及实时进程控制和通信的功能。系统层外是管理层,包括存储管理、I/O处理、文件存取、作业调度等。起初,操作系统只是设计成能够执行重复操作的任务,这些任务以管理文件、运行程序和从用户接收命令为中心。文件是存放于硬盘、软盘、磁带等存储设备上的电子数据或程序。大多数用户需要计算机执行诸如从磁盘驱动器上读取和写入文件或在打印机上打印文件等任务。如果没有操作系统,用户需要生成并运行一个程序以完成这些工作。然而,在操作系统中,用户则可以通过简单地向操作系统发送一条指令来执行这种任务。在操作系统中已经包含了从磁盘读取文件的重复操作的设计。
最外层是应用层,是接收并解释用户命令的接口,这个用户接口允许用户与操作系统交互。有些操作系统的用户界面只允许输入命令行,而有些则可以通过菜单和图标来实现。操作系统也管理应用软件,这些应用软件是用于编辑文档或科学计算等任务的一些特殊的应用程序。编辑器就是一个典型的应用程序例子,用它可以编辑文档,改变或增加文本。编辑器本身是一个包含一系列指令的程序,要使用这个程序,应首先把它加载到计算机内存中,然后它的指令被执行。操作系统控制着所有程序和应用软件的加载和执行。
二、操作系统
操作系统是计算机系统软件的核心,有多种分类方法。按照操作系统所提供的功能进行分类,可以分为批处理操作系统、分时操作系统、实时操作系统、单用户操作系统、网络操作系统和分布式操作系统等。
1.批处理操作系统
批处理操作系统是一种早期用在大型机上的操作系统,其特点就是用户脱机使用计算机、作业成批处理和多道程序运行。批处理操作系统要求用户事先把上机解题的作业准备好,包括程序、数据以及作业说明书,然后直接交给系统操作员,并按指定的时间收取运行结果,用户不直接与计算机打交道。系统操作员不是立即进行输入作业,而是要等到一定时间或作业达到一定数量之后才进行成批输入。由系统操作员将用户提交的作业分批进行处理,每批中的作业由操作系统控制执行。
2.分时操作系统
分时操作系统允许多个用户共享同一台计算机的资源,即在一台计算机上连接几台甚至几十台终端机,终端机可以没有CPU与内存,只有键盘与显示器,每个用户都通过各自的终端机使用这台计算机的资源,计算机系统按固定的时间片轮流为各个终端服务。由于计算机的处理速度很快,用户感觉不到等待时间,似乎这台计算机专为自己服务一样。分时操作系统的主要目的是对联机用户的服务响应,具有同时性、独立性、及时性和交互性等特点。在分时操作系统中,分时是指若干道程序对CPU运行时间的分享,通过设立一个单位时间片来实现。也就是说CPU按时间片轮流执行各个作业,一个时间片通常是几十毫秒。
3.实时操作系统
随着工业过程控制和对信息进行实时处理的需要,产生了实时操作系统。“实时”是“立即”的意思,指对随机发生的外部事件做出及时的响应并对其进行处理。实时操作系统指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。实时系统是较少有人为干预的监督和控制系统,其软件依赖于应用的性质和实际使用的计算机的类型。实时系统的基本特征是事件驱动设计,即当接到某种类型的外部信息时,由系统选择相应的程序去处理。实时操作系统是以在允许的时间范围内做出响应为主要特征,要求计算机对外来的信息能以足够快的速度进行处理,并在被控对象允许时间范围内作出快速响应,其响应速度时间在秒级、毫秒级或微秒级甚至更小,通常用在工业过程控制和信息实时处理方面。工业控制主要包括数控机床、电力生产、飞行器、导弹发射等方面的自动控制;信息实时处理主要包 括民航中的查询班机航线和票价、银行系统中的财务处理等。实时操作系统的主要特点是高响应性、高可靠性、高安全性等。分时操作系统与实时操作系统的主要差别是在交互能力和响应时间上,分时系统注重交互性,而实时系统响应时间要求高。UNIX就是典型的多道批处理、分时、实时相结合的多用户多任务分时操作系统,这类操作系统通常用在大、中、小型计算机或工作站中。
4.单用户操作系统
单用户操作系统是随着微机的发展而产生的,用来对一台计算机的硬件和软件资源进行管理,通常分为单用户单任务和单用户多任务两种类型。
单用户单任务操作系统的主要特征是,在一个计算机系统内,一次只能运行一个用户程 序,此用户独占计算机系统的全部硬件和软件资源。常用的单用户单任务操作系统有MS—DOS、PC—DOS等。
单用户多任务操作系统也是为单个用户服务的,但它允许用户一次提交多项任务。例如,用户可以在运行程序的同时开始另一文档的编辑工作,边听音乐边打字也是典型的例子。常用的单用户多任务操作系统有0S/2、Windows 95/98系列等,这类操作系统通常用在 微机系统中。5.网络操作系统
网络操作系统用于对多台计算机的硬件和软件资源进行管理和控制,提供网络通信和网络资源的共享功能。它是负责管理整个网络资源和方便网络用户的程序的集合,要保证网络中信息传输的准确性、安全性和保密性,提高系统资源的利用率和可靠性。
网络操作系统除了一般操作系统的5个基本功能之外,还应具有网络管理模块。网络管理模块的主要功能是提供高效而可靠的网络通信能力;提供多种网络服务,如远程作业录入服务、分时服务、文件传输服务;对网络中的共享资源进行管理;实现网络安全管理。
网络操作系统允许用户通过系统提供的操作命令与多台计算机硬件和软件资源打交道,通常用在计算机网络系统中的服务器上。最有代表性的几种网络操作系统产品是Microsoft公司的Windows 2000 Server/Windows XP、UNIX和Linux等。6.分布式(多处理机)操作系统
分布式系统是由多台计算机经网络连接在一起而组成的系统,系统中任意两台计算机可以通过远程过程调用(RPC,Remote Process Call)交换信息,系统中的计算机无主次之分,系统中的资源供所有用户共享,一个程序可以分布在几台计算机上并行地运行,互相协作完成一个共同的任务。分布式系统的引入主要是为了增加系统的处理能力、节省投资、提高系统的可靠性。用于管理分布式系统资源的操作系统称为分布式操作系统。
三、 操作系统的基本功能与特性1.操作系统的功能
从资源管理的角度来看,操作系统对计算机资源进行控制和管理的功能主要分为如下5部分:
(1)CPU的控制与管理:CPU是计算机系统中最重要的硬件资源,任何程序只有占有了CPU才能运行,其处理信息的速度远比存储器存取速度和外部设备工作速度快,只有协调好它们之间的关系才能充分发挥CPU的作用。操作系统可以使CPU按预先规定的优先顺序和管理原则,轮流地为外部设备和用户服务,或在同一段时间内并行地处理多项任务,以达到资源共享,从而使计算机系统的工作效率得到最大的发挥。
(2)内存的分配与管理:计算机在处理问题时不仅需要硬件资源,还要用到操作系统、编译系统、用户程序和数据等许多软件资源,而这些软件资源何时放到内存的什么地方,用户数据存放到哪里,都需要由操作系统对内存进行统一的分配并加以管理,使它们既保持联系,又避免互相干扰。如何合理地分配与使用有限的内存空间,是操作系统对内存管理的一项重要工作。
(3)外部设备的控制和管理:操作系统控制外部设备和CPU之间的通道,把提出请求的外部设备按一定的优先顺序排好队,等待CPU响应。为提高CPU与输入/输出设备之间并行操作的程度,以及为了协调高CPU和低速输入/输出设备之间的工作节奏,操作系统通常在内存中设定一些缓冲区,使CPU与外部设备通过缓冲区成批传送数据。数据传输方式是,先从外部设备一次读入一组数据到内存的缓冲区,CPU依次从缓冲区读取数据,待缓冲区中的数据用完后再从外部设备读入一组数据到缓冲区。这样成组进行CPU与输入/输出设备之间的数据交互,减少了CPU与外部设备之间的交互次数,提高了运算速度。
(4)文件的控制和管理:把逻辑上具有完整意义的信息集合以一个名字作为整体记录下来保存在存储设备中,这个整体信息就称为文件。为了区别不同信息的文件,分别对它们命名,称为文件名。例如,一个源程序、一批数据、一个文档、一个表格或一幅图片都可以各自组成一个文件。操作系统根据用户要求实现按文件名存取,负责对文件的组织以及对文件存取权限、打印等的控制。
(5)作业的控制和管理:作业包括程序、数据以及解题的控制步骤。一个计算问题是一个作业,一个文档的打印也是一个作业。操作系统对进入系统的所有作业进行组织和管理,以提高运行效率。操作系统的作业管理功能提供“作业控制语言”,用户通过它来书写控制作业执行的说明书。同时,还为操作员和终端用户提供与系统对话的“命令语言”,用它来请求系统服务。操作系统按操作说明书的要求或收到的命令控制用户作业的执行。
2.操作系统的特性
操作系统是系统软件的核心,配备操作系统是为了提高计算机系统的处理能力,充分发挥系统资源的利用率,方便用户的使用。目前的 操作系统广泛采用并行操作技术,使多种硬件设备能并行工作。例如,CPU与I/O操作并行、在内存中同时存放多道程序等。这些技术表现出 操作系统的并发性和共享性的主要特征。
并发性是指在内存中存放多道作业,在一个时间段上来看,每一道作业都能不同程度地向前推进,但在任何一个时间点上只能有一道作 业占用CPU,各道程序同时在CPU上交替轮流地执行。与并发相关的两个概念分别是:串行,在内存中每次只能放一道作业,只有它完全执行 完后,别的作业才能进入内存执行;并行,存在于有多个CPU的环境中,在内存中放多道作业,在任一时间点上都可能有多道作业在不同的 CPU上同时执行。
共享性是指系统中的资源可以供内存中多个并发执行的程序共同使用,很多种资源(CPU、内存等)都可以被多道作业共同享用。
并发与共享互为条件,是操作系统的基本特征。 -
中断和中断处理流程
2020-12-20 04:41:201. 中断概念中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器... -
操作系统简述复习笔记
2021-12-14 19:54:161.操作系统基本概述 略 2.处理器 2.1.处理器和寄存器 处理器中有大量的寄存器,不同的寄存器有不同的作用,例如储存执行结果,储存数据地址等等。因此,寄存器多而复杂。 2.1.1.CPU内部的寄存器 在CPU内部有一个控制... -
嵌入式100题(77):中断怎么发生,中断处理大概流程
2021-02-26 23:16:20中断怎么发生,中断处理大概流程 1. 中断概念: 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求... -
从操作系统的角度简述计算机的启动过程
2009-05-03 14:19:00第七步: 标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA... -
关于中断、异常、软中断、硬中断的概念解释
2021-10-29 11:38:38分别介绍了中断、异常、软中断、硬中断的概念并比较 -
计算机操作系统概述
2021-03-29 13:28:271.操作系统概述1.计算机系统计算机硬件 1.计算机系统 计算机硬件 现代计算机系统的软硬件层次结构: 其中每一层都具有一组功能并且能对层外提供相应接口。同时对层内隐藏了实现细节,对层外约束了使用规定。 应用... -
操作系统期末考试简答题汇总(全、附带答案)
2020-06-16 12:10:591.操作系统作为用户与硬件系统之间的接口。 2.操作系统作为资源的管理者。 3.操作系统实现了对资源的抽象。 2.单道批处理是什么概念,解决了什么问题,是如何解决的?还存在什么问题? 1.单道批处理是计算机系统对一... -
操作系统的主要功能是主要有哪些类型
2021-07-15 01:07:59操作系统可以分为五大管理2113功能部分:1)设备管理5261:主要是负责内核与4102外围设备的数据交互,实质是对硬1653件设备的管理,包括对输入输出设备的分配,...从操作系统的角度来看,文件系统是系统对文件存储... -
CSAPP-从计算机系统的角度分析程序的一生
2022-05-15 22:00:54本文从计算机系统的角度,以hello为例,描述了从C语言程序到可执行目标程序的预处理、编译、汇编、链接的过程,阐述了进程管理机制和程序存储管理机制,简述了Linux的I/O管理机制。结合本学期计算机系统课程所学... -
水电站计算机监控系统功能与发展简述
2021-06-18 07:27:24请转发到朋友圈或者点击文末的“分享”、“在看”分享给更多人)计算机监控系统是水电站重要的控制系统之一是水电站生产和管理的中枢自上世纪70年代计算机开始应用于水电站水电站计算机监控系统经历了从低级到高级从... -
中断笔记 一些常见的中断问题
2020-03-26 00:57:30中断简述:所谓中断就是指CPU在正常执行程序的时候,由于内部/外部事件的出发、或由程序预先设定而引起CPU暂时中止当前正在执行的程序,保存被执行程序相关信息到栈中,转而去执行为内部/外部事件、或由程序预先设定... -
操作系统的体系结构
2021-10-20 08:11:20---- 从用户角度看,操作系统所体现的是它提供的各种各样的服务; ---- 从程序员角度看,操作系统体现的是提供给用户的界面和接口; ---- 从设计人员的角度看,操作系统是一大堆模块和它们之间的相互联系。 这便是... -
计算机组成原理简答题
2020-12-23 01:30:173、计算机硬件系统由五大部件(存储器、运算器、控制器、输入设备和输出设备)组成运算器:完成算术和逻辑运算;存储器:存储指令和数据;控制器:负责全机操作;输入输出部件:信息的输入和输出。2.存储程序控制方式... -
计算机操作系统-1-总览
2022-03-08 09:09:07计算机操作系统-1-总览 -
计算机系统结构自考2009年7月真题
2021-06-23 00:17:06计算机系统结构自考2009年7月真题及答案解析本试卷为选择题型,填空题,简答题,应用题等题型。一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未... -
操作系统期末考试简答题部分整理
2021-08-22 18:31:44操作系统期末考试简答题部分整理 需要电子版的小伙伴转----电子版 第一章: 1.什么是操作系统? 操作系统是部署在硬件上的第一层软件,是对硬件系统的首次扩充,具有管理好这些设备的功能,提高他们的利用率和系统... -
【STM32F4教程】第三节:外部中断(EXTI)的实现
2020-08-15 15:57:48外部中断(EXTI)的实现 中断概述 EXTI 外部中断 触发机制 外部中断~中断线的映射 NVIC NVIC 特性 嵌套向量中断控制器 NVIC 包含以下特性: 中断管理 抢占优先级 & 响应优先级区别: NVIC中断优先级... -
操作系统
2021-03-19 16:25:531.什么是操作系统?它有什么基本特征? 操作系统是控制和管理计算机系统内各种硬件和软件资源、有效地组织多道程序运行的系统软件(或 程序集合),是用户与计算机之间的接口。 操作系统的基本特征是:并发、... -
全国2009年7月自考计算机系统结构试题及答案
2021-06-23 00:17:52全国2009年7月自考计算机系统结构试题一、单项选择题1.机器语言程序员看到的机器属性是( )A....硬件能直接识别的数据类型3.RISC执行程序的速度优于CISC的原因是( )A.RISC的指令系统的指令数较少B.程... -
操作系统学习笔记_01_OS概念简述
2018-03-11 09:37:06操作系统的概念操作系统没有公认的定义,本文只对它的几个侧面进行尽量详尽的描述。操作系统是一组控制程序的集合,相当于计算机系统的内核(区分于系统程序和应用程序)。操作系统在开机后保持运行,其工作环境... -
操作系统八股文合集
2021-11-08 21:31:35中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保存现场后自动去执行相应的处理程序,处理完该事件后再返回中断处继续执行原来的程序。中断一般三类,一类是由CPU外部引起的,如I/O中断,... -
【操作系统】第十章-多处理机操作系统
2021-03-26 15:45:00十、多处理机操作系统 前言 计算机发展的历史请求地表明:提高计算机系统性能的主要途径有两条:一是提高构成计算机的元器件的运行速度,特别是处理器芯片的速度,而是改进计算机...一般而言,可以从不同角度对多处理 -
超详细|一篇搞定操作系统——设备管理
2021-01-05 21:27:11文章目录4.1 设备管理概述4.2 输入输出系统4.2.2 输入输出系统的控制方式4.3 设备分配与回收4.4 设备处理与I/O软件 4.1 设备管理概述 一、设备管理基本功能 外设管理:是指计算机系统中除了CPU和内存以外的所有... -
操作系统--第一章--计算机系统概述
2022-02-25 08:45:531.1_1_操作系统的概念(定义)功能和目标 概念:什么是操作系统? 功能和目标:操作系统要做什么? 概念(定义) 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源, 并合理地组织...