[操作系统居家课程讲义]ch04_进程的特征和状态

author: hxy
date: 2020.3.27

今天开始正式开始学习进程。

一、进程的特征

1. 程序和进程

上一讲我们说,为使程序可以更安全方便的并发执行,因此有了进程。那么进程是什么?进程、程序、软件分别是什么呢?

程序和软件非常相似,类比一下,比如你在网上买了一部新手机,那部手机就相当于程序,而你收到的那个包裹就是软件。 实际上我们一般不会严格区分这两者。

进程通常和程序作为一组对应的概念来类比,简单说,程序相当于一个说明书,告诉计算机应该如何执行某个特定的任务;而进程则是任务的每一次具体执行。

再举个例子,比如学校要组织上课,那么程序就是课表、教学大纲、教材和老师安排等等,而进程则是每一次上课活动的实施。

从计算机专业的角度来说,程序是平时存储在硬盘中某个文件夹下的一段代码和相关的数据,如果你不双击运行,它就没有任何作用。

进程则是在你双击运行程序时才被操作系统创建出来,直到执行完毕之后(一般就是你单击左上角的❌为止),进程就消亡了。

如果你双击打开了一个qq软件,那么操作系统就会创建一个qq的进程,如果你选择“退出qq”,那么刚刚的qq进程就不存在了。但是你的qq程序还安静的呆在你的硬盘里,位于当初你安装qq时选择的安装目录里。

进程是程序的一个运行实体(有点像面向对象里的类和对象之间的关系),因而一个程序可以创建出多个进程。

如果你打开了多个qq,那么每次双击打开时,操作系统都会为你创建一个全新的qq进程。

2. 进程的结构特性

第一小节的讨论可以看出来进程的第一个的特征 —— 它是动态创建的。那么创建进程时究竟对计算机产生了哪些操作呢?这就要看创建出来的进程长什么样子了。

我们前面讲过,当你双击一个软件运行它时,由于冯诺伊曼的设计原则,首先需要把软件运行的相关程序和数据从硬盘“复制”一份到内存中。

  • 因此,原理上来讲,每次你双击qq时,就应该把qq的程序和相关数据,从硬盘上载入一个副本到内存里。如果你打开了两个qq,那么内存中会有两套qq的程序和数据。

  • 但是内存资源也很紧张,所以后来操作系统在内存管理的实现上会对这一原理进行优化。这个后面再讲。

进程的首要组成部件就是内存中的这一个程序“副本”。

如果你双击的是一个游戏软件,那么你的游戏进程中的游戏数据(血槽、地图等等)会不断的发生变化。因此随着程序的运行,同一个程序创建的不同进程会逐渐变的不太一样,纷纷产生了各自的一些特性,而所有这些特性都存在于内存中,随时发生着变化。

这就需要记录下来每个进程在内存中的详细情形,由此就有了 进程控制块(Process Control Block, PCB)

进程控制块就像是一个信息登记表,记录着每个进程运行的相关信息。比如进程的程序位于内存的哪个位置,进程中涉及到的数据都有哪些,以及最重要的一个内容 —— 进程的状态。

二、进程的状态

当你双击打开一个文档“word.docx”,“offceword.exe”程序开始运行,系统为这一次运行创建了一个word进程 —— 把word程序代码载入内存、docx的文档数据也载入内存,然后在内存中生成一个PCB记录下相关信息。在这一过程中,word进程处于 创建 的状态。

word进程不能立即开始执行,因为cpu可能正在被其他进程占用着。所以word进程要进入到一个叫做就绪队列的队尾(实际上是把它的PCB放入队列),这个队列中的所有进程都处于 就绪 状态,都在排队等待cpu的使用权——也就是分配cpu时间片。

终于队伍排到了word进程,它拿到了cpu的使用权,获得了一个时间片的执行时间。在整个执行过程中,word进程都处于 执行 状态。等时间片到了以后,如果word进程还没有执行完毕,那么它会再次进入就绪队列,它的状态也随之转换成 就绪 态。

如果你看完文档后,单击了右上角的❌, 那么进程的PCB、内存中相关的程序和数据,都会被销毁。桌面上也没有了word窗口,进程就不再存在了。在销毁的过程中,进程就处于 终止 态。

但是还有一种可能,就是你的文档打开了,就在桌面上显示着。这时你什么也没有做,因此word进程显示完文档内容之后也没有什么事可以做。

但是你没有关闭文档,因此进程也没有终止。它就进入了一个无限循环。在等待的过程中,进程就处于 阻塞 态 —— 被堵在等待I/O (Input/Output) 中。

直到你用键盘敲下几个字,或者用鼠标操作一下word界面后,它才可以跳出循环去做些什么,带着任务进入到就绪队列中去,它的状态也随之变成 就绪

有时你打开一个文档,但是一时半会儿看不完,就把它最小化,准备打一把游戏再看。玩游戏的时候,大家都知道游戏是非常耗资源的,如果你的电脑配置不高,后台还开着qq,网易云音乐,还有几个网页没关。那么玩游戏时电脑就会非常吃力。

此时操作系统猜测你的文档一时半会儿也不用,但是你没单击❌它也不敢全部给你销毁了,于是它只在内存中保留了word进程的PCB,然后默默把你的word文档的所有数据都移到硬盘的某个角落,把那块内存释放出来给游戏用。操作系统的这一行为叫做 挂起 ,此时word进程就处于 静止 态,而在挂起之前的word是处于 阻塞 态的,因此准确说,进程是处于 静止阻塞态

当你打完游戏重新将文档最大化时,系统根据PCB中记录的信息发现,你的文档已经被挂起了,所以它赶紧照着PCB中记录的硬盘地址重新把程序和数据载入内存,系统的这一行为叫做 激活,此后word就处于 活动 态。同时又由于它等到了I/O(也就是鼠标点击最大化的操作),因此它又从 阻塞 态变为了 就绪 态,所以准确说,进程是处于 活动就绪 态。

因此引入了挂起和激活的操作以后,进程就有 创建、终止、执行、活动就绪、活动阻塞、静止就绪、静止阻塞 这七种状态。

综上所述,进程有三种基本的状态 (就绪、执行、阻塞) 、两个扩充状态 (创建、终止) 和两个细分状态 (静止、活动),对应系统的两个操作 (挂起、激活) ,一共有七大状态。我们需要掌握三种基本状态,了解两个扩充状态,理解两个细分状态和操作。

最后就可以看出,有了进程的概念,系统以进程为单位并发执行,进程在PCB的控制下保持各自的完整性,并且以PCB的名义进行数据的互通有无,从而解决了上一节最后提出的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值