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

[2.2.2]进程调度的时机、方式、切换与过程

文章目录

  • 第二章 进程管理
    • 进程调度的时机、方式、切换与过程
      • (一)进程调度的时机
      • (二)进程调度的方式
      • (三)进程的切换与过程
    • 小结

第二章 进程管理

进程调度的时机、方式、切换与过程

  • 时机
    • 什么时候需要进程调度?
    • 什么时候不能进行进程调度?
  • 切换与过程
    • “狭义的调度”与“切换”的区别
    • 进程切换的过程需要做什么?
  • 方式
    • 非剥夺调度方式(非抢占式)
    • 剥夺调度方式(抢占式)

(一)进程调度的时机

  进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。

  什么时候需要进行进程调度与切换?

  (1)当前运行的进程主动放弃处理机

    ①进程正常终止;

    ②运行过程中发生异常而终止;

    ③进程主动请求阻塞(如 等待I/O)。

  (2)当前运行的进程被动放弃处理机

    ①分给进程的时间片用完;

    ②有更紧急的事需要处理(如 I/O中断);

    ③有更高优先级的进程进入就绪队列。


  而进程调度并不是什么时候都能进行的,有些时候不能进行进程调度与切换。

  (1)在处理中断的过程中。由于中断处理过程很复杂,与硬件密切相关,因此很难做到在进行中断处理过程、处理到一半的时候,去进行进程切换的。

  (2)进程在操作系统内核程序临界区中。(下文会具体讲)

  (3)在原子操作过程中(原语)。原子操作不可中断,要一气呵成(如之前讲过的修改PCB中进程状态标志,并把PCB放到相应队列。而如果在执行到一半去进行进程调度与切换了,就有可能导致数据不匹配、安全隐患)


  进程在操作系统内核程序临界区不能进行调度与切换。(正确表述)

  (2012年联考真题)进程处于临界区不能进行处理机调度。(错误!)

  临界资源:一个时间段内只允许一个进程使用的资源。各个进程需要互斥地访问临界资源。(你访问临界资源的时候我不能访问,我访问临界资源的时候你不能访问,这就是互斥的意思)

  临界区:访问临界资源的那段代码。(因此,各个进程肯定也要互斥地进入临界区。因为“进入临界区” = 运行访问临界资源的代码 = 访问临界资源)

  内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)。

  当一个进程正处于内核程序临界区,而这个临界区是访问就绪队列的话。那么,在访问之前,它会把这个就绪队列上锁。

image-20230309144329030

  而如果说这个进程当前还没有退出内核程序临界区的话,也就意味着,这个临界资源并没有被解锁。那么,在没有解锁的情况下,如果我们要发生进程调度的话,那么进程调度是肯定要访问就绪队列这一临界资源的。而由于就绪队列这一临界资源此时还处于上锁的状态,所以,如果在这种情况下去进行进程调度的话,那么此时肯定是没办法顺利进行进程调度的。

  所以,可以看到,对于内核程序临界区访问的这些临界资源,也就是这些内核数据结构而言。如果这些内核数据结构、这些临界资源被上锁了,并且没有被尽快释放的话,那么就有可能影响到操作系统内核其他的管理工作。

  所以,我们在访问内核程序临界区的期间内,我们不能进行进程的调度和切换。我们必须让进程尽快执行完那些内核程序临界区的代码,之后尽快地把对临界资源上的锁给解除,只有这样其他的操作系统内核才能有序进行管理工作。

  而另外一种情况。

  假如这个进程访问的是一种普通的临界资源,比如是一个打印机。那么,它在访问打印机的时候,会先对打印机上锁。

