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

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

image-20230121215554355

1、进程调度的时机

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

image-20230121220734318


image-20230121221322773

进程在操作系统内核程序临界区\color{red}操作系统内核程序临界区操作系统内核程序临界区不能\color{red}不能不能进行调度与切换 √

(2012 年联考真题)进程处于临界区\color{red}临界区临界区不能\color{red}不能不能进行处理机调度 ❌

临界资源:一个时间段内只允许一个进程使用的资源。

  • 各进程需要互斥地\color{red}互斥地互斥地访问临界资源。

临界区:访问临界资源的那段代码。

内核程序临界区\color{red}内核程序临界区内核程序临界区一般是用来访问某种内核数据结构\color{red}某种内核数据结构某种内核数据结构的,

  • 比如进程的就绪队列(由各就绪进程的 PCB 组成)

image-20230121222330829

若还没有退出内核程序临界区(还没解锁)就进行进程调度(访问就绪队列),

  • 但是进程调度的相关程序也需要访问就绪队列,

    但此时就绪队列被锁住了,因此又无法顺利进行进程调度


若此时进程访问的是普通的临界资源,例如:打印机

image-20230128173651595

在打印机打印完成之前,进程一直处于临界区内,临界资源不会解锁。

  • 但打印机又是慢速设备,此时如果一直不允许进程调度的话就会导致 CPU 一直空闲

普通I临界区访问的临界资源不会直接影响操作系统内核的管理工作。

  • 因此在访问普通临界区时可以进行调度与切换。

2、进程调度的方式

有的系统中,只允许进程主动放弃处理机

有的系统中,进程可以主动放弃处理机,

  • 当有更紧急的任务需要处理时,也会强行剥夺处理机(被动放弃)

2.1、非剥夺方式(非抢占方式)

非剥夺调度方式\color{red}非剥夺调度方式非剥夺调度方式,又称非抢占方式\color{red}非抢占方式非抢占方式

  • 即,只允许进程主动放弃处理机。

在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,

  • 直到该进程终止或主动要求进入阻塞态。

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


2.2、剥夺调度方式(抢占方式)

剥夺调度方式\color{red}剥夺调度方式剥夺调度方式,又称抢占方式\color{red}抢占方式抢占方式

  • 当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。

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

  • 适合于分时操作系统、实时操作系统

3、进程的切换与过程

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

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

狭义的进程调度\color{red}狭义的进程调度狭义的进程调度指的是从就绪队列中选中一个要运行的进程\color{red}选中一个要运行的进程选中一个要运行的进程

  • 这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换

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

广义的进程调度\color{red}广义的进程调度广义的进程调度包含了选择一个进程和进程切换两个步骤


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

  1. 对原来运行进程各种数据的保存(信息一般保存在 PCB 中)

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

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

注意进程切换是有代价的\color{red}进程切换是有代价的进程切换是有代价的

  • 因此如果过于频繁的进行进程调度切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。

4、整体框架

image-20230128180821686

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

相关文章:

  • 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发
  • ESP32S3系列--SPI从机驱动详解(一)
  • 【实战篇】移动端H5网页在ios滑动不流畅和禁止缩放问题
  • 12 循环神经网络(基础篇) Basic RNN
  • 【C语言必经之路——第11节】初阶指针(2)
  • SpringBoot学习(1)第一个SpringBoot程序
  • 什么是热迁移?90%的企业都理解错误
  • Scratch少儿编程案例-丝滑版贪吃蛇
  • Linux系统之网卡子接口配置方法
  • 2023上半年软考中级系统集成项目管理工程师2月25日开班
  • YOLO-V5轻松上手
  • CSS的优先级理解
  • 前端工程师leetcode算法面试必备-二分搜索算法(中)
  • 【数据库】MySQL 单表查询,多表查询
  • 【c++】vector实现(源码剖析+手画图解)
  • VScode查看python f.write()的文件乱码
  • excel应用技巧:如何用函数制作简易抽奖动图
  • CSI Tool 安装及配置记录
  • 华为OD机试 - 最低位排序(Python)| 真题+思路+代码
  • C#开发的OpenRA使用TrimExcess方法
  • ImageMagick任意文件读取漏洞(CVE-2022-44268)
  • 第十九篇 ResNet——论文翻译
  • RiProRiProV2主题美化顶部增加一行导航header导航通知
  • RT-Thread MSH_CMD_EXPORT分析
  • 电脑麦克风没声音怎么办?这3招就可以解决!
  • 【C++】运算符重载
  • 什么是眼图?(扫盲向)
  • 【C++】类与对象(二)
  • 【软考】系统集成项目管理工程师(二十一)项目收尾管理
  • 关于公钥与私钥的一点看法