博客
关于我
大厂面试爱问的「调度算法」,20 张图一举拿下
阅读量:531 次
发布时间:2019-03-09

本文共 1790 字,大约阅读时间需要 5 分钟。

进程调度算法与页面置换、磁盘调度算法的比较分析

1. 进程调度算法

1.1 进程调度的概念

进程调度(CPU 调度)是计算机中的关键任务之一。当CPU空闲时,系统需要选择一个处于就绪状态的进程进行执行。调度发生于以下几种情况:

  • 进程从运行状态转为等待状态
  • 进程从运行状态转为就绪状态
  • 进程从等待状态转为就绪状态
  • 进程从运行状态转为终止状态

调度可分为抢占式和非抢占式两种。非抢占式调度允许当前进程持续运行,直到其完成或被阻塞。而抢占式调度则允许正在运行的进程被暂时打断。

1.2 调度算法分类

常见的进程调度算法有:

  • 先来先服务调度算法(FCFS)

    • 非抢占式调度,按进程到达顺序依次执行
    • 适用于资源受限但长作业优越的场景,可能对短作业不利
  • 最短作业优先调度算法(SJF)

    • 抢占式调度,优先处理执行时间最短的进程
    • 适用于资源丰富但长作业影响大的场景,但可能导致长作业被忽视
  • 高响应比优先调度算法(HRRN)

    • 结合等待时间和服务时间,计算响应比优先级,优先调度响应比高的进程
    • 优化了SJF和FCFS的不足
  • 时间片轮转调度算法(RR)

    • 抢占式调度,按固定时间片轮流执行进程
    • 公平公正,适用于多用户环境
  • 最高优先级调度算法(HPF)

    • 静态或动态优先级调度,按优先级执行进程
    • 动态调度可根据作业长短或等待时间调整优先级
  • 多级反馈队列调度算法(MFCQ)

    • 结合了时间片轮转和最高优先级调度,将系统分为多个优先级队列
    • 新进程加入最高优先级队列后立即触发higher priority process,优化了系统响应时间
  • 2. 内存页面置换算法

    2.1 缺页异常处理

    当CPU访问的页面不在物理内存中时,会触发缺页中断。缺页中断与普通中断不同:

    • 产生时间较早
    • 中断时,CPU会重新执行当前指令

    缺页处理流程:

  • 发现缺页
  • 更新物理内存状态
  • 写回到磁盘,并更新页表
  • 重新执行被中断的指令
  • 2.2 页面置换算法评估

    页面置换的主要目标是减少页面换入换出的开销。常用算法包括:

  • 最佳页面置换算法(OPT)

    • 预见未来访问,置换最久未访问的页面
    • 理想状态,但无法实现
  • 先进先出置换算法(FIFO)

    • 最先进入序列的页面优先被置换
    • 简单性好,但导致页面多次置换,效率低
  • 最近最久未使用(LRU)

    • 根据最近的页面使用时间选择置换页
    • 历史存用,适用于大部分系统
  • 时钟页面置换算法(CLOCK)

    • 使用环形链表,每页标记访问状态和修改状态,定期移除未被使用的页
    • 实现简单,效率较高
  • 最不常用页面置换算法(LFU)

    • 按照访问频率最低的页面优先替换
    • 逻辑简单,但硬件支持成本高
  • 2.3 算法比较

    • OPT:ε isLoading 和_maximum future access time
    • FIFO:ε istime since enter queue
    • LRU:ε oftenest recently used
    • CLOCK:ε circular linkage, cleanup strategy
    • LFU:ε least frequently used

    3. 磁盘调度算法

    3.1 磁盘结构

    磁盘由多个盘面组成,每个盘面有多个磁道,每个磁道有多个扇区。寻道时间占磁盘操作时间的绝大部分。

    3.2 策略优化

    磁盘操作本质上是顺序决策,算法包括:

  • 先来先服务(FCFS)

    • 依次执行磁道请求
    • 适用于简单场景,但磁头频繁跨道
  • 最小寻道时间优先(SSF)

    • 优先处理最近当前磁头位置的磁道请求
    • 减少寻道时间,但可能导致饥饿现象
  • 扫描算法(SCAN)

    • 磁头逐个处理请求,直到转到盘末端
    • 返回时继续处理剩余请求,避免饥饿
  • 循环扫描(CSCAN)

    • 磁头只处理一个方向上的请求
    • 减少磁头反转次数,提高效率
  • 圆形扫描(C-SCAN)

    • 与SCAN类似,磁头移动到最高请求位置后立即反转,处理另一端请求
  • LOOK和 C-LOOK

    • 磁头移动至远端请求位置后立即反转
    • LOOK允许多个方向调处;C-LOOK只能
  • 4. 算法优化

    • 优化目标:减少寻道时间,提高磁盘吞吐量
    • 常见优化措施
      • 选择合理的盘面安排策略
      • 合理调节磁头移动速度
      • 使用先进先出或类似策略,减少磁盘空闲时间

    通过对比各类调度和页面置换算法,可以根据系统特点选择最优方案。例如,对于I/O密集型系统,采用时间片轮转或循环扫描调度;而CPU密集型系统,则使用多级反馈队列调度以更高效地管理进程调度。

    转载地址:http://ruqiz.baihongyu.com/

    你可能感兴趣的文章
    python-计网实验二-套接字
    查看>>
    C++学习日记2——多态篇的纯虚函数和抽象类
    查看>>
    F - 数据结构实验之链表四:有序链表的归并
    查看>>
    为什么使用%lf读取double型的值,而用%f进行显示?
    查看>>
    用JavaScript实现希尔排序
    查看>>
    iconfont字体图标导入到vue项目中
    查看>>
    2020.11.30-12.6周报
    查看>>
    Nuxt.js服务器端渲染框架
    查看>>
    Svn commit failed aborting commit
    查看>>
    卧槽!细说JVM内存模型,已拿到offer
    查看>>
    带你一起手撕Dubbo,SpringBoot与Cloud,深入剖析
    查看>>
    dynamo中如何通过节点读取cad图纸数据
    查看>>
    纯干货!深度分析一下AQS原理,一文全懂
    查看>>
    腾讯Java面试题,从基础到源码统统帮你搞定,2年以上经验必看
    查看>>
    字节跳动算法工程师总结:腾讯+字节+阿里面经真题汇总,含面试题+答案
    查看>>
    LeetCode 22. 括号生成
    查看>>
    (二)MyBatis学习笔记——使用映射配置文件进行CRUD、核心配置文件使用
    查看>>
    LeetCode 76. 最小覆盖子串
    查看>>
    架构 -- rsync补充02
    查看>>
    shell基础 - 03
    查看>>