《操作系统 - 清华大学》 8 -6:进程管理:进程状态变化模型

news/2025/2/24 18:59:49

进程状态及其转换全解析

在操作系统中,进程有着特定的生命周期和多种状态变化。不考虑进程结束时,进程主要有三个基本状态。

  1. 运行态:即进程正在占用CPU执行任务。总结:运行态表示进程当前正在使用CPU。
  2. 就绪状态:进程已获取除CPU外的所有所需资源,等待CPU调度即可执行。总结:就绪态意味着进程万事俱备,只等CPU调度。
  3. 等待状态(阻塞状态):进程因等待某事件或资源而暂停执行。总结:阻塞态是进程因等待条件而暂时停止运行。

这三种状态构成基本模型,它们之间可以相互转换。运行态能变成就绪态或阻塞态;就绪态可转为运行态;阻塞态在条件满足时能变为就绪态。

若考虑进程的创建和结束过程,还会出现两个新状态。

  1. 创建状态:进程刚创建,还未进入就绪态的阶段。总结:创建态是进程诞生后的初始过渡状态。
  2. 结束状态:进程完成结束处理流程,但尚未彻底消失,此时PCB仍存在,PCB消失后进程才彻底结束。总结:结束态是进程结束前的最后状态,PCB消失才标志进程彻底终结。

将创建和结束状态纳入后,形成五状态图,能更全面展示进程状态变化关系。包括从创建到就绪、运行,运行中还可能阻塞或回到就绪态。
在这里插入图片描述

在进程运行过程中,存在一个疑问:运行中的进程为何会变成就绪态?这是因为内存中就绪进程多,而CPU数量相对少。为保证公平,系统给每个就绪进程分配时间片。当运行进程时间片用完,就会被操作系统切换回就绪态,让其他进程有机会执行。总结:时间片机制是运行态进程转就绪态的主要原因,目的是公平分配CPU资源。

下面详细梳理进程状态变化的全过程:

  1. 进程最初不存在,操作系统创建PCB并初始化,从空状态变为new状态,此时仅产生了PCB。总结:进程创建起始于PCB的创建和初始化,形成new状态。
  2. 从new状态变为ready状态,即创建态到就绪态,意味着进程控制块内数据结构初始化完成,进程资源满足,可执行。这个过程很快,因为只是完成PCB初始化。总结:创建态到就绪态是进程准备执行的关键阶段,主要完成PCB初始化。
  3. 就绪态进程会被操作系统调度器选中,分配到CPU执行,具体选中方式取决于调度算法。进程运行结束或出错会进入退出状态。总结:调度器决定就绪态进程能否进入运行态,运行结果可能导致进程退出。
  4. 运行态到就绪态的转换,如前文所述,是因为时间片用完,由操作系统根据时钟管理进行切换。总结:时间片用完促使操作系统将运行态进程切换为就绪态。
  5. 运行中的进程若等待事件或资源,会从运行态变为阻塞状态,例如等待定时器、读写文件等操作时。总结:等待特定事件或资源会使运行态进程进入阻塞态。
  6. 阻塞态进程在等待的事件发生后,会由操作系统帮助其转变为就绪态。总结:操作系统负责在事件满足时,将阻塞态进程转换为就绪态。

http://www.niftyadmin.cn/n/5864726.html

相关文章

Windows 下 Visual Studio Code 常用快捷键指南

Windows 下 Visual Studio Code 常用快捷键指南 一、基础操作 命令与文件管理 Ctrl Shift P:打开命令面板(支持所有操作,如安装插件、切换主题)Ctrl P:快速搜索并打开文件Ctrl N:新建文件Ctrl W&am…

基于 DeepSeek + Gemeni 打造 AI+前端的多人聊天室

开源项目 botgroup.chat 介绍 AI 多人聊天室: 一个基于 React 和 Cloudflare Pages(免费一键部署) 的多人 AI 聊天应用,支持多个 AI 角色同时参与对话,提供类似群聊的交互体验。体验地址:https://botgroup.chat 开源仓库&#x…

[ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug

版本号 "typescript": "^5.7.3", "unplugin": "^2.2.0",说明 在使用 unplugin 时 , 我定义插件的参数是 必填的, 使用时却是一个可空参数, 不传参也不会报错, (options?: UserOptions) > Return 😲😲&…

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention(GQA)详解 Grouped-Query Attention(GQA) 是 Multi-Query Attention(MQA) 的改进版,它通过在 多个查询头(Query Heads)之间共享 Key 和 Value&am…

常见的“锁”有哪些?

悲观锁 悲观锁认为在并发环境中,数据随时可能被其他线程修改,因此在访问数据之前会先加锁,以防止其他线程对数据进行修改。常见的悲观锁实现有: 1.互斥锁 原理:互斥锁是一种最基本的锁类型,同一时间只允…

软件工程中涉及的多种图表

软件工程中涉及多种图表(Diagram),它们用于不同阶段的需求分析、系统设计、实现和维护。以下是常见的图表类型及其之间的转化关系: 一、主要图表分类 1. 需求分析阶段 用例图(Use Case Diagram) 描述系统…

基于SpringBoot的校园消费点评管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

TCP半连接、长连接

在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是: 半连接队列(SYN 队列)全连接队列(accept 队列) 服务端收到客户端发起的 SYN 请求后,内核会把该连接存储到半连接队列,服务端收到第三次握手的 ACK 后&#x…