当前位置: 首页 > news >正文

操作系统学习 进程(1)进程的概念与状态

目标问题

“一个程序是如何变成一个能运行的进程的?”

学习重点:

  • 程序 → 进程(加载、分配资源、进入就绪队列)
  • 进程的 状态转换图(创建 → 就绪 → 运行 → 阻塞 → 终止)
  • PCB(Process Control Block,进程控制块)是什么、为什么重要

📘 建议练习:
画出进程状态转换图,用一句话解释每个箭头代表的操作(例如:等待I/O → 阻塞)。


🧭 一、从“程序”到“进程”

我们先来一个最根本的问题:

程序(Program)和进程(Process)有什么区别?

对比点程序(Program)进程(Process)
本质一堆静态的代码和数据(文件)正在执行的程序实例
存放位置硬盘上内存中
是否在运行不运行,只是资源正在运行,有生命期
是否独立资源没有系统分配的资源拥有独立资源(内存、文件、CPU时间等)

👉 一句话总结:

程序是“做菜的菜谱”,进程是“正在做菜的厨师”。


🧩 二、进程的组成:PCB + 程序 + 数据

操作系统为了管理成千上万个进程,需要给每个进程一个“身份证”,这就是:

📋 PCB(Process Control Block)

它记录了进程的一切关键信息:

  • 进程标识符(PID):唯一编号
  • 进程状态:就绪 / 运行 / 阻塞
  • 程序计数器(PC):记录执行到哪一条指令
  • 寄存器内容:保存CPU上下文
  • 内存管理信息:代码段、数据段、堆、栈地址
  • I/O信息:打开的文件、设备状态
  • 调度信息:优先级、时间片等

操作系统正是通过 PCB 来保存与恢复进程状态,实现进程切换。


🔄 三、进程的五种状态

我用文字画一遍状态图,说明:

         ┌──────────────┐│              ││   创建(new)  ││              │└──────┬───────┘│ 系统为进程分配资源、建立PCB▼┌──────────────┐│              ││   就绪(ready)│ ←─── 被唤醒(如I/O完成)│              │└──────┬───────┘│ 调度器选中它,获得CPU▼┌──────────────┐│              ││ 运行(running)││              │└────┬────┬────┘│    ││    │ 调用I/O、等待事件│    ▼│ ┌──────────────┐│ │              ││ │ 阻塞(blocked)││ │              ││ └──────┬───────┘│        │ I/O完成、事件就绪▼        │┌──────────────┐│              ││ 终止(terminate) ││              │└──────────────┘

每个箭头表示一种“事件”:

  • 从“运行 → 阻塞”:等待I/O
  • 从“阻塞 → 就绪”:I/O完成
  • 从“运行 → 终止”:程序执行完或被结束

状态含义转换触发
创建(new)系统为新进程分配资源、建立PCB调用 fork()、CreateProcess() 等
就绪(ready)已准备好运行,只等CPU调度时间片到 / I/O完成
运行(running)占用CPU执行指令时间片到 / 调用I/O / 被抢占
阻塞(blocked)等待I/O或事件事件发生后唤醒进入就绪
终止(terminated)程序运行完或被结束系统回收资源

🧩 四、什么是阻塞(Blocked)?

想象一个场景:

你写了个程序,要从硬盘读取一个文件。
当执行到 read(file) 时,程序必须等文件读取完成才能继续计算。

磁盘很慢(相对CPU而言),CPU每秒能执行几十亿条指令,但磁盘读取一次数据可能要几毫秒。

如果CPU在这几毫秒内干等着,那就浪费了宝贵的计算资源。
于是——

💡 操作系统干了一件聪明的事:

当程序要等某个事件(比如磁盘、网络、用户输入)时,系统让它“先睡一觉”,
把CPU让给别的程序。

这个“睡眠”的状态就是:

阻塞(Blocked),也叫 等待(Waiting)


⚙️ 阻塞的本质:进程在等待“外部事件”

所以,进程的状态变化大概是这样的:

创建 → 就绪 → 运行 → (等待I/O)→ 阻塞↑└—— I/O完成 → 就绪

用更生活的例子来理解:

场景状态
你在排队等餐(CPU没空)就绪
轮到你点餐(获得CPU)运行
你等菜上桌(等I/O)阻塞
菜来了(I/O完成)唤醒回到就绪
吃完离开终止

👉 阻塞不是错误,也不是停止运行
而是“暂时没事干,等事件发生再回来”。


🔍 五、那 I/O 是什么?

I/O 是 “Input / Output” 的缩写,
指的是输入输出设备相关的操作。比如:

类型举例特点
输入键盘输入、鼠标点击、从文件读取程序需要“等”输入完成
输出显示输出、写文件、打印也需要等待外设反应
网络向服务器发请求、等待数据返回网络延迟更明显

这些操作都不是CPU在做,而是由I/O设备控制器DMA完成。
CPU只是发出请求,然后继续干别的活,等I/O完成后再回来处理结果。

⚙️ 六、状态切换的本质:CPU分配权的转移

“运行 ↔ 就绪 ↔ 阻塞”的切换,本质上是:

CPU使用权在不同进程之间转移。

  • 当进程主动等待I/O:它让出CPU → 阻塞。
  • 当I/O完成:它被唤醒 → 就绪。
  • 当调度器选择它:它获得CPU → 运行。

这个循环,就形成了操作系统的“多任务”运行机制。


http://www.dtcms.com/a/507335.html

相关文章:

  • Genie Envisioner--智元机器人--世界模型框架--2025.8.7
  • 权威网站有哪些wordpress分类目录浏览权限
  • Vue 缓存之坑,变量赋值方式和响应式数据
  • AWS CloudFormation —— 自动化部署的“云中脚本大师”
  • 响应式网站下载长沙排名推广
  • 【软考备考】 安全协议:SSL/TLS, IPSec 详解
  • 在 HarmonyOS 中平滑切换“点状粒子”与“图片粒子”(含可运行 ArkTS 示例)
  • 海门市规划建设局网站会考网页制作视频教程全集
  • 4-ARM-PEG-Pyrene(2)/Biotin(2),多功能化聚乙二醇修饰荧光标记生物分子的设计与应用探索
  • 做三折页宣传册 网站昆明网上房地产官网
  • redis-7.4.6部署安装
  • CSS学习笔记(五):CSS媒体查询入门指南
  • Redis多线程架构深度解析-从单线程到I/O Threading
  • 掌握 iOS 26 App 性能监控,多工具组合流程与实战指南
  • Spring定时任务中数据未持久化的深度排查指南:从autoCommit到事务管理的终极解法
  • BAT 大厂 java高频面试题汇总:JVM+Spring+ 分布式 +tomcat+MyBatis
  • 宸建设计网站想注册一个做网站的公司好
  • ThingsBoard开源物联网平台实践:从环境搭建到数据可视化
  • 第二章 线性表——课后习题解练【数据结构(c语言版 第2版)】
  • 成都网站建设开发公选择好的软件开发培训班
  • 待学习--中间件
  • Avalonia vs UniApp 全面对比分析
  • 策略模式优化多重判断
  • ios云打包证书申请不需要苹果电脑也是可以的
  • UniApp USB存储设备U盘操作、读写原生插件
  • 邢台 建网站中国机械设备制造网
  • app网站开发河 又最新新闻热点事件300字
  • ZooKeeper集群:分布式系统的核心守护者
  • 网鼎杯 2020 朱雀组
  • 开发避坑指南(63):解决SQL排序子句列名歧义异常:Column ‘xxx‘ is ambiguous