操作系统原理 —— 进程状态切换具体做了哪些事情?(八)

news/2025/2/22 21:46:11/

什么是进程控制?

进程控制的主要功能是:对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

简单来说,就是进程控制就是要现实进程状态的转换。

那如何实现进程的控制呢? 答案就是使用 原语来实现,如下图:

在这里插入图片描述

在之前我们有提到过,原语 是具有原子性操作的,运行必须一气呵成,那如果没有原子性,会发生什么事情呢? 我们来看一下假设:

在这里插入图片描述

在上图中,假设需要使用源语进行状态的切换,至少需要做两件事:

1、将 PCB 2 的 state 设置为 1

2、将 PCB 2 从阻塞队列放入到就绪列表

如果不具有原子性,可能只做了第一件事之后,就被中断了,那这个时候,阻塞队列里面的数据就包含了 state = 1 的 PCB 了,这样对于进程的管理,就乱套了。

那么 原语 是如何来保证原子性的呢? 我们接着往下看

原语如何保证原子性?

原语,其实也是用了两条特权指令来保障原子性操作的。

源语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。 可以用 关中断指令、开中断指令,这两个特权指令实现原子性操作。

还记得我们之前在中断那个章节有提到,执行完每一个指令之后,CPU 都要检查当前是否有外部中断信号,如果有则需要处理中断信息。

那么如果 CPU 执行了 关中断指令 之后,就不再例行检查是否有中断信息,直到执行 开中断指令之后,才恢复检查。

这样,关中断,开中断之间的这些指令就是不可被中断的了,这就实现了 原子性

在这里插入图片描述

我们知道是使用 原语 来进行进程状态控制的,那这些原语具体都做了哪些事情呢?

以下的内容不需要死记硬背,只需要理解就好了。

创建原语

在这里插入图片描述

终止原语

在这里插入图片描述

阻塞和唤醒

在这里插入图片描述

切换原语

在这里插入图片描述

在切换原语的时候,我们需要保存运行环境,在重新执行该进程的时候,还需要恢复所需的运行环境。

那到底保存什么运行环境?

在这里插入图片描述

本章总结

在这里插入图片描述


http://www.ppmy.cn/news/49847.html

相关文章

Revit中栏杆扶手、坡道的绘制及插件太多问题

一、在Revit中栏杆与扶手的绘制方法有两种: ①绘制路径 ②放置在主体上 二、执行方式 功能区:“建筑”选项卡“楼梯坡道”面板“栏杆扶手”下拉菜单“绘制路径”。 三、绘制技巧 首先我们一起来看看如何设置栏杆扶手属性。 第一步:设置属…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init,obstack_free,obstack_alloc,obstack_blank,obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

求你看完再去面试,涨薪必备分布式事务小抄,狂怼面试官~

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式…

【逆天应用】如何用Python实现检测和识别车牌号?(详细教程)

文章目录 前言一、创建Python环境二、如何在您的计算机上安装Tesseract OCR?1.导入库2.获取输入2.获取输入3.在输入端检测车牌4.筛选轮廓5.遍历前30个轮廓5.识别检测到的车牌 三,显示输出总结 前言 车牌检测与识别技术用途广泛,可以用于道路系统、无票停…

redis单机最大并发量

redis单机最大并发量 布隆过滤器多级缓存客户端缓存应用层缓存Expires和Cache-Control的区别Nginx缓存管理 服务层缓存进程内缓存进程外缓存 缓存数据一致性问题的解决引入多级缓存设计的时刻 Redis的速度非常的快,单机的Redis就可以⽀撑 每秒十几万的并发,相对于MySQL来说,性…

JavaScript 代码整洁之道

文章目录 概述篇变量篇函数篇注释篇异常处理篇复杂判断函数篇重构篇代码风格常量大写先声明后调用注释 参考资料 概述篇 书写能让人读懂的代码使用英语编写代码团队协作 制定通用的规则,依靠工具让团队的代码风格保持统一,要让代码看起来是由一个人编写…

UE4: Niagara系统实现雨天效果,并跟随人物移动

目录 创建雨丝Niagara系统雨丝跟随人物移动天空雷电效果阴天天空闪电效果 创建雨丝Niagara系统 1.创建一个Niagara系统 选择Fountain选项,点一下加号,再点完成: 命名一下打开: 先从粒子生成的方向入手,在Niagara的…

React native RN 开发实例

多入口加载方式 React Native 混合开发多入口加载方式 - 知乎 initialProperties 官方文档:React Navigation moduleName 案例:GitHub - hcn1519/ReactNative-iOS-Example React Native 混合开发多入口加载方式 - 知乎 项目结构 参考&#xff1…