进程控制的学习

进程控制(Process Control)是指操作系统对进程的创建、执行、暂停、恢复、终止等一系列状态变化进行管理和协调的过程
简单说,就是系统让各个程序能有序地运行,合理地使用CPU和资源,而不会互相冲突或者出错。

主要包括这些内容:

  • 创建进程:比如你打开一个软件,系统就会创建一个新的进程。

  • 调度进程:决定哪个进程先用CPU、用多久(比如短时间内切换很多次,给人感觉“同时在运行”)。

  • 阻塞与唤醒进程:比如一个进程在等待数据(读文件),系统就可以让它暂时停下来,等数据到了再继续。

  • 终止进程:比如你关闭一个软件,系统就把对应的进程彻底结束,释放资源。

核心目的就是:保证多任务运行时,各进程高效、安全、公平地共享系统资源

 

你可以把 ​​原语​​ 想象成一种“​​不可分割的操作​​”,就像你生活中的某些必须“一步到位”的事情一样。用三个关键词理解:


1️⃣ ​​举个栗子🌰:​

假设你要往存钱罐存钱:

  • ✅ ​​正确操作(原语):​​ 整个动作(打开盖子 → 放钱 → 盖上盖子)​​必须一次性完成​​,中间不能被打断。
  • ❌ ​​错误操作(非原语):​​ 如果你刚打开盖子,还没放钱就被妈妈叫走,存钱罐可能被弟弟抢走乱塞东西,导致结果混乱。

​原语的核心就是:要么不做,要么做完,没有中间状态!​

 

我们可以用 ​​“打游戏存档”​​ 来类比理解 ​​“保护进程运行现场”​​ 的含义:


​1️⃣ 什么是进程的运行现场?​

想象你在玩一个游戏(相当于一个进程),游戏进行到一半时,突然需要接电话(相当于操作系统要切换进程)。此时你必须记录以下信息才能之后继续游戏:

  • ​游戏进度​​(程序执行到哪一行代码)
  • ​背包里的道具​​(CPU寄存器的值)
  • ​角色位置和血量​​(内存数据、堆栈状态)
  • ​当前的游戏设置​​(进程打开的文件、权限等)

这些信息的总和就是 ​​“进程运行现场”​​,相当于游戏的 ​​“存档”​​。


​2️⃣ 为什么要保护运行现场?​

如果接电话前不存档:

  • ​回来继续游戏时​​:忘记角色位置、道具丢失,游戏无法继续(进程崩溃)。
  • ​同时玩多个游戏​​:切换游戏时进度混乱(多任务系统无法正常运行)。

​保护运行现场的核心目的​​:
让操作系统能随时暂停一个进程,去运行其他进程,之后再 ​​无缝恢复原进程的执行​​,就像什么都没发生过一样。


​3️⃣ 操作系统如何保护运行现场?​

​关键动作:上下文切换(Context Switching)​

1️⃣ ​​保存现场​​:
暂停当前进程时,操作系统会将其 ​​程序计数器(PC)、寄存器值、堆栈指针​​ 等关键数据保存到 ​​PCB(进程控制块)​​ 中。
(相当于把游戏存档到硬盘)

2️⃣ ​​加载新现场​​:
从另一个进程的PCB中读取其上次保存的状态,恢复寄存器、程序计数器等。
(相当于读取另一个游戏的存档)

3️⃣ ​​继续执行​​:
CPU根据恢复的现场数据,从上次中断的位置继续运行进程。
(接着上次的存档继续玩游戏)


​🌰 举个栗子​

  • ​场景​​:你正在用浏览器下载文件(进程A),此时需要切换到微信聊天(进程B)。
  • ​保护现场​​:
    1. 操作系统保存浏览器当前的下载进度、网络连接状态、内存数据到PCB。
    2. 从微信的PCB中恢复上次的聊天窗口、输入光标位置等。
  • ​结果​​:
    切换回浏览器时,下载会从上次中断的位置继续,用户完全感知不到切换过程。

​4️⃣ 不保护运行现场会怎样?​

  • ​数据丢失​​:进程恢复时找不到之前的执行位置,导致崩溃(比如银行转账中途被中断,钱扣了但没到账)。
  • ​多任务失效​​:系统只能运行一个进程,无法实现“边听歌边写文档”。

