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

news/2024/5/2 5:42:15/文章来源:https://blog.csdn.net/weixin_38111957/article/details/130345600

什么是进程控制?

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

1、将 PCB 2 的 state 设置为 1

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

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

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

原语如何保证原子性?

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

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

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

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

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

在这里插入图片描述

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

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

创建原语

在这里插入图片描述

终止原语

在这里插入图片描述

阻塞和唤醒

在这里插入图片描述

切换原语

在这里插入图片描述

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

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

在这里插入图片描述

本章总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103005.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手推FlinkML2.2(一)

Java 快速入门 # 本文档提供了一个关于如何使用Flink ML的快速入门。阅读本文档的用户将被指导提交一个简单的Flink作业,用于训练机器学习模型并提供预测服务。 求助,我卡住了!# 如果你遇到困难,请查看社区支持资源。特别是&…

Java线程间通信方式

前文了解了线程的创建方式和状态切换,在实际开发时,一个进程中往往有很多个线程,大多数线程之间往往不是绝对独立的,比如说我们需要将A和B 两个线程的执行结果收集在一起然后显示在界面上,又或者比较典型的消费者-生产…

【论文写作】如何写引言?应该思考什么问题?总体架构!!!

结构 大多数的科技论文都聚焦于简单地说明,做了什么,发现了什么?虽然这个可以帮助你写出一篇研究型论文当中的核心的东西(方法论和结果),但是不能完全把引言的部分完成。在这篇文章当中,将展示…

4 redis高可用

所谓的高可用,也叫HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果在实际生产中,如果redis只部署一个节点,…

从FMCW毫米波雷达系统的性能参数理解4D成像毫米波雷达的设计思路

本文编辑:调皮哥的小助理 站在设计雷达的角度看,其实无论是传统的3D毫米波雷达,还是如今的4D毫米波成像雷达,其雷达系统性能参数都遵循一个原则,即: d res ⋅ v res ⋅ θ res d max ⁡ ⋅ v max ⁡ ⋅ …

ESP8266通过MQTT协议连接onenet云平台

中国移动onenet平台 文章目录 中国移动onenet平台前言一、onenet平台二、ESP82661.完整代码2.联网代码3.连云代码4.数据处理 总结 前言 最近在弄onenet平台,用arduino结合esp8266,就是不知道怎么回事,一直连不上wifi,然后就用esp…

Linux下使用Mysql 第一天

目录 安装mysql 更改账户名和密码 启动/关闭mysql mysql的基本操作 数据库CURD 创建数据库 查看数据库 修改数据库 删除数据库 表的CURD 创建表 查看表 修改表 删除表 表数据的CURD create数据 Retrieve数据 update数据 delete数据 DML和DDL的区别&#xf…

高分辨率光学遥感图像水体分类综述2022.03

本文是Water body classification from high-resolution optical remote sensing imagery: Achievements and perspectives的学习笔记。 相关资源被作者整理到:这里 文章目录 Introduction基本知识 挑战和机遇挑战1. 有限的光谱信息和小场景覆盖2. 形状、大小和分布…

【JAVA-模块五 数组】

JAVA-模块五 数组 一、数组(一维)1.1数组是什么?1.2java中数组静态初始化:(存)两种定义格式:数组初始化格式:静态初始化后,打印数组名: 1.3 数组元素访问&…

javaweb学生在线考试系统dzkf10程序

打分)、系统管理(数据备份)等功能操作。 以学生的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用个人资料管理、试卷查看、在线考试、在线答疑、个人考试成绩查询等功能…

Oracle的学习心得和知识总结(二十三)|Oracle数据库Real Application Testing之Database Replay相关视图

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

LVS负载均衡-DR

1.DR模式中每台主机都有一个VIP地址 虚拟网址放在lo网卡上(回环网卡) arp_ignore1 Arp_announce2 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 2.内核参数修改 3.vim /etc/rc.conf 开机自启动 Chmod x /etc/rc.d…

【翻译一下官方文档】之uniapp的导航条设置

目录 uni.setNavigationBarTitle(OBJECT) uni.setNavigationBarColor(OBJECT) uni.hideHomeButton(OBJECT) uni.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题。 OBJECT参数说明 参数类型必填说明titleString是页面标题successFunction否接口调用成功的回调函数fai…

卷积神经网络总结

1、卷积核 进行互相关运算。 卷积核的大小一般是奇数。 卷积核的本质类似于提取局部特征(过滤器),当层层卷积核叠加后,卷积核的感受野变大,卷积核的作用逐渐向提取全局抽象特征靠近。最后一层的神经元应该对整个输入…

SpringBoot中@EnableAsync和@Async注解的使用

目录 1.EnableAsync 注解1.1 配置类使用示例1.2 复制请求上下文 2.用法1:Async 注解2.1 测试Controller2.2 测试Service2.3 测试ServiceImpl2.4.测试 4.用法2:直接使用 taskExecutor 做异步4.1 重新实现:测试ServiceImpl4.2 测试 5.Async异步…

ArcGIS三体阴影(影像三维)显示马赛克?

我们经常基于ArcGIS通过DEM来做山体阴影 但是有时候你一放大就会出现很强的马赛克的效果 还有我们在利用ArcScene建三维场景 即使数据分辨率很高也会出现马赛克效果 那怎么来解决这个问题呢 让我们的山体阴影显示更加细腻 三维没有马赛克的效果呢? 右键图层选择如…

地铁站人流检测硬件部分

目录 一、概述 二、驱动程序 2.1debug串口 2.2体重传感器HX711 2.3滴答定时器 2.4ESP8266 2.5人体检测 2.6 IIC的GPIO 2.7 OLED的IIC 2.8 LED 三、应用 四、中断 一、概述 使用STM32C8T6作为主控 A9 ---> tx(调试串口) A10 ---> …

android framework-ActivityManagerService(AMS)下

一、ActivityThread \frameworks\base\core\java\android\app\ActivityThread.java 1.1、main public static void main(String[] args) {Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");// Install selective syscall interceptionAnd…

Hudi数据湖技术之核心概念

目录 1 基本概念1.1 时间轴Timeline1.2 文件管理1.3 索引Index 2 存储类型2.1 计算模型2.1.1 批式模型(Batch)2.1.2 流式模型(Stream)2.1.3 增量模型(Incremental) 2.2 查询类型(Query Type&…

4.3调整基类成员在派生类中的访问属性的方法

同名成员 在定义派生类的时候,C语言允许派生类与基类中的函数名相同。如果在派生类中定义了与基类中相同的成员,则称派生类成员覆盖了基类的同名成员,在派生类中使用这个名字意味着访问在派生类中重新说明的成员。为了在派生类中使用基类的同…