211_进程的定义、组成、组织方式、特征
# 2.1_1_进程的定义、组成、组织方式、特征
各位同学大家好,在这个小节当中我们会介绍进程相关的一些基本知识,首先我们会从计算机发展史的角度聊一聊进程,他的提出是为了解决什么问题,由此引出进程的定义
之后,我们会讲解每个进程它到底有哪些部分来组成。
除此之外,我们还需要了解操作系统在组织在对各个进程进行管理的时候,各个进程之间是如何被组织起来的,由此我们会聊一聊组织方式的问题,
最后我们会讲进程、相比起程序来说的一些主要的特征。
# 进程的定义
那么首先我们来看一下进程的定义。在讲进程的定义之前,我们先看一下程序是什么?程序它指的就是一个指令序列,在早期的计算机当中,只支持单道程序,因此在操作在计算机当中,同一时间段内只能有一道程序正在运行,那么这个正在运行的程序,CPU 只为这个程序服务,内存当中也只会存放这个程序相关的信息。除此之外,各种各样的 IO 设备,所有的这些系统资源也全部都是为当前正在执行的程序来服务的。
所以可以看到在这个阶段内存当中,同一时刻其同一个时间段内,其实只会存在一个程序相关的数据,这个程序相关的运行相关的数据,包括程序段和数据段两个部分,其中程序段其实保存的就是这个程序的代码本身,也就是这个程序要执行的这一系列的指令序列,这些指令就是存放在程序段中的,而数据段存放的是程序运行过程当中所需要的一些数据,一些中间数据,比如说我们在写程序时定义的一些变量,就是存放在数据段当中的。
所以由于当由于在这个阶段计算机当中,在一个时间段内只会有一道程序只需要执行,那么这道程序相关的这些信息,这些数据其实只需要存放到内存的某一些固定的位置就可以了。比如说程序段,我们可以把它存放在内存的低地址部分,就是最上面这些部分,而数据段我们可以把它存放在内存的高地址部分,那么 CPU 在执行这些程序的指令的时候,只需要到内存的低地址部分来取得这个程序相关的这些指令,然后按照这些指令一一条往下执行就可以了。
同样的,如果要找到这个程序当中定义的一些各种各样的变量,只需要到固定的数据段分区,内存区域当中来寻找就可以了,所以这是单到程序阶段的一些特性。
那么之后人们引入了多道程序技术,在这个阶段,计算机当中,同一时刻可以有多道程序并发地在执行,那么内存当中相应的也会有这些多道程序相关的数据。由于在这个阶段内存当中要存放多个程序的数据,那么操作系统它作为这个系统的管理者,他要让这些程序实现并发的执行,那么它需要找到各个程序的程序代码所存放的位置,也就是各个程序的程序段,它们分别是什么位置,这些数据应该记录在什么地方?
除此之外,在这个阶段系统当中的各种 IO 设备,还有其他的一些资源,它有可能是被分配给不同的这些正在运行的程序的。那么每一个正在运行的程序,它当前被分配了哪些系统资源,这些信息也是需要记录下来的,这样才可以方便操作系统管理。因此引入了进程和进程实体的概念。
操作系统在每一个程序开始执行之前,都会为即将执行的程序创建一个叫做 PCB 的数据结构。PCB 也就是进程控制块,这个 PCB 会存放操作系统,用于管理这些正在运行的这些程序所需要的各种各样的信息,比如说刚才我们提到的这个程序代码存放的位置,这些信息放在 PCB 当中的,那么由这个 PCB 还有程序段和数据段三个部分就构成了所谓的进程实体。进程实体还有一个名字也可以称称作为进程印象
一般来说我们可以把进程实体简称为进程,所以像我们平时所说的创建一个进程,实质上就是创建进程实体当中的 PCB,而撤销一个进程实际上就是撤销进程实体当中的 PCB。我们需要注意的是,PCB 它是进程存在的唯一标志。
那么从不同的角度进程可以有各种各样的定义,比较传统典型的定义有以下这样的三种,这三种定义在王道书上也有总结给出。那么可以看到所有的这些定义其实都在强调一件事情,就是说进程它其实是一个动态的过程,这些定义都在强调动态性。
比如第一个定义,它说的是进程,它是程序的一次执行过程,它是动态的。
第二个定义是说进程它是程序在顺序执行时所发生的活动,它也是动态的。
第三个定义所强调了进程,它是程序在数据结合上的运行的过程,它依然是动态的,
所以所有的这些定义其实都在强调进程,它是一个动态的过程,它具有动态性。那么在引入了进程实体这个概念之后,我们还可以把进程定义为:进程它是进程实体的一个运行过程,是系统进行资源分配和调度的一个独立单位。所以虽然刚才我们说一般情况下,我们可以把进程实体简称为进程,但严格来说进程实体和进程这两个概念是不一样的。进程实体它是静态的,是进程运行过程当中所需要的这些数据的一个集合,它指的其实是这个数据本身 ,它是静态的,
而进程它强调的是这种动态性,就是指这些数据在运行的过程叫做进程,所以这是进程实体和进程之间的区别。不过一般来说我们也可以认为进程实体就是进程,除非题目当中专门考察二者的区别,他专门提到进程实体和进程的区别是什么,否则我们也可以说进程它是由程序段数据段和 PCB 三个部分组成的。
# 进程的组成
那么这就是第二个咱们需要了解的第二个内容,也就是进程的组成,或者说是进程实体的组成,那么这三个部分又分别需要存放哪些信息?
首先来看程序段,其实程序段存放的就是程序的代码本身,也就是那一系列的指令序指令序列的就是存放在这个程序段里的。
那么在这一系列的指令运行过程当中,可能会有一些中间的运算结果,还有运行的数据,像我们平时定义的变量,还有宏定义的常量,这些是这些程序运行过程当中所需要的数据,就是存放在所谓的数据段当中的。
而 PCB 是操作系统用于管理各个进程,用于实现并发执行的一个数据结构,所以 PCB 当中当然需要包含的就是操作系统对它进行管理所需要的各种各样的信息数据。
那么我们来具体看一下 PCB 当中需要有哪些信息,这是王道书上给出的 PCB 当中的内容,分为这样 4 个大类,进程描述信息,包括进程的标识符,也就是 PID 进程 ID。这个进程 ID 是在进程被创建的时候操作系统为进程分配的一个唯一的不重复的 ID,用于区分各个不同的进程,其实就类似于我们的身份证号码,然后用户标识符 UID 这个东西其实就是用来标识进程它所属的用户是谁。
那么除了进程的描述信息之外,还有一些进程控制和管理相关所需要的一些信息,包括进程当前的状态,进程的优先级,这些东西经过之后的学习,大家会有更深入的了解。
另外还有每一个进程被分配到的这些系统资源的清单,它被分配到了哪些系统资源,
最后 PCB 当中还会存放处理机相关的信息,主要是各种寄存器的值,为什么要保存各种寄存器的值?因为在进程切换的过程当中,可能有些数据算到一半,然后计算的中间结果可能是放在各个寄存器当中的。所以为了让下一次进程执行的时候,可以接着往下执行,接着当前所算得的中间数据往下执行,所以需要把这些寄存器当中的值进行保存。这些值就需要保存在 PCB 当中,
那么除了这种分类方法之外,其实 PCB 当中所包含的信息还有别的一些分类方式,比如说像咱们汤子颖版的教材里给出的这样的分类方式,那么有兴趣的同学大家也可以回教材看一下具体的每个部分包含的是哪些内容,不过和这些其实都是大同小异的。
在考试当中有可能会给我们一个数,据然后题目可能会问我们这个数据是否是保存在 PCB 当中的?其实我们并不需要把 PCB 当中的所有的这些各种各样的数据,一个不漏的记忆下来,我们只需要把握住一个本质。其实 PCB 它是操作系统对各个进程进行管理的一个数据所存放的地方,所以只要是和进程管理相关的数据肯定是放在 PCB 当中的。
那么与此相对的程序段和数据段存放的,其实是程序运行本身所需要的一些数据。比如说刚才我们提到的程序的代码,还有程序运行的过程当中所要处理的各种各样的变量之类的,我们只需要抓住这样的两个本质特点,其实就可以应付绝大多数的题目了。
# 进程的组织
接下来我们再来看一下进程的组织问题,我们知道在一个进程当中可能会有很多个进程正在并发的执行,那么相应的也会有很多个 PCB 进程控制快,为了对这些进程进行有效的管理,那么操作系统需要用一种合适的方式把这些 PCB 进行组织起来,所以这就是进程的组织问题。刚才咱们聊的进程的组成,其实讨论的是进程内部,一个进程内部它是由哪些部分组成的问题,而进程的组织讨论的是多个进程之间,它应该是用什么样的一个方式组织起来的一个问题。
那么进程的组织方式主要分为链接方式和索引方式两种,其中链接方式是操作系统会按照进程的状态把 PCB 分为多个队列,并且操作系统会持有各个指向各个队列的指针,索引方式其实和链接方式比较类似,只不过操作系统是根据进程的状态的不同,建立了几张索引表
链接方式其实就是操作系统会保持会持有一系列的指针,每一个指针会指向不同状态的进程队列。比如说执行指针指向的就是当前处于运行状态的进程,就是指当前正在被 CPU 处理,正在被 CPU 服务的进程。那么由于单 CPU 的计算机当中同一时刻只会有一个进程被 CPU 服务,被 CPU 处理,所以执行指针指向的就只有所一个进程的 PCB。
除此之外,操作系统还会有就绪队列指针,指向的就是当前处于就绪态的进程,比如说像这个样子,那么这些进程的 PCB 会用链接的方式把它练成一个队列,通常来说优先级比较高的会放在队头的位置。另外操作系统还会有一个阻塞队列指针,用来指向当前处于阻塞塞的进程。
索引方式和链接方式很类似,无非就是这些指针指向的是一个索引表,而不是一个队列的队头,而索引表的各个表项,它又会指向处于这个状态的各个进程所对应的 PCB。操作系统会为不同状态的进程建立不同的索引表,然后各个索引表的表象又指向处于这个状态的各个进程的 PCB。
那么看了刚才的那两个图之后,相信进程的组织方式的这些描述,大家就可以比较形象的能够理解了。以上就是进程的组织方式相关的问题。
# 进程的特征
那么最后我们再来看一下进程的特征,进程和程序是两个截然不同的概念,相比于程序而言,进程会拥有以下的一些特征,动态性、并发性、独立性、异步性和结构性,其中动态性它指的是进程,它是程序的一次执行过程,包括刚才从进程的定义当中,我们也可以看到他一直在强调进程,它是动态的产生变化和消亡的,所以动态性它也是动进程的最基本的一个特征。
那么除此之外进程还拥有并发性,并发性是指内存当中会有多个进程实体,然后各个进程并发的执行。关于并发的概念之前已经提到过很多次,这个地方就不再赘述了,
那么进程还具有独立性是指进程它是能够独立运行,独立获得资源,独立接受调度的一个基本单位。我们需要注意的是进程它是资源分配和接受调度的基本单位,这个点经常会在考试当中出现,
那么除此之外我们进程还有异步性,异步性其实是由于各个多个进程并发执行所导致的,是指各个进程会按照各自独立的不可预知的速度向前推进,因此异步性有可能会导致并发进程执行结果的不确定性,而这个不确定性具体我们会在进程同步相关的小节进行学习,这个地方大家只需要有个印象就可以了。那么为了解决这种进程程序执行结果的不确定性,操作系统会需要提供进程同步机制来解决这个问题。
最后操作性进程还具有结构性,所谓的结构性其实就是指在结构上看进程有程序段、数据段和 PCB 组成,那么这就是进程相比于程序来说它所拥有的几个特征。
# 小结
我们再来回顾一下小节的主要内容,这个小节刚开始我们介绍了进程的定义,我们需要重点关注的是进程它是一个动态的运行过程,另外进程它是操作系统进行资源分配和调度的一个独立单位,这两个点是比较重要的点。
之后我们介绍了一个进程有哪些部分组成,其中 PCB 它是进程存在的唯一标志,有的题目当中会考察会给出一个数据,问我们这个数据是否是存放在 PCB 当中的数据,那么我们怎么判断?其实我们只需要知道,PCB 它是操作系统,为了管理这些各个并发执行的程序所创立所建立的一个数据结构,因此这个数据结构当中肯存放的肯定都是操作系统对这些并发的进程进行管理的数据。而程序本身的运行所需要的数据就是存放在程序段和数据段当中的,这就是进程的组成问题。
之后我们又介绍进程的组织形式,分为链接和索引两种方式
最后我们还介绍了几个进程相比于程序来说所具有的几个特征,其中最需要注意的是这三个点,那么这三个点也是刚才咱们强调的点,动态性它是进程的最基本特性,独立性是指进程,它是进行资源分配调度的独立单位,而异步性它有可能会导致并发执行的进程运行结果不确定的问题。
好的,那么这就是小节的全部内容。