1. read() 系统调用将会调用虚拟文件系统层VFS 中相应的读方法,并将要读的文件指针和文件偏移一并传给虚拟文件系统层。虚拟文件系统层可以看作是对块设备操作的最高一层,它提供了一个抽象的统一的文件操作视图给上层,并给所有被Linux 操作系统支持的文件系统提供了一个通用的文件操作接口,只要下层的实际文件系统实现这个接口就可以提供正确的服务。
2. 实现上并不是每次对磁盘的读写操作都会产生实际的磁盘操作,这是因为系统中还存在有一个磁盘缓冲,就是通常所说的页缓冲。所有的读写操作都会先去查找一下这个缓冲看是否命中,如果命中就不用产生实际的磁盘I/O 这样可以提高系统的性能。如果没有命中就会向下继续传递读写命令。并会把相应的读写数据存入这个缓冲区中,以便下次使用。Linux 内核对这个缓冲的使用策略就是在系统内存允许的情况下使这个缓冲区尽可能大,以提高命中率。
3. 当Linux 内核必需要去产生实际的磁盘I/O 的时候即没有命中的时候,那些它需要去确定要读的数据的物理位置。为了达到这个目的,它就需要映射层。这个过程实际上可以分为以下的两步:
3.1. 首先要确定这个文件系统的块大小,然后通过确定的块