目录
一、I/O 工作方式
磁盘可以说是计算机系统中最慢的硬件之一,读写速度相差内存10倍以上,所以针对磁盘的优化技术非常多。下面以文件传输为切入线分析 I/O 的工作方式。
在没有 DMA 技术前,I/O 是这样工作的,如下图:
- 用户发起 read 调用,CPU 将对应的指令给磁盘控制器,然后返回;
- 磁盘控制器收到指令后,开始准备数据,会把数据放到磁盘控制器的内存缓冲区中,然后产生一个中断;
- CPU 收到中断信号后,停下手头的工作,接着把磁盘控制器的数据一次一个字节的读到自己的寄存器中,然后再把寄存器里的数据写到内存中,而在数据传输期间,CPU 无法执行其它任务。
可以看到,整个传输过程,都需要 CPU 亲自搬运数据,,而且这个过程是阻塞的,CPU 不能做其他的工作,简单的搬运几个字符问题不大,如果是搬运大量的数据,肯定忙不过来。于是 DMA 技术诞生了。
1.1 DMA
DMA(Direct Memory Access,直接内存访问)技术是一种在计算机系统中用于高效数据传输的技术,它允许数据在设备和内存之间直接传输,而无需 CPU 的干预。DMA 技术显著提高了数据传输的速度和系统的整体性能,因为它减少了 CPU 的负担,使得 CPU 可以专注于其他更重要的任务。
工作流程图如下:
- 用户进程调用 read 方法,向操作系统发出 I/O 请求,请求读取数据到自己的内存中,进程进入阻塞状态;
- 操作系统收到请求后,进一步将 I/O 请求发送到 DMA,然后让 CPU 执行其他任务;
- DMA 将请求发送到磁盘;
- 磁盘收到请求后,把数据从磁盘读取到缓冲区中,当磁盘控制器的缓冲区读满后,向 DMA 发起中断信号,告知自己缓冲区已满;DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区,此时不占用 CPU;
- 当 DMA 读了足够多的数据,就会发出中断信号给 CPU;
- CPU 收到 DMA 信号,知道数据准备好了,于是将数据从内核拷贝到内核空间,系统调用返回。
可以看到,整个数据传输过程,CPU不在参与数据搬运的工作,而是全程由DMA完成,但是CPU在这个过程中也是必不可少的,因为传输什么数据,从哪里传输到哪里,都需要CPU来告诉DMA控制器。