Linux块I/O层与驱动开发详解
1. Linux块I/O层概述
在2.4到2.6内核版本发布期间,Linux的块I/O层进行了重大的改进。这是因为块层相较于其他内核子系统,对系统整体性能的影响更为显著。
下面通过图14.2来了解Linux块I/O层的工作原理。存储介质中包含文件,这些文件位于文件系统中,如EXT3或Reiserfs。用户应用程序通过调用I/O系统调用来访问这些文件。文件系统操作首先经过通用虚拟文件系统(VFS)层,然后进入各个文件系统驱动程序。
其中,缓冲区缓存通过缓存磁盘块来加速对块设备的文件系统访问。如果在缓冲区缓存中找到所需的块,就可以节省访问磁盘读取该块的时间。每个块设备的数据会在请求队列中排队。文件系统驱动程序将请求填充到所需块设备的请求队列中,而块驱动程序则从相应的队列中接收并处理请求。在这中间,I/O调度程序会对请求队列进行操作,以最小化磁盘访问延迟并最大化吞吐量。
2. I/O调度程序
块设备存在寻道时间,即磁盘头从当前位置移动到目标磁盘扇区所需的延迟。I/O调度程序的主要目标是通过最小化这些寻道时间来提高系统吞吐量。为了实现这一目标,I/O调度程序会根据请求对应的磁盘扇区对请求队列进行排序,新请求会按照这个顺序插入队列。如果队列中已有与相邻磁盘扇区相关的请求,新请求会与之合并。由于这些特性,I/O调度程序的操作类似于电梯,它们会在一个方向上调度请求,直到处理完队列中的最后一个请求。
在2.4内核中,I/O调度程序实现了一种简单的算法,称为Linus电梯调度程序。但在实际应用中,它并不理想。因此,在2
超级会员免费看
订阅专栏 解锁全文
2592

被折叠的 条评论
为什么被折叠?



