操作系统中的调度算法

面试中常见的几个问题就是操作系统中的磁盘调度算法、内存调度算法以及进程调度算法,它们之间是有区别的。

一、磁盘调度算法

磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中,主要是寻道时间。因此: 磁盘调度算法的目标是使磁盘的平均寻道时间最少

1、磁盘调度算法

磁盘调度算法有:

  1. FIFO:先来先服务算法

    先进先出的调度策略,这个策略具有公平的优点,因为每个请求都会得到处理,并且是按照接收到的顺序进行处理

  2. SSTF:最短寻道时间优先

    选择使磁头从当前位置开始移动最少的磁盘I/O请求,所以SSTF总是选择导致最小寻道时间的请求

  3. SCAN:扫描算法/电梯算法

    SCAN要求磁头仅仅沿一个方向移动,并在途中满足所有未完成的请求,知道它到达这个方向上的最后一个磁道,或者在这个方向上没有其他请求为止

  4. C-SCAN:循环扫描算法

    把扫描限定在一个方向,当访问到某个方向的最后一个磁道时,磁道返回磁盘相反方向磁道的末端,并再次开始扫描。

2、举例

磁头当前位置:125。

等待:86,147,1,77,4,50,02,75,30

下面看一下不同调度算法下的访问顺序:

  1. FIFO:先来先服务算法

  2. SSTF:最短寻道时间优先

  3. SCAN:扫描算法/电梯算法

  4. C-SCAN:循环扫描算法

二、内存调度算法

1、页面置换

页面置换:在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断(page fault)。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。

典型的置换算法有以下四种:

  1. OPT:最佳替换算法(Optional Replacement)。

    替换下次访问距当前时间最长的页。opt算法需要知道操作系统将来的事件,显然不可能实现,只作为一种衡量其他算法的标准。

  2. LRU:最近最少使用(Least Recently Used).

    替换上次使用距离当前最远的页。根据局部性原理:替换最近最不可能 访问到的页。性能最接近OPT,但难以实现。可以维护一个关于访问页的栈或者给每个页添加最后访问的时间标签,但开销都很大。

  3. FIFO:先进先出(First In First Out)

    将页面看做一个循环缓冲区,按循环方式替换。这是实现最为简单的算法,隐含的逻辑是替换驻留在内存时间最长的页。但由于一部分程序或数据在整个程序的生命周期中使用频率很高,所以会导致反复的换入换出。

  4. Clock:时钟替换算法(Clock)

    给每个页帧关联一个使用位。当该页第一次装入内存或者被重新访问到时,将使用位置为1。每次需要替换时,查找使用位被置为0的第一个帧进行替换。在扫描过程中,如果碰到使用位为1的帧,将使用位置为0,在继续扫描。如果所谓帧的使用位都为0,则替换第一个帧。

三、进程调度算法

1、进程调度与作业调度

进程调度是真正让某个就绪状态的进程到处理机上运行,而作业调度只是使作业具有了竞争处理机的机会。

  • 进程调度(又称微观调度、低级调度、短程调度):是按照某种调度算法从就绪状态的进程中选择一个进程到处理机上运行。负责进程调度功能的内核程序称为进程调度程序。
  • 作业调度(又称高级调度、宏观调度、长程调度):是按某种调度算法从后备作业队列中选择作业装入内存运行;另外当该作业执行完毕后,还负责回收系统资源。完成作业调度功能的程序称为作业调度程序。

2、调度算法

  1. FIFO:先进先出算法

    • 该算法既可用于作业调度, 也可用于进程调度。
    • 按照进程进入就绪队列的先后次序来选择。即每当进入进程调度,总是把就绪队列的队首进程投入运行。
    • 这种调度算法有利于长作业(进程),不利于短作业(进程)。有利于CPU繁忙型的作业,不利于I/O繁忙型的作业。
  2. SPN:短作业(进程)优先调度算法

    • 该算法既可用于作业调度, 也可用于进程调度
    • 最短进程优先,下一次选择所需处理时间最短的进程
    • 可以有效地降低作业的平均等待时间,提高系统吞吐量。
    • 不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。
  3. SRT:最短剩余时间优先,总是选择预期剩余时间最短的进程

  4. 高优先权优先调度

    • 可用于作业调度,也可用于进程调度
    • 分为抢占式优先权调度和非抢占式优先权调度
    • 根据优先权的类型分为静态优先权,动态优先权
    • 静态优先权是在创建进程时确定的,且在进程的整个运行过程期间保持不变。
    • 动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的。
  5. HRRN:最高响应比优先,

    • 优先权 = 响应时间 / 服务时间
    • 这种算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务,实现了一种较好的折中。但是,每次进行调度时,都需先做响应比的计算,增加了系统开销。
  6. 轮转:时间片轮转法

    • 系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
    • 当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾。
    • 然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间。
  7. 多级反馈队列调度:

    • 设置多个队列,各个队列优先级和时间片长短都不同,优先级由高到低,时间片长短逐渐增长,
    • 当一个新进程进入内存后,首先将它放在第一队列的队尾,按照FCFS原则排队等待调度。当轮到该进程执行时,如果能在该时间片内完成,则准备撤离系统,否则将该进程转入到第二队列的队尾,以此类推。
    • 仅当第一队列空闲时,调度程序才调度第二队列中的进程,以此类推。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先级更高的队列,则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回第i队列的末尾,把处理机分配给新到的高优先级进程。

四、参考地址

http://blog.csdn.net/pi9nc/article/details/19848831

http://blog.csdn.net/luyafei_89430/article/details/12971171