当前位置: 首页 > news >正文

第三章:处理机调度与死锁

第三章:处理机调度与死锁

1.处理机调度的概述

  • 高级调度:硬件到内存之间的调度,将外存上处于后备队列中的作业调入内存,也称为作业调度

  • 低级调度:内存到CPU之间的调度,决定就绪队列中的哪个进程应获得处理机,也称为进程调度

  • 中级调度:根据优先级,外存上的急需运行的进程调入内存运行,也称为内存调度

调度程序分为三部分(进程调度的机制)

  • 排队器:用于将就绪进程插入相应的就绪队列

  • 分派器:用于将选定的进程移出就绪队列

  • 上下文切换器:进行新旧进程之间的上下文切换

        

抢占式:系统可以“打断”正在用CPU的进程,比如来了更紧急的任务,或者它用太久了,就把它暂停,让别人先用。

非抢占式:谁拿到CPU就一直用,直到自己用完或主动让出,别人不能插队。

2.调度算法

  • 调度算法的共同目标:资源利用率,公平性,平衡性,策略强制执行

    • 批处理系统:周转时间短,吞吐量高,处理机利用率高

    • 分时系统:响应时间快,均衡性

    • 实时系统:截止时间的保证

  • CPU利用率 = CPU有效工作时间 / ( CPU有效工作时间 + CPU空闲等待时间 )

  • 评价指标

    • 周转时间:从作业提交给系统开始,到作业完成为止的这段时间间隔
    • 带权周转时间:权值为作业周转时间T系统为之服务时间TS之比
    • 响应时间:从用户提交请求开始,直到系统首次显示处理结果的时间
    • 等待时间:进程在就绪队列中等待调度的所有时间之和
  • 作业调度算法:

    • 先来先服务(FCFS)、短作业优先(SJF)、优先级调度(PR)、高响应比(HRRN)

  • 进程调度算法:

    • 先来先服务(FCFS)、短作业优先(SJF)、优先级调度(PR)、时间片轮转(RR)

  1. 先来先服务(FCFS):按照作业到达的先后次序来进行调度

  2. 短作业优先(SJF):

    • 对作业:从后备队列中选择若干个估计运行时间最短的作业

    • 对进程:关联到每个进程下次运行的CPU区间长度,调度最短的进程

      • 抢占式:有比当前进程剩余时间片更短的进程到达时,先执行运行时间短的

      • 非抢占式:必须等到当前进程全部执行完或者主动放弃CPU

    • 缺点:人-机无法实现交互、未考虑作业的紧迫程度

  3. 优先级调度(PR):基于作业/进程的紧迫程度,由外部赋予作业相应的优先级,根据优先级进行调度。小的优先数具有高优先级

    • 静态优先级:在创建进程时,确定优先数,在进程运行的整个过程中不变,可能会出现优先级低的进程长期没有被调度的情况

    • 动态优先级:创建进程时先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变

    • 缺点:饥饿 ——低优先级的进程可能永远得不到运行

  4. 高响应比优先调度算法(PR):既考虑作业的等到时间,又考虑作业的运行时间

  5. 时间片轮转:类似于FCFS,但增加了抢占,(时间片 / 10 > 进程上下文切换时间)

3.实时调度

  • 最早截止时间优先(EDF):根据任务的截止时间确定优先级,截止时间越早,优先级越高

  • 最低松弛度优先(LLF)算法:根据任务的紧急程度确定优先级,紧急程度越高,优先级越高

4.Linux进程调度

5.死锁概述

  • 概念:死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局

  • 产生死锁的必要条件:

    • 互斥

    • 请求与保持

    • 不可抢占

    • 循环等待

  • 产生死锁的原因:

    • 竞争不可抢占性资源

    • 竞争可消耗性资源

    • 进程推进顺序不当

  • 处理死锁的方法:

    • 预防死锁:破坏死锁的四个必要条件中一个或几个

    • 避免死锁:在资源动态分配时,防止系统进入不安全状态。

    • 检测死锁:事先不采取任何措施,允许死锁发生,但及时检测死锁发发生。

    • 解除死锁:检测到死锁发生时,采取相应措施,将进程从死锁状态中解脱出来。

