1.中断的概念

中断对于操作系统非常重要,它就好像机器中的齿轮,驱动各部件的动作。所以,许多人称操作系统是由“中断驱动”的。

所谓中断是指CPU对系统发生的某个事件做出的一种反应,它使CPU暂停正在执行的程序,保留现场后自动执行相应的处理程序,处理该事件后,如被中断进程的优先级最高,则返回断点继续执行被“打断”的程序。

中断示意图

引起中断的事件或发出中断请求的来源称为中断源。中断源向CPU提出的处理请求称为中断请求。发生中断时,被打断程序的暂停点称为断点

前面讲过,中断最初是作为通道(或设备)与CPU之间进行通信的工具。通道和CPU并行工作,各自负责自己的任务。当通道完成某项预定的I/O请求或数据传输过程中发生故障时,就用中断方式向CPU“报告情况”,请求处理。

中断的概念后来得到进一步扩展。在现代计算机系统中,不仅通道或设备控制器可向CPU发送中断信号,其他部件也可以造成中断。例如,程序在CPU上运行时出现运算溢出、取数时奇偶错、电源故障、时钟计数到时等,都可成为中断源。

中断概念的另一个发展是访管(即访问管理)指令(或系统调用)的使用。用户程序中可以使用操作系统对外界提供的系统调用,得到系统内部服务。当用户程序执行到系统调用时,进程状态从用户态变为核心态核心根据系统调用的编号,转去执行相应的处理程序,如对文件的读/写、对进程的控制等。硬件保证用户态下运行的程序不得访问核心空间中的数据,从而保护了操作系统。系统调用的出现为用户编制程序提供了方便和可靠性保证。

2.中断类型

  • 按功能划分

这种分类法类似于IBM 360/370系统的分类法,所有中断源分为5类。

(1)机器故障中断。它是机器发生错误时产生的中断,用来反映硬件在执行过程中出现的故障,以便进入诊断程序,做出处理。例如,机器电路检验错、电源故障和内存读数错,等等。

(2)I/O中断。这是来自通道或各种外部设备的中断,用于反映通道或设备的工作情况。例如,打印机打印结束、磁盘传输完成、利用终端进行输入/输出等。

(3)外部中断。它是来自计算机系统外部装置的中断,用来反映外界对本系统的要求。例如,计时器到时溢出,操作员操纵控制台按钮,在多机系统中它机送来信号,等等。

(4)程序性中断。这是因错误地使用指令或数据而引起的中断,用于反映程序执行过程中发现的例外情况,例如,非法操作码,无效地址和运算溢出,等等。

(5)访管中断。由于执行“访问管理程序”指令而产生的中断,用来使CPU的状态从用户态转入管理态,由操作系统根据不同的编号引进不同的处理。这样,操作系统为用户态程序提供对系统资源使用请求的服务。

  • 按产生中断的方式划分

(1)强迫中断。在程序运行过程中,发生某些(个)随机性事件,如外设工作结束和程序运行出错等,需要及时进行处理的一种中断。程序设计人员在编制程序时并不知道它何时出现,也并不期望它出现。上述按功能划分的机器故障中断、I/O中断、外部中断和程序性中断都可算做强迫中断。

(2)自愿中断。程序员在编制程序时因需要系统提供某些服务而有意使用访管指令或系统调用,从而导致执行程序的中断。这是程序员事先安排好的,其出现时机是可知的。上述按功能划分的访管中断就属于这一类。

  • 按中断事件来源划分

目前,很多小型机系统和微型机系统都采用这种分类方式。

(1)中断。它是由CPU以外的事件引起的,如I/O中断、时钟中断、控制台中断等。利用中断实现设备与CPU的通信。中断是异步的,因为从逻辑上讲,中断的产生与当前正在执行的进程无关。

(2)异常(Exception)。它是来自CPU内部的事件或程序执行中的事件引起的过程。如CPU本身故障(电源电压低于105 V,或频率在47~63 Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)和请求系统服务的指令(即访管指令)引起的事件等。可见,异常包括很多方面,主要有出错、陷入和可编程异常。出错和陷入之间最重要的区别是处理完异常事件返回时,出错事件会重新执行导致异常的那条指令,如缺页故障处理完之后还会尝试重新执行那条触发异常的指令(通常不会再缺页);而陷入事件则不会重新执行那条指令。陷入主要用于程序调试,被调试的进程遇到用户设置的断点会停下来等待你的处理,当你让它重新运行时,它就执行下面的指令。

可编程异常是由于用户在C程序中使用了系统调用而引发的过程。系统调用也称软件中断(或陷入)。应用程序使用系统调用就可由用户模式转入核心模式,在核心模式下完成相应的服务之后再返回用户模式。所以系统调用是用户程序与内核的接口。硬件对可编程异常的处理与对陷入的处理是一致的,即从这类异常返回时,也返回产生异常的下一条指令。

3.中断系统的作用

中断系统是当代计算机必不可少的组成部分之一。中断系统的作用主要有以下5点。

(1)提高主机的利用率,使高速CPU可以和低速的外部设备并行工作。

(2)及时进行事故处理。当计算机发生硬件故障或出现程序性错误(如运算结果溢出、除数为0、地址错、非法操作码等)时,可以通过中断系统进行处理。操作系统通过程序复执来排除偶然性错误,或将故障与错误记录下来,为故障诊断和机器恢复做好准备。