​📌 总结​

​保护进程运行现场 = 给进程打“即时存档”​

  • ​目的​​:实现多任务切换时“丝滑无感”。
  • ​核心操作​​:保存寄存器、程序计数器等关键状态到PCB。
  • ​结果​​:操作系统像魔术师一样,让多个进程“同时运行”(实际是快速切换)。

就像你同时追三部剧,每次切换时都能精准续播,全靠“进度保存”这个魔法! 🎮→📞→🎮

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

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

相关文章

818协议知识笔记

一、概念 Fibre CHannel-Audio Vedio standard;FC-AV FC-FS:Fibre channel framing and signaling interface; FC-PI:fibre channel physical interfaces 二、术语 VGA,SVGA,XGA,WXGA,SXGA,SXGA,WSXGA,UXGA,1440P; ICD:interface control document接口控制文档 CRC对帧头和数据…

AI大模型学习十二:‌尝鲜ubuntu 25.04 桌面版私有化sealos cloud + devbox+minio对象存储测试和漫长修改之路

一、说明 前面已经安装完成,这里我们测试对象存储 AI大模型学习十一:‌尝鲜ubuntu 25.04 桌面版私有化sealos cloud devboxminio,实战运行成功-CSDN博客https://blog.csdn.net/jiangkp/article/details/147424823?spm1011.2415.3001.5331 二…

SpringBoot的自动扫描特性-笔记

