掘金 阅读 ( ) • 2024-05-07 15:30

theme: orange

引言

对于程序员来说,IO操作是非常熟悉的。本文就将带大家更深入地了解进行IO操作时,计算机底层到底发生了什么。看过本文之后保证能让你对IO操作有一个基本的了解,从此告别这个知识点盲区。

IO操作的基本概念

  • IO的定义:IO就是简单的数据拷贝,从外部设备到内存或从内存到外部设备。
  • Input与Output:数据从外部设备拷贝到内存是输入(Input),反之为输出(Output)。

CPU与IO设备的速度差异

  • 速度不匹配:CPU的速度远快于IO设备,这导致效率问题。
  • 阻塞的概念:为解决此问题,引入了阻塞,即CPU等待IO操作完成时会暂停当前程序,执行其他任务。

IO操作的详细过程

1. 发起IO请求

  • 假设程序A正在运行,并尝试通过read函数读取文件,CPU向磁盘发送读取请求。

2. 程序阻塞与切换

  • 程序A阻塞:由于磁盘IO速度慢,程序A被暂停并放入阻塞队列。
  • CPU切换:CPU切换到其他程序(如程序B)继续执行。

3. 数据的DMA传输

  • 磁盘操作:磁盘开始将数据发送到程序A的缓冲区,此过程称为DMA(直接内存访问),不依赖CPU。

4. 就绪队列与程序调度

  • 就绪队列:包含准备就绪但尚未被CPU执行的程序,如程序B。
  • 程序调度:CPU在程序A阻塞时,从就绪队列中选择程序B执行。

5. IO完成与中断

  • 数据拷贝完成:磁盘完成数据拷贝后,通过中断通知操作系统。
  • 程序A恢复:操作系统将程序A从阻塞队列移至就绪队列,等待再次被CPU执行。

6. 程序继续执行与数据输出

  • 程序A继续执行:当程序A再次获得CPU时间片时,处理已读取的数据。
  • 数据输出:程序A将数据从内存输出到屏幕等设备。

结语

现在你应该对IO操作在计算机底层的过程有了更清晰的了解。想了解更多关于计算机系统原理的知识,欢迎参考相关资料和书籍。