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

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

进程的五种状态

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

创建态、就绪态

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

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

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

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

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

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

进程状态之间的切换

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

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

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

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

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

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

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

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

在这里插入图片描述

状态如何被组织

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

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

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

在这里插入图片描述

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

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

本章总结

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

在这里插入图片描述


http://www.kler.cn/a/14347.html

相关文章:

  • 【iOS】—— 响应者链和事件传递链
  • 我实现了一个乞丐版的评论功能
  • C语言函数大全-- q 开头的函数
  • 搞懂位图和布隆过滤器
  • 【社区图书馆】 Go佬—Go程序开发实战宝典书评
  • Django项目之经济预测平台,应用LSTM、GBDT等算法
  • 管理系统的实现_01
  • Progress ThemeBuilder crack
  • 对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda
  • 总结829
  • Android Jetpack - Navigation 组件:进行应用程序导航
  • HDCTF KEEP ON
  • 春秋云境:CVE-2022-25099(文件上传造成RCE)
  • 使用bert4keras出现的问题(Process finished with exit code -1073741819 (0xC0000005))
  • 压力测试工具Jmeter入门
  • Java 实现访问Redis哨兵(六)
  • 学顶教育:注安工程师不同级别考试形式也不同?
  • Python小姿势 - Python操作MongoDB数据库
  • 《CTFshow-Web入门》06. Web 51~60
  • 华为OD机试-高性能AI处理器-2022Q4 A卷-Py/Java/JS