自底向上的I/O扯淡

网上流传的Linux kernel Map大图扔在下面。现层次化概览一下:

1)硬盘驱动器(不是硬盘驱动程序):硬盘驱动器就是通常所说的硬盘。 “硬盘|驱动器”,“硬盘”- 盘,“驱动器”-旋转轴,磁头,读写臂等。

  参见维基百科:http://zh.wikipedia.org/wiki/硬盘驱动器 百度百科:http://baike.baidu.com/view/7706.htm 。 

2)硬盘控制器:也是个硬部件,管理硬盘的。下面大图中的electronics层中的disk controllers。

  参加百度百科:http://baike.baidu.com/view/2346261.htm

3)硬盘驱动程序:软部件驱动程序。disk controllers drivers。内核从这里来与硬盘硬部件I/O。

  3.0)hd.c: 硬盘驱动程序,利用硬盘控制器提供的可编程寄存器来对实际的盘进行读写,向上提供可用的接口。

  3.1) ll_rw_blk.c:向下执行底层设备块读写(调用硬盘控制器驱动程序提供的接口),向上提供可用的接口。

4)buffer.c:使用ll_rw_blk.c提供的接口来读硬盘上的数据,当作高速缓冲,向上提供可用的接口。

5)文件系统:

  管理函数:操作超级块、节点、位图等。

  读写中间件:使用buffer.c提供的接口读写数据,向上提供可用的接口。

  数据访问接口:使用读写中间件提供的接口读写,向上提供read write接口。

6)于是上面都可以来用了。如图是MySql利用OS的文件系统I/O来实现各种存储引擎。

大体上应该是这样的。参考资料:《linux内核完全注释》 《linux内核源代码情景分析》

原文地址:https://www.cnblogs.com/jiejue/p/2743717.html