【操作系统】第七章:进程管理(Part1:进程的概念)

OS.StudyLog.Ch7.Process management.进程管理

进程描述

进程的静态表述部分。

1.定义

【操作系统】第七章:进程管理(Part1:进程的概念)
进程的概念比较抽象。某些角度上,我们可以把运行的程序看作进程,它代表程序在整个执行过程的描述。随着计算机的不断发展,程序开始出现多元化,一个程序分成几部分运行的例子也很多,此时如果我们再用程序的概念来描述多个程序的实例就比较困难,所以我们引出进程的概念。
进程:一个具有独立功能的程序在一个数据集合上的一次动态执行过程。
如图,我们写程序,然后程序通过编译可以变成一个执行程序,执行程序包含了代码段,数据段和数据结构等。这样的程序是放在文件系统里,以一种执行文件的形态存在,是静态存在的,无法看到它可以完成什么样的功能;只有当OS将其调入内存中,让这个程序跑起来,通过CPU执行程序中的一条条指令、对相应数据进行处理,可以完成一定的功能。这一步是一个动态的执行过程,这个执行过程就是进程。进程是一个动态的过程,程序是静态的,他们之间有很深的联系,因为进程取决于程序的代码。

2.组成

进程具体需要执行的东西:
①相应的代码
②代码需要处理的数据
③现在要执行的指令
④一组通用寄存器的当前值、堆栈
寄存器中一般存着下一条要执行的指令位置,同时整个处理过程中他会用到大量CPU的寄存器,会动态变化。
⑤系统资源(内存、文件系统、网络等一系列的资源)

进程包含了一个正在运行的程序的状态信息。这个状态信息是比较抽象的概念。

3.进程与程序的联系

【操作系统】第七章:进程管理(Part1:进程的概念)
程序是产生进程的基础,进程的功能受制于程序的代码。程序的每一次执行构成了不同的进程,程序放在系统中可以被多次执行,且每次执行如果数据不同,则得到的结果也可能不同。当有多个进程执行这个程序时,可能会因为获得的资源不一样而获得不同的结果。进程就是程序功能的体现,数据不同,但是其逻辑原理是一样的,排序程序,输入不同输出不一定相同但是一定是一个排序的程序。通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包括多个程序。


区别:进程是动态的;程序是静态的。程序是有序代码的集合,进程是程序的执行,进程有核心态用户态
核心态就是在操作系统中运行,我们写的程序都是运行在用户态。进程在执行过程中需要一些特定功能,比如读写文件,这个功能需要由OS完成,所以代表进程在内核中执行,也就说进程处于核心态。


进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可以长久保存。程序保存在硬盘中,可以长久保存;进程随着结束自然也就消失了。


进程与程序的组成不同。进程的组成包括程序、数据和进程控制块(即进程状态信息)。虽然进程用到了程序的代码段和数据段等数据结构,但是进程执行过程中也有一些变化,处理数据时,数据在变;这个过程在程序中不存在的。处理输入数据对应产生输出数据,为了管理进程OS而建立的进程控制块等。
【例子】
【操作系统】第七章:进程管理(Part1:进程的概念)
很明显医疗救护的优先级要高于做蛋糕,在处理完伤口后回来做蛋糕发现未完成的蛋糕上落满了苍蝇,科学家决定倒掉重做,这就是杀死进程。也就说CPU在执行进程时,会动态切换不同进程来完成不同的功能,这也是静态程序所没有的特征。

4.特点

