这里写目录标题
DMA技术
DMA(Direct Memory Access)就是直接内存访问技术。在进行IO设备和内存之间数据传输的时候,数据搬运的工作全部交给DMA控制器,而CPU不再参与任何和数据搬运相关的事情了,这样就把CPU空出来了,如下图所示:
将数据写入磁盘的流程
- 用户程序将数据写入用户空间的缓冲区,然后调用write系统调用。
- CPU进入内核态,将数据写入拷贝到页缓存,写入成功,立即返回。
- 用户进程调用系统调用fsync、fdatasync、sync等刷盘指令。CPU会向DMA控制器发送写指令,告诉磁盘控制器要刷盘的数据在主存的位置、要刷盘多少数据、要刷到磁盘什么位置等,然后CPU就可以返回干其他事情了。
- DMA控制器开始将页缓存中的数据写入到磁盘。
- 写完了之后,DMA控制器会向CPU发出中断请求,触发中断处理程序,进行一些扫尾的工作。
磁盘读取数据的流程
- 用户程序调用read系统调用。
- CPU进入内核态,操作系统会检查页缓存是否有数据。如果有CPU拷贝这些数据到用户空间;如果没有则触发缺页中断,需要向磁盘调页,即从磁盘加载数据到页缓存。
- CPU向DMA控制器发送读指令,并且告诉磁盘主存地址、要读取的数据长度、要从哪一个设备读,然后CPU返回干其他事情了。
- DMA控制器将磁盘中的数据拷贝到页缓存。
- 数据拷贝完成后,DMA控制器向CPU发送中断信号,触发中断处理程序,进行扫尾工作。
- 页缓存把数据返回给用户进程。