linus电梯可能发生的四种操作:
  如果队列中已经存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并成一个请求。
  如果队列中存在一个驻留时间过长的请求,那么新请求将被插入到队列尾部,以防止其他旧的请求发生饥饿。
  如果队列中以扇区方向为序存在合适的插入位置,那么新请求插入该位置,保证队列中的请求是以被访问磁盘物理位置为序进行排列的。
  如果队列中不存在合适的请求插入位置,请求将被插入到队列尾部。
  目前2.6内核中已经有四种不同的I/O调度程序:
  终期限I/O调度程序
  为了减少请求饥饿,降低读操作响应时间,必须以降低全局吞吐量为代价。通过增加一个超时时间,并按照一定的请求类型排序,读写请求分别插入到特定的读/写FIFO队列中,当有请求超时,会提取出请求进行服务。/block/deadline-iosched.c
  预测I/O调度程序
  保证良好的读操作,也能维持良好的全局吞吐量。请求提交之后并不直接返回处理其他请求,而是会刻意的空闲片刻(默认为6毫秒),对于提交其他读操作请求是一个好机会,任何相邻磁盘位置操作的求情都回立刻得到处理。这种预测行为通过一系列的启发和统计工作完成。/block/as-iosched.c
  完全公正的排队I/O调度程序
  专门为工作负荷设计,如音频播放器总能即时从磁盘再填满它的音频缓冲区。把进入I/O请求放入特定的队列中,这种队列是根据引起I/O请求的进程组织的。以时间片轮转调度队列,从每个队列中选取请求数,然后进行下一轮调度。/block/cfq-iosched.c
  空操作的I/O调度程序
  不排序,也不进行其他预测,它是专为随机访问设备而设计的,如闪存卡。/block/noop-iosched.c
  内核命令行选项 elevator = cfq 会启动完全公正的I/O调度程序给所有的块设备。参数可选as(预测)、cfq(完全公正的排队)、deadline(终期限)、noop(空操作)。