中断和异常的区别

中断是指 CPU 对系统发生某事件时的一种响应,即CPU 暂停正在执行的程序,在保留现场后,自动地转去执行该事件的中断处理程序,执行完后,再返回到原程序的断点处继续执行。

中断分为外中断和内中断。

中断会使 CPU 由用户态变为内核态,使操作系统重新夺回对 CPU 的控制权,中断是让操作系统内核夺回 CPU 使用权的唯一途径。如果没有中断机制,那么一旦应用程序上 CPU 运行,CPU 就会一直运行这个应用程序。

不同的中断信号,需要不同的中断处理程序来处理。当 CPU 检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。

用户缓冲区

调用read()申请的buffer就是用户缓冲区

每次调用read()的过程如下:

  1. 用户进程通过read()方法向操作系统发起调用,此时上下文从用户态转向内核态
  2. DMA控制器把数据从硬盘中拷贝到读缓冲区
  3. CPU把读缓冲区数据拷贝到应用缓冲区,上下文从内核态转为用户态,read()返回

DMA

为什么要有 DMA 技术?

在没有 DMA 技术前,I/O 的过程是这样的: