内核知识收集
1. 几个重要部件的关系图
2. 内核
读文件
系统调用read()读取磁盘上的文件。内核响应步骤如下:
a.
系统调用read()传递文件描述符/文件偏移量/读取长度等参数, 触发相应的VFS函数。
b. VFS确定请求的数据是否已经在缓冲区中, 若数据不在缓冲区中, 确定如何执行读块设备操作。
内核将大多数最近从块设备读出或写入的数据保存在RAM,所以有时候没必要访问磁盘上的数据。
c. 内核通过映射层(Mapping Layer)确定数据在物理设备上的位置。由对应文件所在的文件系统(ext4/fat32等)来确定。
1>内核取得文件所在文件系统的块大小,计算所请求数据块的长度,确证数据所在块号。
2>映射层调用具体文件系统的函数,访问磁盘节点,根据逻辑块号确定所请求数据在磁盘上的位置。
3>磁盘也分块,内核须确定数据块(通用块)在磁盘上的块号(磁盘块)。
d. 内核通过通用块层(Generic Block Layer)在块设备上执行读操作,启动I/O操作, 传输请求的数据。
1>第个i/o操作只针对一组连续的块,请求的数据不必位于相邻的块中。
2>通用块层为所有的块设备提供一个抽象视图,隐藏硬件块设备的差异,可用通用数据结构描述。
e. 内核I/O调度层(I/O Scheduler Layer)根据内核的调度策略, 对等待处理的I/O等待队列排序。
把物理介质上相邻的数据请求聚集在一起。
f. 块设备驱动(Block Device Driver)通过向磁盘控制器发送相应的命令,执行真正的数据传输。
3. 各层具体干了些啥
。。。
阅读(650) | 评论(0) | 转发(0) |