【系统架构设计师】第一章:操作系统(1.2.1)进程的三态模型与五态模型

本篇帖子继续上篇。有兴趣可以点击链接进行查看以前写过的文章。【系统架构设计师】第一章:操作系统(1.1.1—1.1.2)参考教材:《系统架构设计师考试全程指导(第二版)》《系统架构设计师教程》1.2处理器管理在单用户多任务的操作系统中,或者多用户多任务的操作系统中,系统同时运行多个程序,这些程序的并行运行势必形成对系统资源的竞争使用。因此,操作系统必须能够处理和管理这种并行运行的程序,使之对资源的使用按照良性的顺序进行。1.2.1进程的状态首先我们要搞清楚三个东西的区别:程序,进程,.

大家好,又见面了,我是你们的朋友全栈君。

本篇帖子继续上篇。有兴趣可以点击链接进行查看以前写过的文章。
【系统架构设计师】第一章:操作系统(1.1.1—1.1.2)
参考教材:
《系统架构设计师考试全程指导(第二版)》
《系统架构设计师教程》

1.2 处理器管理

在单用户多任务的操作系统中,或者多用户多任务的操作系统中,系统同时运行多个程序,这些程序的并行运行势必形成对系统资源的竞争使用。因此,操作系统必须能够处理和管理这种并行运行的程序,使之对资源的使用按照良性的顺序进行。

1.2.1 进程的状态

1.定义及分类

首先我们要搞清楚三个东西的区别:程序,进程,线程。

先想想看,什么是程序?
我们常说的编程,这个“程”字指的就是我们的程序。很明显,你写的是代码,而不是手写的运行起来以后的那个程序。那个是经过编译你的代码而得到的东西。
因此,我们可以得出结论:程序就是我们的代码,是一个静态的概念。

其次就是进程。
当我们编译好程序以后,运行的那个软件就是我们的进程。这个也很好理解,对吧?
当然,进程也不仅仅有这些,同时还有比如告诉系统,应该分配多少内存之类的信息。
因此,我们的结论是:

  • 从动态的角度看,进程就计算机状态的一个有序集合。
  • 从静态的角度看,进程由程序,数据,进程控制块(PCB)组成。

最后要说的是线程。
这个东西是书上没有的,不过我突然想到了,就临时补充了上来。所谓线程,其实就是一个相对的概念。
比如我们在写一个下载的程序的时候,我们就需要用到线程,并且将下载放到后台来进行。不然的话,我们的程序就会一直在下载中,导致用户在使用的时候,一旦使用下载功能,就会卡死在主界面。
这个系统用来执行我们下载而分配的到后台去运行的资源,就是我们的线程。所以,我们可以这样说:
线程也是一个被用来处理任务的资源,但是由于是我们进程所创建的,因此就叫做线程。
我们甚至可以将我们的主程序理解成一个我们电脑所产生的线程。

行了,关于进程的介绍就先说这么多吧。剩下其实还有更深的概念,比如守护线程之类的东西就先不提了。

2.进程的状态模型与转换

1.三态模型
我们知道了进程的概念以后,接下来需要知道的是进程的每种状态该如何去描述。
拿c语言来举例吧。
比如,我们写好一个程序,这个程序会读取我们输入的数字加一然后显示出来。我们可以很明显的看到两个过程:

  • 程序自动运行的过程,比如读取我们输入的数字然后加一并且显示出来。这些是没有经过我们人工干预的过程。
  • 程序暂停,等待我们输入所需要的数字的过程。

1和2其实就分别对应了我们进程中的两个过程:运行等待
另外还有一个我们看不到的过程,就是 就绪 这个过程。
这个也很好理解吧?有时候你后台跑个lol+赛博朋克,系统的资源不够用了,想跑你自己写的这个程序,就得等有空闲的资源的时候才会去跑。
然后这时候你把这两个游戏关了,那么你的程序就有资源了。此可,你的程序就叫做就绪态。

我们可以很容易的写出三种形态的转换。
在这里插入图片描述
2.五态模型

