别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!
一、进程的概念
1.进程的定义
现代操作系统的重要特点是程序的并发执行,及系统所拥有的资源被共享和系统的用户随机地使用。通常,操作系统的重要任务之一是使用户充分、有效地利用系统资源。
进程是描述程序的执行过程和作为资源分配的基本单位。
2.程序的并发执行
(1)程序是一个在时间上按严格次序前后相继的操作序列,是一个静态的概念。
(2)程序的顺序执行
Repeat IR ← M [pc] pc ← pc+1 〈 Execute (instruction in IR)〉 Until CPU halt
把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。顺序执行的特点:
顺序性。程序顺序执行时,其执行过程可看作一系列严格按程序规定的状态转移过程。
封闭性。程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。
可再现性。只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。
(3)多道程序系统中程序执行环境的变化
计算机能够同时处理多个具有独立功能的程序。批处理系统、分时系统、实时系统以及网络与分布式系统等都是这样的系统。
这样的执行环境的特点如下:
独立性。每道程序都是逻辑上独立的,它们之间不存在逻辑上的制约关系。
随机性。在多道程序环境下,特别是在多用户环境下,程序和数据的输入与执行开始
时间都是随机的。
资源共享。资源共享将导致对进程执行速度的制约。
(4)程序的并发执行
分为两种:
多道程序系统的程序执行环境变化所引起的多道程序的并发执行。由于资源的有限性,多道程序的并发执行总是伴随着资源的共享与竞争。从而制约各道程序的执行速度。在宏观上并发执行,在微观上(指令级)仍是顺序执行;
并发执行是在某道程序的几个程序段中(例如几个程序),包含着一部分可以同时执行或顺序颠倒执行的代码。
程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。
程序的并发执行不同于程序的并行执行。 程序的并行执行是指一组程序按独立的、异步的速度执行。
一般情况下,并发执行的各程序段如果共享软、硬件资源,都会造成其执行结果受执行速度影响的局面。
3.进程和程序是两个既有联系又有区别的概念:
(1) 进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。
(2)进程具有并行特征,而程序没有。由进程的定义可知,进程具有并行特征的两个方面,即独立性和异步性。也就是说,在不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。显然,由于程序不反映执行过程,所以不具有并行特征。
(3)进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。这里,制约就是对进程独立性和异步性的限制。
(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。
二、进程的描述
进程的静态描述由三部分组成:进程控制块PCB,有关程序段和该程序段对其进行操作的数据结构集。
1.进程控制块PCB
PCB包含一个进程的描述信息、控制信息及资源信息,有些系统中还有进程调度等待所使用的现场保护区。
PCB 集中反映一个进程的动态特征。在进程并发执行时,由于资源共享,带来各进程之间的相互制约。为了反映这些制约关系和资源共享关系,在创建一个进程时,应首先创建其 PCB,然后才能根据PCB 中信息对进程实施有效的管理和控制。当一个进程完成其功能之后,系统则释放PCB,进程也随之消亡。
进程PCB中以下内容是必须的:
(1)描述信息
进程名或进程标识号
用户名或用户标识号
家族关系
(2)控制信息
进程当前状态。进程在活动期间可分为初始态、就绪态、执行态和等待状态、终止状态。
进程优先级。进程优先级是选取进程占有处理机的重要依据。与进程优先级有关的PCB表项有:a. 占有CPU时间;b. 进程优先级偏移;c. 占据内存时间,等。
程序开始地址。
各种计时信息。给出进程占有和利用资源的有关情况。
通信信息。通信信息用来说明该进程在执行过程中与别的进程所发生的信息交换情况。
(3)资源管理信息
PCB 中包含最多的是资源管理信息,包括有关存储器的信息、使用输入输出设备的信息、有关文件系统的信息等。
占用内存大小及其管理用数据结构指针,例如后述内存管理中所用到的进程页表指针等。
在某些复杂系统中,还有对换或覆盖用的有关信息,如对换程序段长度,对换外存地址等。这些信息在进程申请、释放内存中使用。
共享程序段大小及起始地址。
输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及所用设备的有关数据结构指针等。这些信息在进程申请释放设备进行数据传输中使用。
指向文件系统的指针及有关标识等。进程可使用这些信息对文件系统进行操作。
(4)CPU 现场保护结构
当前进程因等待某个事件而进入等待状态或因某种事件发生被中止在处理机上的执行时,为了以后该进程能在被打断处恢复执行,需要保护当前进程的 CPU现场(或称进程上下文)。PCB 中设有专门的 CPU现场保护结构,以存储退出执行时的进程现场数据。
总之,进程控制块PCB 是系统感知进程存在的唯一实体。通过对PCB 的操作,系统为有关进程分配资源从而使得有关进程得以被调度执行;而完成进程所要求功能的程序段的有关地址,以及程序段在进程过程中因某种原因被停止执行后的现场信息也都在PCB 中。最后,当进程执行结束后,则通过释放PCB 来释放进程所占有的各种资源。
由于PCB 中包含有较多的信息,因此,一个PCB表往往要占据较大的存储空间(一般占几百到几千个字节)。在有的系统中,为了减少 PCB对内存的占用量,只允许PCB中最常用的部分,如CPU现场保护、进程描述信息、控制信息等常驻内存。PCB 结构中的其他部分则存放于外存之中,待该进程将要执行时与其他数据一起装入内存。
2、进程上下文
进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在指令寄存器、堆栈、状态字寄存器等中的内容。
把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文。
正在执行的指令和数据在相关寄存器与堆栈中的内容称为正文。
待执行指令和数据在相关寄存器与堆栈中的内容称为下文。
如图,进程上下文结构:
3、进程上下文切换
切换过程:
三、进程状态及其转换
1.进程状态
系统根据PCB结构中的状态值控制进程。
一个进程至少具有三种基本状态,它们是:执行状态Running、等待状态Waiting和就绪状态Ready。
在有些系统中,为了有效地利用内存,就绪状态又可进一步分为内存就绪状态和外存就绪状态(挂起状态Suspend)。
在单CPU系统中,任一时刻处于执行状态的进程只能有一个。只有处于就绪状态的进程经调度选中之后才可进入执行状态。
在某些操作系统中,一个进程在其生命期内的执行过程中,总要涉及到用户程序和操作系统内核程序两部分。因此,进程的执行状态又可进一步划分为用户执行状态和系统执行状态。划分用户态和系统态最主要的原因是要把用户程序和系统程序区分开来,以利于程序的共享和保护。
进程因等待某个事件发生而放弃处理机进入等待状态。显然,等待状态可根据等待事件的种类而进一步划分为不同的子状态,例如内存等待、设备等待、文件等待和数据等待等。
2.进程状态转换
四、进程控制
进程和处理机管理的一个重要任务是进程控制。所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
把系统态下执行的某些具有特定功能的程序段称为原语。原语分为两类:
一类是机器指令级的,其特点是执行期间不允许中断,在操作系统中,它是一个不可分割的基本单位。
一类是功能级的,其特点是作为原语的程序段不允许并发执行。
在操作系统中,通常把进程控制用程序段做成原语。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语等。
1. 进程创建
(1)由系统程序模块统一创建,例如在批处理系统中,由操作系统的作业调度程序为用户作业创建相应的进程以完成用户作业所要求的功能。
(2)由父进程创建,例如在层次结构的系统中,父进程创建子进程以完成并行工作。
无论是系统创建方式还是父进程创建方式,都必须调用创建原语来实现。创建原语扫描系统的PCB链表,在找到一定PCB表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。这些参数包括:进程名、进程优先级P0 、进程正文段起始地址d0 、资源清单R0等。
2.进程撤销
以下几种情况导致进程被撤消:
该进程已完成所要求的功能而正常终止。
由于某种错误导致非正常终止。
祖先进程要求撤消某个子进程。
进程被撤消都必须释放它所占用的各种资源和PCB 结构本身,以利于资源的有效利用;当一个祖先进程撤消某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤消其子孙进程的PCB结构和释放它们所占有的资源。
撤消原语首先检查 PCB进程链或进程家族,寻找所要撤消的进程是否存在。如果找到了所要撤消的进程的 PCB结构,则撤消原语释放该进程所占有的资源之后,把对应的 PCB结构从进程链或进程家族中摘下并返回给 PCB空队列。如果被撤消的进程有自己的子进程,则撤消原语先撤消其子进程的 PCB结构并释放子进程所占用的资源之后,再撤消当前进程的 PCB结构和释放其资源。
3.进程的阻塞block与唤醒wake up
实现进程的执行状态到等待状态,又由等待状态到就绪状态转换的两种原语,即阻塞原语与唤醒原语。
阻塞原语在一个进程期待某一事件发生,但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。
当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。
唤醒一个进程有两种方法:
由系统进程唤醒
由事件发生进程唤醒
唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。
五、进程互斥
1.资源共享所引起的制约
进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争与共享对进程的执行过程进行制约所造成的。
(1)临界区
设有两个计算进程PA,PB共享内存MS。其中 MS分为三个领域,即系统区、进程工作区和数据区。这里数据区被划分大小相等的块,每个块中既可能放有数据,也有可能未放有数据。系统区主要是堆栈S,其中存放那些空数据块的地址。