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

操作系统原理 —— 进程有哪几种状态?状态之间如何切换?(七)

进程的五种状态

首先我们一起来看一下进程在哪些情况下,会有不同的状态表示。

创建态、就绪态

当我们刚开始运行程序的时候,操作系统把可执行文件加载到内存的时候,进程正在被创建的时候,它的状态是创建态,在这个阶段操作系统会为进程分配资源、初始化 PCB。

当进程创建完成之后,便进入 就绪态,处于就绪的进程已经具备运行条件,但是由于 CPU 不空闲,就暂时不能运行。
在这里插入图片描述

那么过了一会,CPU 它有空了,开始执行 就绪态 的进程,如果一个进程此时在 CPU 上运行,那么这个进程处于 运行态,CPU 会执行该进程对应的程序。

然后在 CPU 执行过程中,这个进程它需要调用打印机的系统资源,但是打印机它现在也很忙,没空处理。 CPU 就会把该进程变为 阻塞态

当打印机忙完了,可以把资源分配给该进程的时候,进程又会从阻塞态 转变成 就绪态 等待 CPU 的再一次执行。

当我们整个进程执行完成之后,一个进程可以执行 exit 系统调用,请求操作系统终止该进程,此时该进程会进入 终止态,操作系统会让该进程下 CPU,并且回收内存空间资源,最后还要回收该进程的 PCB,当终止进程的工作完成之后,这个进程就彻底消失了。

进程状态之间的切换

现在我们已知进程有五种状态:创建态、就绪态、运行态、阻塞态、终止态,我们再一起来总结一下这几种状态转变的过程。

首先当程序执行,进程在被创建的时候是创建态,当创建工作完成之后,就会进入就绪态,等待 CPU 执行.

当 CPU 开始执行该进程,就会进入运行态,在运行过程中,进程调用 系统调用的方式申请某种系统资源时,或者请求等待某个事件发生,此时就会进入 阻塞态,这里强调一下,从 运行态 -> 阻塞态,是由进程自身做出的主动行为。

当进程申请的资源或等待的事情发了,这个时候又从阻塞态 -> 就绪态,在这里不是进程本身能控制的,是一种被动行为。

当程序运行结束,或者运行过程中遇到不可修复的错误,就会从 运行态 -> 终止态

还有一种情况就是当进程的时间片执行时间到了,或者 CPU 被抢占了,这个时候进程状态会从:运行态 -> 就绪态

这里需要注意:不能由阻塞态 直接变为 运行态,也不能直接由 就绪态变为阻塞态,因为阻塞态是由进程主动请求的,必然需要进程在运行时主动发出这个请求。
在这里插入图片描述

我们最后再来一起总结看下:

在这里插入图片描述

状态如何被组织

操作系统为了方便管理各个不同状态下的进程,会将同一种状态下的各个进程的 PCB 组织起来。

那怎么组织呢? 组织一共有两种方式:链接方式、索引方式。

链接方式就有点像链表的数据结构一样进行存储,如下图:

在这里插入图片描述

索引的方式也很好理解,就是维护各个不同状态下进程的索引表就行,如下图:
在这里插入图片描述

这两种方式大家理解,有个印象就行。
在这里插入图片描述

本章总结

主要是掌握进程的状态,以及状态之间的切换。

在这里插入图片描述

http://www.lryc.cn/news/62163.html

相关文章:

  • 可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K
  • 5款十分小众的软件,知道的人不多但却很好用
  • Linux驱动开发:uboot启动流程详解
  • 分治与减治算法实验: 排序中减治法的程序设计
  • leetcode两数、三数、四数之和
  • 使用Docker部署wikitten个人知识库
  • 【MYSQL】Java的JDBC编程(idea连接数据库)
  • 机器学习——主成分分析法(PCA)概念公式及应用python实现
  • 手写axios源码系列二:创建axios函数对象
  • HTB-Time
  • 零基础C/C++开发到底要学什么?
  • OpenStack中的CPU与内存超分详解
  • main.m文件解析--@autoreleasepool和UIApplicationMain
  • C语言复习之顺序表(十五)
  • 学系统集成项目管理工程师(中项)系列10_立项管理
  • 电视盒子哪个好?数码小编盘点2023电视盒子排行榜
  • flink动态表的概念详解
  • ArcGIS Pro用户界面
  • HDCTF 2023 Pwn WriteUp
  • 【 Spring 事务 】
  • 【刷题之路】LeetCode 203. 移除链表元素
  • 关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记
  • 活动文章测试(勿删)
  • Windows下 批量重命名文件【bat实现】
  • 从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的
  • 自学python有推荐的么
  • 设计模式 --- 行为型模式
  • 防御式编程
  • 导出pdf Puppeteer 和 wkhtmltopdf区别
  • sequelize + Nodejs + MySQL 的简单用法