I/O scheduler负责处理对物理设备的操作调度,采用的是电梯调度算法。但是为了满足其它的需求。linux提供四种调度策
略:
1.the noop elevator:
这种策略没有order队列,只有一个dispatch队列,每来一个操作请求就将其放在dispatch队列的最后。
2.the cfq(complete fairness queueing)elevator:
这种策略核心是一个hashtable,它将到来的操作请求按所属进程组的id,散列到hashtable中,hashtable的每个项可以
看做是一个队列,调度的时候按照round-robin的方式进行,一个队列一个队列进行处理。
3.the deadline elevator:
这种策略有四个order队列,其中的两个包括read和write队列,另外两个是deadline队列,也分为read和write两种。
当一个操作被长时间搁置时,就会将其加入到deadline队列中去,调度的时候先调度deadline队列,再调度普通队列。
read操作请求的过期时间比write操作请求的过期时间(expire time)要短,因为read操作经常会阻塞进程。
4.the anticipatory elevator:
这种队列跟第3种队列差不多,只是设计的时候更sophisticated,比方说当elevator连续接到一个进程2次I/O请求,那么
elevator会假设该进程会发第3次请求,因此它会停止调度一段时间等进程发出第3次调用,这些假设都是基于进程的一些
统计信息的