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

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

操作系统调度与内存管理

随着秋季招行即将到来,很多技术爱好者纷纷在各大技术群分享他们的面经。通过这些分享,我发现操作系统中的调度算法和内存管理问题仍然是大厂面试中常考的核心内容。尤其是调度算法部分,涉及的知识点较多,且需要深入理解其原理与优缺点。本文将围绕操作系统中的调度算法、内存管理以及磁盘调度算法展开,希望能为大家提供有价值的参考。


一、调度算法

在操作系统中,调度算法是决定哪个进程能在何时获得CPU的核心机制。常见的调度算法包括进程调度、页面置换和磁盘调度等。我们先从调度算法说起。

1. 进程调度算法

进程调度算法是操作系统的核心,主要决定哪个进程能在何时占用CPU。常见的调度机制包括抢占式和非抢占式调度。

抢占式调度

抢占式调度的特点是进程运行时可能被中断,转而让其他进程运行。常见的抢占原则有三种:

  • 时间片原则:每个进程分配固定长度的时间片,时间片结束后会被调度下一个进程。
  • 优先权原则:进程根据优先级决定运行顺序,优先级高的进程有更高的权重。
  • 短作业优先原则:优先运行运行时间较短的进程,以提高系统吞吐量。
  • 非抢占式调度

    非抢占式调度则是进程在获得CPU后会一直运行,直到完成或被阻塞。这种调度方式简单,但不适用于多任务环境。

    2. 常见调度算法

    调度算法分为进程调度、页面置换和磁盘调度三大类。以下是几种常见调度算法的介绍:

    a. 先来先服务(FCFS)

    FCFS是最简单的调度算法,非抢占式的。每次从就绪队列中选择最先进入的进程运行,直到完成或被阻塞。

    优点:公平简单,适合单任务环境。缺点:长作业占用CPU时间过长,不利于短作业。

    b. 最短作业优先(SJF)

    SJF是抢占式调度算法,优先选择运行时间最短的进程。这种调度方式能显著提高系统吞吐量,但对长作业不利,可能导致长作业被推迟。

    优点:短作业优先,系统吞吐量高。缺点:长作业可能饥饿。

    c. 高响应比优先(HRRN)

    HRRN综合了短作业和长作业的优点。它通过计算响应比优先级来决定进程的运行顺序,响应比计算公式为:

    • 响应比 = (等待时间 + 1) / 服务时间

    这种调度方式兼顾了短作业和长作业的需求。

    d. 时间片轮转(RR)

    时间片轮转是最古老的调度算法,也是最简单和最公平的。每个进程分配固定长度的时间片,时间片结束后会被调度下一个进程。

    优点:公平,适合多任务环境。缺点:时间片长度设置不当会影响性能。

    e. 多级反馈队列(MFC)

    MFC是结合了时间片轮转和最高优先级调度算法的优化算法。内存分为多个队列,优先级越高的队列时间片越短。新进程加入队列时,如果有高优先级队列为空,会立即被调度运行。

    优点:兼顾短作业和长作业,响应时间较优。缺点:实现复杂,需要维护多级队列。


    二、内存管理

    内存管理是操作系统的另一大课题,主要涉及页面置换和物理内存管理。

    1. 缺页中断

    当CPU访问的页面不在物理内存中时,会发生缺页中断。缺页中断的处理流程包括:

  • 检查页表项状态,发现无效页。
  • 调度页面置换算法选择替换的物理页面。
  • 将新页面换入物理内存,并更新页表项。
  • CPU重新执行导致中断的指令。
  • 2. 页面置换算法

    页面置换是内存管理的核心,常见的页面置换算法包括:

    a. 最佳页面置换(OPT)

    最佳页面置换算法根据未来访问情况选择最长时间不访问的页面进行置换。优点接近最优,但难以实现。

    b. 先进先出(FIFO)

    FIFO根据页面进入内存的先后顺序进行置换,简单易行,但可能导致某些页面长期未被访问(饥饿问题)。

    c. 最近最久未使用(LRU)

    LRU根据页面最近的访问时间选择最长时间未使用的页面进行置换。虽然理论接近最优,但实现复杂,需要维护访问时间。

    d. 时钟页面置换(Clock)

    时钟算法通过维护一个环形链表,根据访问时间选择最旧的页面进行置换。简单且效率较高。

    e. 最不常用(LFU)

    LFU根据页面访问频率选择最不常用的页面进行置换。简单,但可能导致高访问频率页面被错误替换。


    三、磁盘调度算法

    磁盘调度算法的目标是优化磁盘I/O性能,常见算法包括:

    a. 先来先服务(FCFS)

    FCFS是最简单的磁盘调度算法,请求到来时按照到来顺序处理。

    优点:简单易实现。缺点:对大型磁盘分散请求时性能差。

    b. 最短寻道时间优先(SSF)

    SSF优先处理当前磁头位置寻道时间最短的请求,有效降低磁盘寻道时间。

    优点:减少磁盘寻道时间。缺点:可能导致某些磁道饥饿。

    c. 扫描算法

    扫描算法规定磁头在一个方向上移动,访问所有未完成的请求,直到到达磁盘边缘后改变方向。

    优点:防止饥饿,磁盘利用率高。缺点:中间磁道响应频率较低。

    d. 循环扫描(CSCAN)

    CSCAN规定磁头在每个方向上移动到最远的请求后立即反向移动,返回时不处理中间请求。

    优点:平均化磁道响应频率。缺点:反向移动时间较长。

    e. LOOK与C-LOOK

    LOOK和C-LOOK是对SCAN算法的优化,磁头移动到最远的请求后立即反向移动,LOOK允许反向移动途中处理请求,C-LOOK则不允许。

    优点:提高磁盘利用率。缺点:反向移动时间较长。


    四、总结

    调度算法和内存管理是操作系统性能的核心。选择合适的调度和置换算法,能够显著提升系统性能。在实际应用中,需要根据工作负载特点选择最优算法。同时,理解调度和置换算法的原理,也是面试中的核心考点。希望本文能为大家提供有价值的参考,祝大家秋招顺利!

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

    你可能感兴趣的文章
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>
    npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
    查看>>
    npm scripts 使用指南
    查看>>
    npm should be run outside of the node repl, in your normal shell
    查看>>
    npm start运行了什么
    查看>>
    npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
    查看>>
    npm 下载依赖慢的解决方案(亲测有效)
    查看>>
    npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
    查看>>
    npm.taobao.org 淘宝 npm 镜像证书过期?这样解决!
    查看>>