基本介绍
linux内核在读写数据时候,可能会发生短暂的停顿等待磁盘数据 ,本质原因是进程发起read/write系统调用时候,由用户态切换到内核态,进程会经历磁盘数据达到后而引起的中断和从中断点继续执行的两个步骤...如果不在page cache中则需要将读写请求提交到块设备层来获取数据.这里需要注意的linux内存管理是以page(页)为基本单位,但是块设备读写是以块为单位,因此在页缓存的基础上,把页分割为多个块并建立块缓存...ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,get_block_func, ext4_end_io_dio...,则进入page cache的dio函数
if (iocb->ki_flags & IOCB_DIRECT) {
retval = mapping->a_ops->direct_IO(iocb...(iocb, iter) {
__blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,iter, ext4_dio_get_block,