非DMA数据交换

DMA数据交换

DMA是什么?

直接内存访问(Direct Memory Access)。目前支持DMA的硬件包括:网卡、声卡、显卡、磁盘控制器等。

什么是页缓存?

  1. 为了提升对文件的读写效率,Linux 内核会以页大小(4KB)为单位,将文件划分为多数据块,当用户对数据块进行读写操作时,内核首先会申请一个内存页(成为页缓存)与文件中的数据块进行绑定。

  2. 当用户对文件进行读写时,实际上是对页缓存进行读写,所以对文件进行读写操作时,会分为以下两种情况进行:

    1. 当用户从文件中读取数据时,如果命中了页缓存则直接从页缓存中读取,如果没有命中,则先申请一个空闲的页缓存,然后从文件中读取数据到页缓存中,然后再把页缓存的数据拷贝给用户。
    2. 当向文件中写入数据时,如果要写入的数据所在的页缓存已存在,那么直接把新数据写入到页缓存即可,否则,会先申请一块空闲的页缓存,从文件中读取数据到页缓存中,然后把新数据写入到页缓存中。对于被修改的页缓存,内核会定时把这些页缓存刷新到文件中。