进程控制的学习

进程控制(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。
  • ​结果​:操作系统像魔术师一样,让多个进程"同时运行"(实际是快速切换)。

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

相关推荐
贺函不是涵30 分钟前
【沉浸式求职学习day43】【Java面试题精选3】
java·开发语言·学习
maray31 分钟前
ETL 学习
数据仓库·学习·etl
海尔辛1 小时前
学习黑客Active Directory入门
学习·ad·window
superior tigre1 小时前
C++学习:六个月从基础到就业——C++20:协程(Coroutines)
c++·学习·c++20
冷崖1 小时前
网络编程-select(二)
网络·学习
superior tigre1 小时前
C++学习:六个月从基础到就业——C++20:概念(Concepts)
c++·学习·c++20
xiaohanbao091 小时前
day29 python深入探索类装饰器
开发语言·python·学习·机器学习·pandas
jackson凌2 小时前
【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
java·笔记·学习
冰茶_2 小时前
掌握LINQ:查询语法与方法语法全解析
sql·学习·microsoft·微软·c#·linq
海尔辛3 小时前
学习黑客Active Directory 入门指南(一)
windows·学习·ad