进程控制的学习

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

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

相关推荐
moxiaoran57531 小时前
uni-app学习笔记三十--request网络请求传参
笔记·学习·uni-app
嘉陵妹妹2 小时前
深度优先算法学习
学习·算法·深度优先
乖乖是干饭王2 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
待什么青丝3 小时前
【TMS570LC4357】之相关驱动开发学习记录2
c语言·arm开发·驱动开发·单片机·学习
行云流水剑4 小时前
【学习记录】如何使用 Python 提取 PDF 文件中的内容
python·学习·pdf
虾球xz5 小时前
CppCon 2015 学习:CLANG/C2 for Windows
开发语言·c++·windows·学习
蓝婷儿5 小时前
6个月Python学习计划 Day 17 - 继承、多态与魔术方法
开发语言·python·学习
持续前进的奋斗鸭6 小时前
Postman测试学习(1)
学习·postman
hello kitty w6 小时前
Python学习(7) ----- Python起源
linux·python·学习
一叶知秋秋6 小时前
python学习day39
人工智能·深度学习·学习