image-20230309191852777

  打印机在打印完成之前,这个进程一直是在临界区内的,一直保持着对打印机的访问,由于这个进程没有退出临界区,所以打印机一直是上锁的状态。但是,又由于打印机是一种慢速的设备,如果这个情况下,不允许进程调度、切换的话,那么就需要这个进程一直空等着这个打印机的打印结束。同时在这个进程空等的时候,它还霸占着CPU,所以CPU一直是在空闲的状态,什么有用的也没有做。

  所以,如果进程在访问普通的临界资源,在普通的临界区当中的话,这个情况下其实是应该进行进程调度的。因为普通的临界区访问的这些普通的临界资源,并不会直接地影响到操作系统内核的管理工作。所以,为了增加操作系统的并发度、增加CPU的利用率,那么在访问这些普通的临界区的时候,是可以进行进程调度和切换的。

  至此,对于开头的两个表达,为什么一个对一个错,已经可以理解了。


  接下来看下一个问题。

  在有的操作系统里,它只允许进程主动地放弃处理机,而不允许这个进程在运行过程中被迫地被剥夺处理机资源。

  但是还有的操作系统,是允许当有更紧急的任务需要处理时,能强行地剥夺当前运行进程的处理机资源的。

  所以由“当前进程是否可以被强行剥夺处理机资源”这个问题,我们引出了下一个知识点——进程调度的方式。

(二)进程调度的方式

  分为非剥夺调度方式(非抢占式)和剥夺调度方式(抢占式)。

  非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。

  实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。

  剥夺调度方式,又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的过程,将处理机分配给更重要紧迫的那个进程。

  可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统。

(三)进程的切换与过程

  “狭义的进程调度”与“进程切换”的区别:

  狭义的进程调度指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换

  进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。

  广义的进程调度包含了选择一个进程和进程切换两个步骤。

  进程切换的过程主要完成了:

  1、对原来运行进程各种数据的保存

  2、对新的进程各种数据的恢复

(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块)

  因此,我们可知,进程的切换是有代价的,是需要付出一定的时间代价的。所以不能简单的认为,进程切换越频繁、进程的并发度就越高。如果过于频繁地进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间花在了进程切换上,而真正用于执行进程的时间减少。

小结

image-20230309194525297

http://www.lryc.cn/news/35626.html

相关文章:

  • 第24篇:Java包装类知识深度分析
  • 常见问题整理1
  • 体验Linux 块设备驱动实验(模拟块)
  • 一文搞懂Linux时区设置、自定义时区文件
  • Java实例实验项目大全源码企业通讯打印系统计划酒店图书学生管理进销存商城门户网站五子棋
  • 基于nvidia xavier智能车辆自动驾驶域控制器设计与实现-百度Apollo架构(二)
  • 考研408 王道计算机考研 (初试/复试) 网课笔记总结
  • [Java·算法·中等]LeetCode34. 在排序数组中查找元素的第一个和最后一个位置
  • SAP BTEs的简介及实现
  • 如何利用海外主机服务提高网站速度?
  • 【SpringMVC】 一文掌握 》》》 @RequestMapping注解
  • 高三应该怎么复习
  • 如何通过C++ 将数据写入 Excel 工作表
  • Kalman Filter in SLAM (6) ——Error-state Kalman Filter (EsKF, 误差状态卡尔曼滤波)
  • centos7部署KVM虚拟化
  • 【华为机试真题详解 Python实现】最小施肥机能效【2023 Q1 | 100分】
  • SpringBoot - 什么是跨域?如何解决跨域?
  • Astra pro相机使用说明
  • 扬帆优配|数字经济刮起“东风”,龙头晋级7连板
  • Day911.DTO和DO为什么要互转 -SpringBoot与K8s云原生微服务实践
  • 查找、排序、二叉树的算法,统统记录于此。
  • 如何用Python实现在网页中嵌入YouTube的视频?
  • Easy Deep Learning——PyTorch中的自动微分
  • 【生物信息】利用ChatGPT解释GO分析中的关于Biological Processes的问题
  • 2018年MathorCup数学建模C题陆基导弹打击航母的数学建模与算法设计解题全过程文档及程序
  • 打怪升级之CFile类
  • [css]通过网站实例学习以最简单的方式构造三元素布局
  • 【冲刺蓝桥杯的最后30天】day6
  • ssm框架之spring:浅聊IOC
  • pytest初识