1.Spring Boot 的自动扫描特性介绍 Spring Boot 的自动扫描(Component Scanning)是其核心特性之一。通过注解SpringBootApplication 简化了 Bean 的管理,允许框架自动发现并注册带有特定注解的类为 Spring 容器中的 Bean(特定注解…

基于nodeJS代码的通过爬虫方式实现tiktok发布视频(2025年4月)

1、将真实的tiktokstudio平台的cookie填到代码里的cookie变量里,修改python代码里的ticket,ts, privateKey,以及videoPath,timing等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如node-fetch等; 3、运行时候可能系统需要科学上网…

数据一致性问题剖析与实践(四)——竞态条件竞争导致的一致性问题

一、前言 之前我们讨论了几种场景的一致性问题 冗余数据存储中的一致性问题分布式共识中的一致性问题单机事务中的一致性问题分布式事务中的一致性问题 本文将围绕竞态条件竞争中的一致性问题展开讨论分析。 二、 问题定义 竞态条件(Race Condition&#xff09…

PCL点云处理之基于FPFH特征的SAC-IA全局配准算法 (二百四十六)

提示: 有相关点云需求的可以私信 PCL 点云处理之基于 FPFH 特征的 SAC - IA 全局配准算法 一、前言二、相关概念介绍2.1 点云2.2 FPFH 特征2.3 SAC - IA 算法三、SAC - IA 全局配准算法原理3.1 FPFH 特征提取3.2 SAC - IA 配准过程四、代码实现与分析4.1 完整代码4.2 代码分析…

JavaScript性能优化实战:从瓶颈定位到极致提速

JavaScript作为现代Web应用的核心,其性能直接影响用户体验。本文将从性能瓶颈定位、高频优化场景、现代API利用三个维度,结合代码示例和Chrome DevTools实战,为你构建完整的性能优化体系。 一、性能分析:精准定位瓶颈 1.1 Chrome…

JavaScript 页面刷新:从传统到现代的全面解析

在 Web 开发中,"刷新"是一个基础但极其重要的功能。本文将全面探讨页面刷新的实现方式,从传统方法到现代最佳实践,深入解析每一种方案的原理和适用场景,并给出实用代码示例。 一、理解页面刷新的本质 在 Web 开发中&am…

NLP高频面试题(五十五)——DeepSeek系列概览与发展背景

大型模型浪潮背景 近年来,大型语言模型(Large Language Model, LLM)领域发展迅猛,从GPT-3等超大规模模型的崛起到ChatGPT的横空出世,再到GPT-4的问世,模型参数规模和训练数据量呈指数级增长。以GPT-3为例,参数高达1750亿,在570GB文本数据上训练,显示出模型规模、数据…

鸿蒙系统应用开发全栈指南

一、开发环境搭建与工具链配置 1. DevEco Studio深度解析 作为鸿蒙生态的官方IDE,DevEco Studio 4.2版本已集成ArkTS 3.0编译器与AI代码助手功能。安装过程需注意: 系统要求:Windows 10 21H2或macOS Monterey以上环境依赖:Node…

iOS18 MSSBrowse闪退

iOS18 MSSBrowse闪退 问题方案结果 问题 最近升级了电脑系统(15.4.1),并且也升级了xcode(16.3)开发工具。之后打包公司很早之前开发的项目。 上线之后发现在苹果手机系统18以上,出现了闪退问题。 涉及到的是第三方MSSBrowse,在选择图片放大的…

鸿蒙-使用Charles抓包

目录 前言鸿蒙应用中的网络请求rcp 抓包http 抓包 以下是排查过程,没啥参考价值发送文件http 抓包报错 前言 抓包,对于各位开发者应该不陌生,各种抓包工具应该的都听说过,像 charles、fiddler、Wireshark‌等。在 Android 和 iOS…

回顾|Apache Cloudberry™ (Incubating) Meetup·2025 杭州站

2025 年 4 月 19 日,由酷克数据与中启乘数联合举办的 Apache Cloudberry™ (Incubating) Meetup 杭州站在浙江省杭州市滨江区滨江会展中心成功举办。本次活动邀请了 Cloudberry PPMC 团队成员、活跃内核贡献者以及中兴 EBASE-A、阿里云 ADB-PG、网易、中启乘数等多…

Linux网络编程 深入Linux网络栈:原始套接字链路层实战解析

之前我们编程都是在应用层,只需在地址结构体中传 地址与端口号。然后协议栈在传输层,与网络层帮我们进行数据的封装。但这里我们要学的是在链路层进行编程 这里我想说一下,当数据到达链路层,有三个分支:ARP&#xff0c…

用python写一个相机选型的简易程序

最近有点忙,上来写的时间不多。 今天就把之前写的一个选型的简易程序,供大家参考。 代码: import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QGro…

【实战篇】数字化打印——打印格式设计器的功能说明

前言 myBuilder内置了覆盖丰富场景的打印格式设计器,效果统一,功能完善。 设计器一:小票 用于设计小票、水单等滚筒纸张的场景,例如:超市购物小票 主要功能 打印格式的保存、下载、上传设计时功能:撤销…

Qt 中 QSQLITE 和 QODBC 数据库连接的区别

Qt 中 QSQLITE 和 QODBC 数据库连接的区别 这两行代码都是创建 Qt 数据库连接,但使用了不同的数据库驱动和连接方式: 1. QSqlDatabase::addDatabase("QSQLITE") 特点: 使用 SQLite 数据库的 原生驱动直接与 SQLite 数据库文件(…

Eigen核心矩阵/向量类 (Matrix, Vector, Array)

1. Matrix 类&#xff08;稠密矩阵&#xff09; 模板参数 cpp Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> Scalar: 元素类型&#xff08;如 float, double, int&#xff09;。 Rows/Cols: 行数和列数&#xff08;Dynamic 表示动态大小&#xff09;。 O…

汽车免拆诊断案例 | 2016款奔驰C200L车组合仪表上多个故障灯偶尔点亮

故障现象 一辆2016款奔驰C200L车&#xff0c;搭载274 920发动机&#xff0c;累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮&#xff0c;且此时将挡位置于R挡&#xff0c;中控显示屏提示“后视摄像头不可用”&#xff…

实现 Babylon.js 鼠标输入管理单例 (MouseController) 的最佳实践

在现代 Web3D 开发中&#xff0c;高效的输入管理是创建流畅交互体验的关键。本文将详细介绍如何在 Babylon.js 中实现一个强大的鼠标输入管理单例&#xff0c;帮助你优雅地处理所有指针事件。 为什么需要鼠标输入管理单例&#xff1f; 在复杂的 3D 场景中&#xff0c;鼠标/指…