zoukankan      html  css  js  c++  java
  • 操作系统-中断(1)中断

    不同教材对中断的定义不同,可以说是一个没有严格定义的概念。
    中断(广义的)是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。
    操作系统是“中断驱动”的;换言之,中断是激活操作系统的唯一方式。
    中断或异常处理执行的代码不是一个进程,而是内核控制路径,它代表异常或中断发生时正在运行的当前进程在内核态执行一个独立的指令序列。内核控制路径比进程更“轻”,其上下文信息比进程上下文信息少得多。而上下文切换后CPU执行的是另一个用户进程。
     
    根据中断源不同,中断事件处理原则为:
    • 处理器硬件故障中断:由处理器、内存储器、总线等硬件故障引起
    会通过中断请求向CPU请求处理
    处理原则为:保护现场,停止设备,停止CPU,向操作员报告并对故障造成的破坏进行估计和恢复,等待人工干预(复位、设置、替换等)
    • 程序性中断:由处理器执行机器指令引起
    不同用户往往有不同处理要求,借助于信号机制,操作系统可将所捕获的中断事件原封不动的转交给应用程序自行处理。
    语法错误:编译程序发现并报错
    逻辑错误:测试程序发现并报错
    程序运行过程中产生的异常:
            除数为零、操作数溢出等算术异常:简单处理,报告用户;也可以由用户编写中断续元程序处理
            非法指令、用户态使用特权指令、地址越界、非法存取等指令异常:终止进程
            终止进程指令:终止进程
            虚拟地址异常:调整内存后重新执行指令
    • 访管中断:处理器请求分配外设、请求I/O等时,执行访管指令请求OS服务引起(系统调用通过访管指令和中断机制实现)
    处理流程:(1)程序执行访管指令,并通过适当方式指明系统调用号
                      (2)通过中断机制进入访管中断处理程序,现场信息被保护到核心栈,按功能号实现跳转
                      (3)通过系统调用入口地址表找到相应中断服务例程的入口地址
                      (4)执行中断服务例程,正常情况下载结束后返回系统调用的下一条指令继续执行
    • I/O中断事件:来源于外围设备报告I/O状态的中断事件
    I/O操作正常完成:把等待传输的下一个进程设置为就绪态,让它占有设备和通道并启动数据传输
    I/O操作发生故障:先向设备发命令索取状态字,分析产生故障的确切原因,再进行复执或请求人工干涉
    I/O操作发生异常:分析情况采取相应措施,向操作员报告。
    设备报到、设备结束:调整设备表
    • 时钟中断:由外围设备发出的信号引起的中断事件
    绝对时钟:硬件时钟,按照固定周期发出中断。系统设备绝对时钟寄存器,开机后定时地把寄存器内容加1(可根据开机时间推测当前时间)
    间隔时钟:可通过系统调用设置间隔时钟挂起、通过程序设置间隔时钟寄存器的初值,每个时间切换点将其内容减1,为0时产生间隔时钟中断,唤醒挂起的进程
     
    中断系统是计算机系统中响应和处理中断的系统,包括硬件子系统和软件子系统两部分
    中断响应和中断处理的结果就是调出相应的中断服务例程并执行
    中断响应由硬件子系统完成;中断处理由软件子系统完成
    在指令执行周期最后增加一个微操作,以响应中断
    计算机系统中发现并响应中断/异常的硬件装置称为中断装置
    由于中断源的多样性,硬件实现的中断装置有多种,分别处理不同类型的中断,这些中断装置因计算机而异,通常有:
    • 处理器内的异常:由指令的控制逻辑和实现线路发现和响应,相应机制称为陷阱
    处理器外中断响应和处理器内异常响应的区别:通常在指令执行结束时查询有无中断请求,有则立即响应;而异常发生在指令执行过程中,一旦发现则马上处理
    • 请求OS服务的系统异常:处理器执行陷入指令时直接触发,相应机制称为系统陷阱
    陷阱与系统陷阱是指令的逻辑和实现线路的一部分
    执行指令出现异常后,会根据异常情况转向操作系统的异常处理程序;出现虚拟地址异常后,需要重新执行指令,往往越过陷阱独立设置页面异常处理程序;执行陷入指令后,越过陷阱处理,触发系统陷阱,激活系统调用处理程序
    • 处理器外的中断:由中断控制器发现和响应
     
     
    多重中断处理:
    不同类型的操作系统有不同的中断响应优先级(当计算机同时检测到多个中断时, 中断装置响应中断的顺序,由中断查询程序或硬件判优电路决定),当有多个要响应的中断源时,有以下两种方法决定选哪一个:
    • 软件方法:编写一个查询程序,依据优先级顺序从高到低进行查询,一旦发现中断请求则转入相应中断事件处理程序
    • 硬件方法:根据排定的优先级顺序做一个硬件链式排队器,当产生中断事件时屏蔽所有比它优先级低的中断
    当计算机响应中断后,在中断处理过程中,可以再响应其他中断。操作系统是性能攸关程序系统,且中断响应处理有硬件要求,考虑系统效率和实现代价问题,中断的嵌套处理应限制在一定层数内(如3层)
    中断处理优先级----由中断服务程序各自的中断屏蔽字来动态设定,反映本中断与其它中断间的关系。
    单重中断不允许在中断处理时被新的中断打断,因而直到中断返回前才会开中断。因此单重中断系统无需设置中断屏蔽字。
    多重中断处理处在开中断状态时,可被新的处理优先级更高的中断打断,从而使中断可以嵌套处理,中断的嵌套处理改变了中断处理的次序,先响应的有可能后处理
    • 串行处理:XY两个中断同时发生,先响应X,因Y被屏蔽,继续处理X,再响应并处理Y
    • 嵌套处理:XY两个中断同时发生,根据中断优先级,先响应X;因未屏蔽Y,再响应并处理Y;Y处理完成后再处理X。
    • 即时处理:在运行中断处理程序时,如果出现程序性中断事件则表明中断处理程序有异常,应立刻响应并进行处理

    嵌套中断处理举例:
    利用栈实现了中断的嵌套处理。
    图中,中断处理优先级的顺序是:3# > 2# > 1#
    1# 对 2# 开放(不屏蔽)
    2# 对 3# 开放(不屏蔽)
     
    综上,决定中断处理次序的因素:
    • 中断屏蔽可以使中断装置不响应某些中断
    • 中断响应优先级决定了中断装置响应中断的次序
    例如一种可能的处理次序为:处理机硬件故障中断事件、自愿性中断事件、程序性中断事件、时钟中断等外部中断事件、输入输出中断事件、重启动和关机中断事件
  • 相关阅读:
    HDU ACM 1071 The area 定积分计算
    Effective C++:条款25:考虑写出一个不抛异常的swap函数
    史上最全站点降权原因解析
    shell脚本中的数学运算
    Spark 1.0.0 横空出世 Spark on Yarn 部署(Hadoop 2.4)
    索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美
    Swift基础--使用TableViewController自己定义列表
    勒索软件出新招,小心你的隐私和財产安全!
    Http协议具体解释
    Android Studio解决unspecified on project app resolves to an APK archive which is not supported
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9214336.html
Copyright © 2011-2022 走看看