中断服务程序会发生什么?[英] What happens in an interrupt service routine?

本文是小编为大家收集整理的关于中断服务程序会发生什么?的处理方法,想解了中断服务程序会发生什么?的问题怎么解决?中断服务程序会发生什么?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

有人可以向我解释中断服务程序中会发生什么(尽管这取决于特定的例程,但一般解释就足够了)?这总是对我来说是黑匣子.

推荐答案

中断处理者.

"一个中断处理程序,也称为中断服务例程(ISR),是操作系统或设备驱动程序中的回调子例程,其执行是由中断的接收而触发的.中断处理程序具有多种功能,它具有多种功能,它具有多种功能根据中断的原因以及中断处理程序完成任务的速度而有所不同."

基本上,当一件硬件(硬件中断)或某些操作系统任务(软件中断)需要运行它时,它会触发中断.如果这些中断没有掩盖(忽略),则操作系统将停止其正在做的事情,并调用一些特殊代码来处理此新事件.

一个很好的例子是从硬盘驱动器阅读.驱动器很慢,您不希望操作系统等待数据返回;您希望操作系统去做其他事情.因此,您设置了系统,以便当磁盘要求所请求的数据时,它会引起中断.在磁盘的中断服务例程中,CPU将获取现在准备就绪的数据,并将其退还给请求者.

ISRS通常需要快速发生,因为硬件可以具有有限的缓冲区,如果新数据现在已经足够快地完成,则将被新数据覆盖. 同样重要的是要快速完成ISR,就像CPU为一个ISR服务时,其他中断会被掩盖,这意味着,如果CPU无法快速丢失数据.

其他推荐答案

最小的16位示例

理解的最佳方法是自己制作一些最小的例子.

首先学习如何创建最小的引导加载程序OS并在QEMU和真实硬件上运行,如我在此处所述: https:/https://stackoverflow.com/a/32483545/895245

现在您可以以16位实际模式运行:

    movw $handler0, 0x00
    mov %cs, 0x02
    movw $handler1, 0x04
    mov %cs, 0x06
    int $0
    int $1
    hlt
handler0:
    /* Do 0. */
    iret
handler1:
    /* Do 1. */
    iret

这将按顺序进行:

  • Do 0.
  • Do 1.
  • hlt:停止执行

请注意处理器在地址0上如何查找第一个处理程序,第二个在4上:这是一个称为 ivt ,每个条目都有4个字节.

>

另请参见

相关问题:平均汇编代码?

其他推荐答案

8086正在执行程序时,中断会破坏正常的指令执行序列,将其执行转移到某些名为Interrupt服务例程(ISR)的其他程序.执行后,将控制再次返回到主程序.

本文地址:https://www.itbaoku.cn/post/359023.html