I/O中断原理

目录

I/O中断原理

什么是中断

中断类型

硬件中断

软件中断

I/O中断流程

无中断

有中断

中断处理

I/O中断原理

什么是中断

中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。

我们知道CPU是按指令顺序进行执行的,操作系统每过大约15ms会发生一次线程调度(Windows下),根据线程优先级先调度优先级高的线程。但是实际情况并没有那么简单,若我们接收到一个网络请求,如果要等当前线程执行完或15ms线程调度之后才去处理网络请求,网卡缓冲区很有可能会被占满,此时就发生了丢包。

中断类型

中断分为硬件中断和软件中断。

硬件中断

硬件中断即为硬件发出的中断信号,如I/O中断和硬件失效中断。

  • I/O中断:由I/O控制器产生,用于发送信号通知操作完成等信号。
  • 硬件失效中断:如掉电或存储器奇偶错之类的故障。

软件中断

软件中断即为非硬件发出的中断信号,如程序中断和时钟中断。

  • 程序中断:一些指令产生的异常(如算数移除、除数为0等)。
  • 时钟中断:由处理器内部的计时器产生,允许操作系统以一定规程执行函数。

我们提到了操作系统每过大约15ms会进行一次线程调度,就是利用时钟中断来实现的。

I/O中断流程

本篇文章还是主要解释前几篇文章提到的I/O中断进行解释说明,因此仅以I/O中断举例,但是中断的原理和流程都是相似的。

I/O中断通过中断处理器执行中断操作。当外部设备的I/O模块准备好时,它会发送给CPU一个中断信号,CPU则会“立即”做出响应,暂停当前程序的处理去服务该I/O设备的程序。

也可能不是立即,比如同时存在多个中断,则根据实际的中断算法决定,是按中断先后顺序执行中断操作,还是按中断优先级执行。
I/O中断时硬件中断,需要硬件支持来接收中断信号。

无中断

为了更好的说明中断带来的性能提升,我们先描述一下没有中断时程序如何处理I/O操作。

  • 当我们程序需要从硬盘读取一个文件时,会先检查内核缓存中是否有数据,若没有数据,则执行实际I/O操作。在I/O操作执行时,我们的用户线程将阻塞等待数据从硬盘写到内存中。对于用户来说线程是被阻塞的。
  • 在实际的I/O操作过程中,若没有中断操作,CPU会不断轮询检查I/O操作是否完成,若I/O操作没有完成则继续调度其他线程,过一会儿再来检查。若操作完成,CPU将线程加入到线程就绪队列中并恢复线程上下文信息。
  • 线程处于就绪队列,可以被操作系统调度从而继续执行读操作,此时会将数据从操作系统内核缓存读取到用户缓存中。

有中断

  • 当我们程序需要从硬盘读取一个文件时,会先检查内核缓存中是否有数据,若没有数据,则执行实际I/O操作。在I/O操作执行时,我们的用户线程将阻塞等待数据从硬盘写到内存中。对于用户来说线程是被阻塞的。
  • 在实际的I/O操作过程中,CPU向I/O模块(DMA控制器)发送读指令,然后就去调度其他线程。
  • 当I/O模块(DMA控制器)I/O执行完成后,会产生中断信号在通知CPU,CPU将线程加入到线程就绪队列中并恢复线程上下文信息。
  • 线程处于就绪队列,可以被操作系统调度从而继续执行读操作,此时会将数据从操作系统内核缓存读取到用户缓存中。

由此可知,有中断还是没有中断对于用户来说线程都是阻塞的,对于操作系统内核来说通过中断方式主动通知CPU的方式减少了线程轮询判断,提高了线程执行效率。
当然,为了进一步提高线程利用率,此时我们可以通过异步操作API执行I/O操作。
比如.Net4.5的asyncawait关键字,当调用异步操作后,API内部保存了相关状态机信息(回调信息),线程继续执行其他操作,当操作系统内核读取数据完成时,线程调用回调方法恢复到await的后续操作。整个过程中线程不会因为阻塞带来导致性能损失。

中断处理

当I/O设备完成一次I/O操作时,发生以下事件:

  • 开始I/O操作前,处理器将当前处理的相关信息如指令地址、必要的状态信息等保存到栈中,使得中断后可以恢复执行。
  • I/O操作完成后,设备给处理器发送一个中断信号。
  • 处理器响应中断信号。
  • 处理器对中断信号进行判断,若存在未响应的中断,则给产生中断信号的设备发送确认信号,确认信号使得设备取消它的中断信号。
  • 处理器将控制前转移给中断程序中,中断程序从栈中获取之前保存的信息,使得能继续执行I/O完成时的后续操作。
  • 处理器将中断程序入口地址载入到程序计数器中,使得处理器能继续执行下一个指令周期。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作系统原理中的I/O管理涉及到操作系统中对输入和输出设备的管理和控制。下面是一个思维导图来帮助理解I/O管理的相关概念和原理。 1. I/O管理的目标: - 提供接口和抽象层:操作系统需要提供统一的接口和抽象层,使得应用程序可以方便地访问各种不同类型的输入和输出设备。 - 提高资源利用率:操作系统需要有效地管理和调度各种输入和输出请求,以提高设备资源的利用率。 2. I/O设备的层次结构: - 高级设备驱动程序:提供面向应用程序的设备控制接口和抽象。 - 低级设备驱动程序:与设备硬件直接交互,负责具体的设备控制操作。 - 设备控制器:连接设备和计算机系统,负责设备的传输和控制。 - 设备接口:连接设备控制器和设备。 3. I/O管理的主要模块: - 设备命令处理:操作系统解析应用程序的I/O请求,并将其转换为设备命令,包括设备控制字和设备地址。 - 设备分配和释放:操作系统需要根据设备的可用性和应用程序的请求,对设备进行动态分配和释放。 - 设备驱动程序:包括高级设备驱动程序和低级设备驱动程序,负责设备控制和数据传输操作。 - 中断处理:当设备完成请求或发生错误时,操作系统通过中断机制来处理相应的中断事件。 4. I/O调度算法: - 先来先服务(FCFS):按照请求的顺序进行处理。 - 最短寻道时间优先(SSTF):根据当前磁头位置选择最近的请求进行处理。 - 电梯算法:磁头按照一个方向依次移动,直到到达最大值或最小值,然后改变方向继续处理请求。 总结:操作系统原理中的I/O管理涉及设备的层次结构、设备命令处理、设备分配和释放、设备驱动程序、中断处理以及I/O调度算法等方面的内容。理解I/O管理的原理对于操作系统的设计和优化具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值