【前端面试】操作系统(二)

进程调度策略

进程调度策略是操作系统中用于选择和分配CPU资源给不同进程的重要机制。以下是几种常见的进程调度策略:

1. 先来先服务(FCFS, First Come First Served)

  • 原理:按照进程到达的先后顺序进行调度,即先到达的进程先被调度执行。
  • 优点:实现简单,易于理解,公平性较高。
  • 缺点:可能导致长作业等待时间过长,影响系统吞吐量和响应时间,不利于短作业和I/O密集型作业。

2. 短作业优先(SJF, Shortest Job First)

  • 原理:选择剩余执行时间最短的进程先运行,以减少平均等待时间。
  • 优点:能最大程度地减少平均等待时间,提高系统吞吐量。
  • 缺点:可能导致长作业饥饿,且需要预先知道每个进程的执行时间,对实时系统不太适用。

3. 优先级调度(Priority Scheduling)

  • 原理:为每个进程分配一个优先级,并按照优先级从高到低进行调度。优先级高的进程将优先运行。
  • 优点:可以确保关键任务或重要任务得到优先处理。
  • 缺点:可能导致低优先级进程长时间等待,造成饥饿现象。

4. 时间片轮转(RR, Round Robin)

  • 原理:将CPU时间划分成一段段时间片,每个进程执行一个时间片,然后轮流切换到下一个进程。若某个进程的时间片用完仍未完成,则被放到就绪队列的末尾等待。
  • 优点:系统能在给定的时间内响应所有用户进程的请求,且时间片大小可调,以平衡系统响应时间和吞吐量。
  • 缺点:可能导致上下文切换开销增加,影响系统性能。

5. 最高响应比优先(HRRN, Highest Response Ratio Next)

  • 原理:综合考虑等待时间和执行时间的比值(响应比),选择响应比最高的进程先执行。响应比定义为(等待时间+服务时间)/服务时间。
  • 优点:能够平衡长作业和短作业的等待时间,避免长作业饥饿。
  • 缺点:每次调度前需要计算响应比,增加了系统开销。

6. 多级反馈队列调度(Multilevel Feedback Queue Scheduling)

  • 原理:将进程按照优先级划分为多个队列,每个队列拥有不同的时间片大小。进程在队列中运行一段时间后,如果没有完成,就会被放入下一个队列中等待调度。
  • 优点:能够满足不同类型进程的需求,提高系统整体性能。
  • 缺点:实现较为复杂,需要合理设置队列的优先级和时间片大小。

7. 抢占式调度(Preemptive Scheduling)

  • 特点:允许高优先级的进程抢占正在执行的低优先级进程的CPU资源。
  • 应用:常用于实时系统和对响应时间要求较高的应用场景。

综上所述,不同的进程调度策略适用于不同的场景和需求。操作系统在选择调度策略时,需要根据实际情况进行权衡和选择,以最大化系统性能、响应时间和公平性。

产生死锁原因

产生死锁的原因可以归结为多个方面,主要包括资源竞争、进程推进顺序不当、信号量使用不当等。以下是对这些原因的详细解析:

一、资源竞争

  • 资源不足:系统中拥有的不可剥夺资源(如磁带机、打印机等)数量不足以满足多个进程运行的需要。当多个进程同时请求这些资源时,如果资源的分配无法满足所有进程的需求,就可能导致进程因争夺资源而陷入僵局。
  • 资源分配不当:资源分配策略不合理或执行不当时,也可能导致死锁。例如,如果系统没有正确地管理资源的分配和释放,就可能出现进程持有资源但不释放,而其他进程又需要这些资源的情况。

二、进程推进顺序不当

  • 进程运行推进顺序与速度不同:进程在运行过程中,如果它们的推进顺序和速度不合适,也可能导致死锁。例如,两个进程P1和P2分别持有资源R1和R2,同时P1请求R2而P2请求R1。如果这两个请求的顺序和时机不当,就可能导致它们相互等待对方释放资源,从而陷入死锁。
  • 进程间相互等待:进程间可能因为等待对方发来的消息或资源而陷入死锁。例如,进程A等待进程B的消息,而进程B又在等待进程A的消息,这样就形成了一个循环等待的局面,导致两个进程都无法继续执行。

三、信号量使用不当

  • 信号量是一种用于进程间同步和互斥的工具。如果信号量的使用不当,如信号量的初始值设置不合理、信号量的操作顺序错误等,都可能导致死锁。
  • 竞态条件:当多个进程同时对共享变量进行读写操作时,如果没有适当的同步机制来控制这些操作,就可能出现竞态条件。竞态条件可能导致数据不一致或死锁等问题。

四、其他因素

  • 代码逻辑错误:程序中的逻辑错误也可能导致死锁。例如,一个进程在获取锁之前没有释放之前获取的锁,就可能导致死锁。
  • 超时设置不合理:当超时设置不合理时,也可能导致死锁。例如,一个进程等待时间过长而没有释放锁,就可能导致其他进程无法获得锁而陷入死锁。