动态性:可动态创建、结束进程。在执行过程中还有可能切换或者杀死进程。
并发性:进程可以被独立调度并占用CPU运行。
并发:一段时间内通过不但切换有多个进程在CPU中不断切换执行,如果这个时间很小,给人一种错觉是多个进程在同时执行。假·同时执行,是一种人感觉不到的错觉
并行:一个时刻,有多个进程在同时执行。如果只有一个CPU是不可能完成的,一个CPU在某一时刻只能执行一个进程,执行其他执行必须切换。多核/多处理器CPU时,可以满足并发执行。真·同时执行
独立性:不同进程之间的工作互不影响。执行进程时,OS会调度不同进程执行,所以进程的执行时间可能会受到其他进程的影响;但是进程的正确性不会受到影响,进程不会破坏其他进程的正确执行(代码/数据)。
通过页表可以使得不同的程序访问不同的地址空间,页表就是保证进程独立性的重要机制。有了页表,OS可以给不同进程分配不同页表,让每个进程在独立的空间内运行,使得他们的代码数据相互间不受影响。
制约性:因访问共享数据/资源或进程间同步而产生制约。进程之间可能有交互,或者某一进程需要在另一个进程在执行到某一阶段之后才能执行(前置条件),所以这也需要OS根据进程间的特点来协调进程去执行。
【操作系统】第七章:进程管理(Part1:进程的概念)
左图:体现动态性,在ABCD间切换执行。
中图:四个进程相对独立执行,他们执行的地址空间相对独立
右图:相互之间时间调度有一定的关系,执行的先后顺序需要OS调度策略或算法,或者存在约束关系(必须执行A才能执行B)。

进程控制块

操作系统也是一个软件,一个程序,描述进程的数据结构:进程控制块(Process Control Block,PCB)。描述进程执行过程中状态的变化和资源的需求情况。OS为每一个进程都维护了一个PCB,用于保存该进程执行过程中相关的所有信息,有了这些信息之后OS才可以对其管理,提供相应的独立性、动态性等特征。
【操作系统】第七章:进程管理(Part1:进程的概念)
设计一个程序,数据结构是非常重要的。有了数据结构就可以很好地对进程管理。PCB描述了进程的基本情况和运行变化情况,所以一般来说我们可以把PCB作为进程存在的唯一标识,也就意味着如果进程存在则必然有一个PCB。一旦创建进程,就会相应创建一个进程控制块。
PCB 体现了什么时候开始,什么时候结束,中间是否被切换。
【操作系统】第七章:进程管理(Part1:进程的概念)
PCB包含的三大类信息:
1.标识信息:一个PCB唯一标识了一个进程,PCB会有一个ID,这个ID就是个标识,他可以识别出进程代表的哪一个程序,或者这一个程序执行了几次,都可以通过PCB的进程标识来体现。还可以体现用户标识,比如这个进程属于哪一个用户,进程的父进程是什么(创建这个进程的进程)
2.处理器的状态信息:其实就是寄存器。处理器是CPU。CPU运行过程中会使用寄存器来做很多事情,比如当前需要对数据进行加减乘除等数学结算,这个过程会把很多数据存到寄存器里进行处理;还会保存状态,比如标志位,做了一个寄存器加法,检验是否溢出;执行过程,堆栈在什么地方;和执行相关的一些过程的保存也放在寄存器里,比如程序计数器和程序状态字,他们 保存了程序执行过程中相关的一些重要信息,还有堆栈执行到什么地方了,这些信息PC里都有记录。
【操作系统】第七章:进程管理(Part1:进程的概念)
3.进程的控制信息:OS需要对进程进行管理和控制,我们需要让它占用CPU执行,让他处于一个等待/就绪/运行的状态,这些不同的状态体现了进程在执行过程中临时的情况(执行特征),这些特征会描述出当前进程的执行现状。
进程之间需要通信,通信的信息也会保存在PCB。
进程本身需要内存,代码和数据都在内存中,管理其内存信息。比如占不到内存,是否回收;是否分配新的内存;
包括文件(后续详解)。一个进程可以打开不同的文件,整个过程怎么管理。
进程之间有关系,父进程和子进程。我们可以通过List链表来管理器来一个子进程与父进程的连续序列,从而形成PCB之间的链接信息和管理信息,从而形成了进程控制信息。
ex)进程A创建进程B,进程B可以创建进程C,则A是B的父进程,B是A的子进程;B是C的父进程,C是B的子进程。


PCB的组织方式
我们可以用链表/索引(数组方式)来组织,但是一般我们会采取链表来组织,因为进程的执行过程是一个动态的执行过程,也就意味着OS在管理进程时,他会一会创建一会结束,在整个组织里他应该可以动态插入和动态删除,用链表的方式可以更好地完成动态插入和删除。如果是数组的话,动态的插入和删除开销可能会比较大。所以目前来说更多采取基于链表的方式,当然如果一个进程个数比较固定且一开始就执行,到结束也不会频繁的创建删除的话,采取索引的方式比较快捷。