6.预防死锁

  • 互斥:互斥条件是共享资源必须的,不能改变,应加以保证

  • 请求与保持:别一边拿着资源一边再要新资源,要么全要完再用,要么用完释放完再要,这样更安全高效。

    • 传统做法:执行前一次性申请全部资源

    • 改进做法:先拿一部分资源开始运行,用完后再逐步释放,再申请新的资源。

  • 非抢占:

    • 如果一个进程的申请没有实现,它要释放所有占有的资源;

  • 循环等待:

    • 对所有资源类型进行线性排序,并赋予不同的序号,要求进程按照递增的顺序申请资源

7.避免死锁

死锁避免 ---> 确保系统永远不会进入不安全状态

银行家算法是一种避免死锁的策略,只在确保“不会让系统陷入危险状态”的前提下,才分配资源


🌟 核心思想(通俗版):

系统像一个谨慎的银行家:

  • 每个进程申请资源时,先假装同意,然后检查: “如果给了它,剩下的资源还能不能让所有进程都顺利完成?”

  • 如果能 → 安全,就真的分配;

  • 如果不能 → 不安全,就拒绝,让进程等等。


🔑 关键概念:

  • 最大需求(Max):每个进程最多要多少资源(提前声明)。

  • 已分配(Allocation):已经给了多少。

  • 还需要(Need) = 最大需求 - 已分配。

  • 可用资源(Available):系统当前空闲的资源。


根据Available去找是否有能够满足的Need



✅ 总结一句话:

银行家算法 = 先模拟分配,确认安全再真正分配,从而避免死锁。

8.死锁的检测与解除

  • 🔍 死锁怎么检测?

    系统会画一张“资源分配图”:

    • 看哪些进程在等资源;

    • 看哪些资源被谁占着;

    • 如果图中出现“循环等待”(比如 A 等 B 的资源,B 又等 A 的),就说明发生了死锁。

    就像几个人互相借笔,A 等 B 还笔,B 等 C,C 又等 A— —谁也动不了,卡住了。

  • 🛠️ 检测到死锁后怎么解除?

    常用方法有:

    1. 终止进程

      • 直接干掉一个或多个死锁中的进程(选代价小的,比如没做太多工作的)。

    2. 抢占资源

      • 把某个进程占的资源强行拿走,给别的进程用,打破循环。

      • 之后可能要让被抢的进程回滚重做。

    3. 回滚重启

      • 让某些进程退回到之前的安全状态,重新申请资源。

http://www.dtcms.com/a/590134.html

相关文章:

  • 德州做网站公司电话谷歌系平台推广
  • 【01】Canny边缘检测:原理、实现与性能对比
  • 41. CMake
  • 11.string(上)
  • 【开题答辩全过程】以 基于SpringBoot的智慧教育系统的设计与实现为例,包含答辩的问题和答案
  • 360永久免费建网站网站建设及空间
  • 轻松阅读漫画的利器——Kotatsu漫画阅读器
  • 婚纱外贸网站怎么用PS做珠宝网站
  • 新乡网站网站建设网页制作软件是什么
  • C#权威指南第9课:方法
  • fastjson中的原生反序列化漏洞
  • 网站弹屏广告怎么做的如何修改网站后台的用户名和密码
  • Spring中如何使用@Resource注解?
  • 高频面试八股文用法篇(十二)Java 包装类缓存机制
  • 【Envi遥感图像处理】019:影像自动配准操作
  • 杭州网站开发制作公司排名邹平做网站的公司
  • 做家装的网站classplus wordpress
  • IO接口基本结构与内容
  • 亲爱的redis你好
  • php搭建一个简单的网站做网站服装app
  • C++基于websocket的多用户网页五子棋 --- 认识依赖库
  • YOLOv5,YOLOv8替换激活函数
  • STM32外设学习--ADC模数转换器--笔记
  • 深圳网站开发建设服务公司网站推广软件排名
  • ArkTS多维度状态管理机制
  • 广西建设工程质量监督网站南京seo关键词优化资讯
  • 深圳建站公司有推荐的公司吗济南平台公司
  • 夏普比率和最大回撤公式推导及代码实现
  • win32k!xxxKeyEvent函数里面的win32k!xxxDoHotKeyStuff如何确定是CAD键的到来的
  • 网站建设课我要表白网站在线制作