总结

产生死锁的原因多种多样,但主要可以归结为资源竞争、进程推进顺序不当、信号量使用不当等方面。为了避免死锁的发生,可以采取预防死锁、避免死锁、检测死锁和解除死锁等措施。这些措施包括破坏死锁产生的必要条件(如互斥条件、请求与保持条件、不可剥夺条件和循环等待条件)、使用合理的资源分配策略、设置合理的超时时间等。同时,在设计和实现并发程序时,还需要注意代码的逻辑正确性和同步机制的有效性,以避免因代码逻辑错误或同步机制不当而导致的死锁问题。

解决死锁方法

一、预防死锁

预防死锁的主要策略是破坏死锁产生的四个必要条件(互斥条件、请求与保持条件、不可剥夺条件和循环等待条件)中的至少一个。由于互斥条件通常无法破坏,因此主要关注其他三个条件:

  1. 破坏请求与保持条件
    • 一次性分配:要求每个进程在开始执行前一次性申请完它所需要的全部资源,仅当系统能满足进程的资源申请要求时,才一次性把资源分配给该进程,否则必须等待。这种方式简化了资源分配,但可能导致资源利用率降低。
    • 资源预分配:在进程运行前预先分配好资源,确保进程在运行过程中不会因为资源不足而阻塞。
  2. 破坏不可剥夺条件
    • 允许进程在其运行过程中因请求资源而阻塞时,将其已占有的资源释放给其他进程。但是,这种方法在实施时可能会遇到困难,因为进程可能会因为资源的突然丢失而导致数据不一致或其他问题。
  3. 破坏循环等待条件
    • 资源有序分配法:给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完。这样,即使存在多个进程申请多个资源,也不会形成循环等待链。

二、避免死锁

避免死锁是在资源分配过程中,通过一定的算法来动态地检测资源分配的安全性,以避免系统进入不安全状态。

  1. 银行家算法
    • 银行家算法是一种避免死锁的经典算法,它通过模拟资源分配过程来检查系统是否处于安全状态。如果系统处于安全状态,则分配资源;否则,不分配资源并等待一段时间后再试。
  2. 资源分配图简化
    • 维护一个资源分配图,表示系统中资源的分配情况。通过简化资源分配图(如删除已分配的资源边或添加新的进程节点),可以判断系统是否可能进入死锁状态。

三、检查死锁

检查死锁是在系统运行过程中,通过一定的机制来发现是否存在死锁现象。

  1. 等待图分析
    • 使用等待图(Wait-for Graph)来分析系统中的进程和资源之间的等待关系。如果图中存在循环,则说明可能存在死锁。
  2. 资源分配图分析
    • 通过检查资源分配图中是否存在环,可以判断系统是否处于死锁状态。
  3. 死锁检测工具
    • 使用专门的死锁检测工具(如Java的jconsole、jvisualvm等)来监视和分析系统的资源分配和进程等待情况,从而发现死锁。

四、解除死锁

一旦检测到死锁,就需要采取措施来解除死锁,使系统能够继续正常运行。

  1. 资源剥夺
    • 强制剥夺某些进程所占用的资源,并将其分配给其他进程。但是,这种方法需要谨慎使用,因为它可能会导致被剥夺资源的进程数据不一致或操作失败。
  2. 进程终止
    • 终止导致死锁的一个或多个进程,以释放它们所占用的资源。选择哪个进程终止可能取决于进程的优先级、资源占用情况等因素。
  3. 回滚
    • 将系统状态回滚到死锁发生前的某个时间点,以便重新分配资源并避免死锁。但是,这种方法可能会导致已完成的操作被撤销,从而增加系统的开销和复杂性。
  4. 动态调整
    • 在系统运行过程中动态地调整资源的分配和进程的执行顺序,以避免死锁的发生。这种方法需要系统具备较高的灵活性和响应能力。
相关推荐
敲代码不忘补水44 分钟前
二十种编程语言庆祝中秋节
java·javascript·python·golang·html
我码玄黄1 小时前
JS 的行为设计模式:策略、观察者与命令模式
javascript·设计模式·命令模式
营赢盈英1 小时前
OpenAI API key not working in my React App
javascript·ai·openai·reactjs·chatbot
guangzhi06331 小时前
JVM本地方法栈
java·jvm·面试
范特西是只猫2 小时前
echarts map地图动态下钻,自定义标注,自定义tooltip弹窗【完整demo版本】
前端·javascript·echarts
麒麟而非淇淋2 小时前
AJAX 进阶 day4
前端·javascript·ajax
代码搬运媛6 小时前
el-table 如何实现行列转置?
javascript·vue.js·elementui
+码农快讯+7 小时前
JavaScript 基础 - 第17天_AJAX综合案例
开发语言·javascript·ajax
+码农快讯+8 小时前
JavaScript 基础 - 第16天_AJAX入门
javascript·ajax·okhttp