我们其实还需要考虑一些极端的情况:如果我们同时开了1000个lol和1000个赛博朋克,那么此可你写的程序处于什么状态?等待态还是就绪态?

很显然,都不是。因为如此大的系统开销,电脑为了防止cpu被耗尽,就必须将一些程序挂起,等到有资源的时候在去唤醒。

此刻你的程序正处于磁盘的镜像中,因此就不参与进程的调度了。你可以认为你的程序从“活”变成了“死”。
这里给出了进程挂起的原因,和书上写的不太一样,不过大体相似,但是建议还是去看一下书。
在这里插入图片描述
为了方便区分“活”的等待态以及就绪态,和“死”的状态,我们先将三态模型中的等待态和就绪态的名字改为活跃阻塞态活跃就绪态
此可,我们的三态模型变成了:
活跃阻塞态,活跃就绪态,运行态

那我们想想当进程被挂起以后会有怎样的状态呢?

我们就要看被挂起的时候是什么状态。比如我们在活跃阻塞态的时候将进程挂起,那么被挂起的进程就叫做静止阻塞态
如果在被挂起的时候是活跃就绪态,那么被挂起的进程就叫做静止就绪态

于是,现在就有了我们新的五态模型:
活跃就绪态,活跃等待态,运行态,静止阻塞态,静止就绪态

我们依旧可以将五种状态的变化列出来。懒得写了,直接看别人写好的吧。
在这里插入图片描述https://www.orzzone.com/process-state-transition.html

这一小节写了进程的简介以及三态模型和五态模型。下一节会讲信号量与pv操作。
下一节已更新。
【系统架构设计师】第一章:操作系统(1.2.2) 信号量与pv操作(一)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129026.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 字符数组反转_字符数组的初始化

    字符数组反转_字符数组的初始化关于字符串的反转,倒是很简单,但是编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。示例1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h…

  • redis有效时间设置及时间过期处理_查看redis状态

    redis有效时间设置及时间过期处理_查看redis状态redis是在内存中进行缓存的,我们在设置redis缓存时,可以设置下过期时间。那么在设置时间到期后redis是如何进行数据删除的。redis清理过期数据。定期清理+惰性清理定期删除:redis数据库默认每隔100ms就会进行随机抽取一些设置过期时间的key进行检测,过期则删除。惰性删除:定期删除还没有来得及删除,就被程序请求到的一个过期key,redis会先检测key是否,过期,如果过期则删…

  • RedHat Linux 挂载U盘

    RedHat Linux 挂载U盘先确定u盘的位置把u盘插到电脑的usb接口上fdisk-l观察命令运行的结果,看有没有与u盘容量相符的东西如果有,再寻找与/dev/sd*(*代表a,b,c…..)相类似的东西,如果是找到/dev/sdb创建挂载位置mkdir/mnt/usb一般挂载在/mnt文件夹之下mnt文件夹主要存放光盘,软盘等移动存储介质挂载mount-tvfat/dev/sdb1/mnt/usb参数-t

  • 基于Rust-vmm实现Kubernetes运行时[通俗易懂]

    基于Rust-vmm实现Kubernetes运行时[通俗易懂]随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸、水平攻击、DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行。安全容器技术孕育而生,产生了kata、gVisor、unikernel等多种安全容器方案。本文旨在介绍各种安全容器方案,分析各方案特点,结合腾讯在容器安全领域的实践,帮助读者选择适合自身特性的容器运行时。同时引入Rust-VMM项目,介绍Rust-VMM技术和生态,演示如何使用K8s调度和启用Rust-VMM安全容器运行时,展望以Rust语

  • jvm内存参数图解,Xmn,Xms,Xmx,XX

    Java中堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象和数组,如下图所示:在Java中,堆被划分成两个不同的区域:年轻代、老年代。年轻代(Young)又被划分为三个区域:Eden、S0、S1。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存的分派以及回收。 堆是GC收集垃圾的主要区域。GC分为两种:MinorGC、FullGC。1.年轻代…

  • 使用gradle打包jar包

    使用gradle打包jar包

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号