下载后可任意编辑Read 系统调用在用户空间中的处理过程Linux 系统调用( SCI, system call interface) 的实现机制实际上是一个多路汇聚以及分解的过程, 该汇聚点就是 0x80 中断这个入口点( X86 系统结构)
也就是说, 所有系统调用都从用户空间中汇聚到 0x80 中断点, 同时保存具体的系统调用号
当 0x80 中断处理程序运行时, 将根据系统调用号对不同的系统调用分别处理( 调用不同的内核函数处理)
系统调用的更多内容, 请参见参考资料
Read 系统调用也不例外, 当调用发生时, 库函数在保存 read 系统调用号以及参数后, 陷入 0x80 中断
这时库函数工作结束
Read 系统调用在用户空间中的处理也就完成了
回页首Read 系统调用在核心空间中的处理过程0x80 中断处理程序接管执行后, 先检察其系统调用号, 然后根据系统调用号查找系统调用表, 并从系统调用表中得到处理 read 系统调用的内核函数 sys_read , 最后传递参数并运行 sys_read 函数
至此, 内核真正开始处理 read 系统调用( sys_read 是 read 系统调用的内核入口)
在讲解 read 系统调用在核心空间中的处理部分中, 首先介绍了内核处理磁盘请求的层次模型, 然后再按该层次模型从上到下的顺序依次介绍磁盘读请求在各层的处理过程
Read 系统调用在核心空间中处理的层次模型下载后可任意编辑图 1 显示了 read 系统调用在核心空间中所要经历的层次模型
从图中看出: 对于磁盘的一次读请求, 首先经过虚拟文件系统层( vfs layer) , 其次是具体的文件系统层( 例如 ext2) , 接下来是 cache 层( page cache 层) 、 通用块层( generic block layer) 、 IO 调度层( I/