Linux系统中将数据写入到一个文件是一个很复杂的过程。如果我们只对这个过程做一个理论和概要的理解,可以总结为下面处理过程。
1、首先,用户态程序需要将数据所在地址、写入文件位置、写入长度传递给内核空间。
2、然后,内核需要检查用户态程序传入的参数,一部分要检查用户态空间那段存储数据的地址是否可读,还需要检查写入文件位置,写入文件长度是不是超过了文件的限制。
3、通过检查后,进入一个循环中,这个循环的总体流程就是从写入文件位置开始,逐page进行操作,首先根据写入位置计算对应的page,然后找到或者分配一个page,然后找到这个page对应逻辑块的物理块。完成该page中需要写入的块的物理磁盘映射
4、将数据拷贝到这个page中
5、将这个page中的需要写入的块标记为dirty标记
6、修改写入文件的位置,开始操作需要写入的下一个page,过程还是如上面所述。