操作系统OS—中断机制全面解析


*建议先阅读文章【操作系统OS-大型计算机系统】,更容易理解中断机制

一.如何读写数据

CPU如何与IO设备之间协调来读取数据:
操作系统OS—中断机制全面解析

  1. 每个设备控制器(Device Controller)负责一个特殊的设备
  2. 每个设备控制器(Device Controller)有一个自己的缓冲区(Buffer)
  3. I/O是从设备中读取信息到Buffer,CPU再从Buffer中读取数据
  4. 设备控制器中的Buffer存在的意义是,因为CPU处理速度很快,IO提前先把资料放到Buffer中,CPU直接从Buffer中找资料,这样可以节省时间并且提高效率
  5. 设备控制器中会有Status register和Data register
  6. Status register来查看CPU是否处于忙碌状态
  7. Data register:先将资料写到register再写到Buffer

二.最简单的控制IO方法

操作系统OS—中断机制全面解析

  • #define OUT_CHAR 0x1000表示设备控制器中的Data register
  • #define OUT_STATUS 0x1001表示设备控制器中的Status register
  • While(peek(OUT_STATUS)!=0)从这里可以看出,只有不断地检查CPU的状态(空闲或忙碌)才能知道是否可以进行IO读取操作
  • 实质CPU也是在一直工作,无法从IO中脱身

这就相当于,一个人在厨房烧水,只能一直看着这壶水烧开之后才能离开,如果烧开了没有拿走水壶,溢出的水可能浇灭煤气,引起其他的事故。在水壶边守着的时候,如果突然有其他的紧急事情要做,可能就无法脱身。
CPU也是如此,当CPU全身心投入到IO操作中,其他的程序将无法进行,拖慢了整个进程的效率,CPU的效率也大大下降。
如果,我们定一个闹钟,十分钟之后叫我来厨房把烧开的水壶拿走,在这十分钟内,CPU可以去处理其他的事情而不是在厨房一直看着水是否烧开。这样就能大大提高CPU运行效率。
这个“闹钟”,就是操作系统中的中断机制。

三.中断机制 Interrupt

操作系统OS—中断机制全面解析

  1. 上面的蓝线表示CPU的操作进程,往下走的线代表在处理IO的事情,没有变化的横线表示CPU在做自己的事情
  2. 下面的蓝线表示IO设备,idle表示IO处于空闲状态,transferring表示IO处于工作状态
  3. 当IO设备处于transferring的状态下时,比如表示在填满设备控制器的Buffer时,CPU一直处于横线状态,表示CPU在做自己的事情;当IO设备填满Buffer,给CPU发送中断指令,CPU立刻离开自己的工作,进入到IO操作中。接着又回到了自己的事情中(横线状态)。

四.驱动中断I/O

操作系统OS—中断机制全面解析