(3)实现分时操作。如前所述,在分时系统中正在运行的进程用完所分到的时间片后,就要让出CPU,排到相应的就绪队列中。在这里,依靠定时时钟对时间片进行计时,到达预定值时就产生时钟中断,调用进程调度程序进行相应处理。就是说,通过中断系统将CPU的时间分配给各个进程使用。

(4)实现实时操作。在实时控制系统中,很多信号是随机产生的,只有通过中断系统才能对它进行及时处理,避免信息的丢失。

(5)方便程序调试。利用中断可以方便地调试程序,可人为设置断点,随时中断程序的执行,查看中间结果,了解机器的工作状态,输入临时命令等。

一个进程在执行过程中可以被中断事件打断_Linux操作系统:中断类型和中断的作用...相关推荐

  1. linux中怎么退出执行过程,(进程)处理过程中的Linux:从执行到退出

    Linux是一个多任务操作系统,表面上看,同时运行许多任务--即进程.每一个进程都在系统中留下足迹.这里介绍一些检查这些足迹的工具,并且还要说明蔓延的/proc目录到底是什么. 欢迎归来.上周我们考察 ...

  2. linux脚本执行过程中被挂起,Linux学习笔记(八)——脚本执行的过程控制

    一.脚本执行过程中的控制 之前的内容中,运行编写好的脚本时都是在命令行上直接确定运行的,并且运行的脚本是实时的,这并不是脚本唯一的运行方式,下面的内容是脚本的其他运行方式.例如在Linux系统中如何控 ...

  3. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...

    在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...

  4. 一个sql的执行过程详解

    作者:猿来是八阿哥 链接:https://www.jianshu.com/p/e2926d6a808f 一个sql的执行过程 一. 组成部分 PDO_MYSQL is a driver that im ...

  5. linux运维故障报告,iis7报为应用程序池“xx”提供服务的进程在启动过程中尝试读取配置时报告故障(503错误)处理方法...

    亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢? 最近处理问题,遇到一个棘手的问题,其实也不算棘手,只是自己没认真看日志而已,现在整理下以防止下次忘记.做个深刻教训 现象:客户iis7 中所有 ...

  6. 项目计划执行过程中,如何分析进度偏差?

    在项目计划的执行过程中,通过对执行过程的跟踪检查,找出实际进度与计划进度之间的偏差,分析偏差原因并找出解决办法. 如果无法完成原来的目标计划,就需要对原来的计划进行更新. 项目进度更新后我们可以分析进 ...

  7. 关于 go run 命令执行过程中的“坑坑点点”

    问题 解决 结尾 问题 在使用 Golang 编写程序的时候,经常会遇到单文件编译运行的场景,当我们使用一般的编译语句去编译的时候往往会报错,到底是怎么回事儿呢?接下我们结合具体的例子分析一下. 解决 ...

  8. Makefile执行过程中出错:make: *** No rule to make target ` ‘, needed by xxx. Stop.

    问题: 在mkefile添加了一点东西,编译却报了一些错误,不熟悉makefile的我找错花费了不少时间. 这里记录一下解决过程.同时总结一下其他错误 如何让一个文件里的空格回车都能显示出来? 工具: ...

  9. 在动作观察,运动想象和站立和坐姿执行过程中解码脑电节律

    事件相关去同步化与同步化(ERD/S)和运动相关皮质电位(MRCP)在下肢康复的脑机接口(BCI)中,特别是在站立和坐姿中,起着重要的作用.然而,人们对站立和坐着的大脑皮层活动的差异知之甚少,尤其是大 ...

最新文章

  1. QIIME 2教程. 32如何写方法和引用Citing(2020.11)
  2. Python手动编程实现斐波那契数列
  3. 考前自学系列·计算机组成原理·常见的数据寻址方式(地址码,操作数位置)
  4. 时间管理神器:滴答清单之我最喜欢的特征
  5. xss原理、攻击方式与防御
  6. mysql从库故障恢复步骤(删除数据重新同步)
  7. 【codecombat】 试玩全攻略 第十四关 已知敌人
  8. 为吸引三星建170亿美元芯片厂,德克萨斯州将提供大额财产税减免
  9. python不规则切片_python的切片(slice)机制
  10. 面试带你飞:这是一份全面的 计算机网络基础 总结攻略
  11. nodejs+redis使用例子
  12. cmmi3级资质认证办理流程是什么?周期多久
  13. JavaWeb如何判断账户密码
  14. adb命令模拟按键事件 KeyCode
  15. Spring系列学习之Spring Data Envers数据访问
  16. 光电器件(发光器件)特征与发光特性介绍
  17. 71 ----二次曲面方程:椭球面、双曲面、抛物面、二次曲面的种类
  18. QtCreator插件开发(四)——QtCreator编辑器
  19. 享元模式(Flyweight模式)
  20. 【测试】软件测试 QA、QC、QM的关系与区别?

热门文章

  1. 2017.5.9 货车运输 思考记录
  2. 【Python】Python3.7.3 - memoization 结果缓存记忆程序设计优化技术
  3. MFC模态与非模态对话框的创建与销毁
  4. 正在导出系统过程对象和操作 卡住_开会时CPU 飙升100%同事们都手忙脚乱记一次应急处理过程
  5. Xcode8 + Swift3.0 创建一个app基础框架
  6. 老对手 Intel 与 AMD 也开始合作打造新品了,Nvidia 怎么看?
  7. CCS实例,网页栏目
  8. Mybatis结合Oracle的foreach insert批量插入报错!
  9. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  10. PostgreSQL备份之omniPITR