中断和中断处理

多任务系统

Posted by BY beta on February 26, 2021

前言

中断是为了多任务操作系统实现多任务的切换,需要考虑的问题是,每个进程对应的任务描述符是什么

IO概述

为了管理不同的外设,在CPU与外设之间引入IO接口。对于某一个IO接口,通过IO接口中的寄存器和CPU进行通信,这个寄存器称之为“端口”。所以当CPU想要从端口中获取数据,或者往端口中写入数据的时候,可以通过in和out指令来执行相应的端口号,如in al, dx; in ax, dx

地址总线与数据总线逻辑隔离,但实际上可能是同一个总线。

image-20210226102607511

IO硬件概述

外设与CPU、内存的连接关系

外设通过PIC的INTR 通知中断。如,键盘有一个

硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)

image-20210226104636733

![img](https://upload-images.jianshu.io/upload_images/6128001-665a9c7ea3e0c527.png?imageMogr2/auto-orient/strip imageView2/2/format/webp)

驱动概述

image-20210226114902755

中断

各种硬件的中断会先和PIC交互,PIC再和CPU连接

image-20210303122510688

interrupt和exception:

在向量表中,前32位留给exception,之后才会给interrupt

image-20210303123115861

陷阱、 异常 、中断 区别

  • trap:陷阱可以使程序从用户态进入内核态。如果一个用户程序需要使用的资源是被限制的,或者使用内核函数,那么就会进入trap。同步,常被称为软中断
  • 中断:中断通常是由外部的设备引起的,比如键盘、时钟等。异步
  • 异常:异常指程序运行过程中的异常行为,比如除0,缓冲区溢出等。是同步的

这三者的处理函数相同,被称为中断服务程序ISR。

前半与后半

前半: 完成尽可能少又紧急的功能

后半:中断处理的大部分工作都在底半部,它几乎做中断处理程序的所有事情

如果一个中断对应的工作很快就能完成,那么一般都会以同步的方式处理,而如果一个中断的处理过程可能花费很长时间的话,可能就会分成两段,前一段已同步的方式处理关键性的任务,后一段以异步的形式处理次要任务

image-20210303161848463

不同的后半实现

在linux系统中,存在三种后半实现方式:softirq、tasklet、workqueue

中断上下文