写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、进程的定义和特征
1、进程的定义
(1)对于进程的定义,从不同的角度可以有不同的定义,其中较典型的定义有:
①进程是程序的一次执行。
②进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
③进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
(2)为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程,这样,程序段(二进制指令序列)、相关的数据段(进程运行时产生和获取的数据亦或是原始数据)和PCB三部分便构成了进程实体(又称进程映像),一般把进程实体简称为进程,例如,所谓创建进程实质上是创建进程实体中的PCB,而撤消进程实质上是撤消进程的PCB。
(3)在引入了进程实体的概念后,可以把传统OS中的进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。(一个进程被“调度”,意思就是操作系统决定让这个进程在CPU上运行)
2、进程的特征
(1)结构特征:进程具有程序所没有的PCB结构。
(2)动态性:进程的实质是进程实体的执行过程,因此,动态性就是进程的最基本的特征。进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有活动的含义,因而是静态的。
(3)并发性:多个进程实体同存于内存中,且能在一段时间内同时运行。
(4)独立性:在传统的OS中,独立性是指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位,凡未建立PCB的程序都不能作为一个独立的单位参与运行。
(5)异步性:进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进。
3、程序与进程的关系
(1)程序是产生进程的基础,进程是程序功能的体现。
(2)程序的每次运行都会构成不同的进程。
(3)程序段就是能被进程调度程序调度到CPU执行的程序代码段,一个程序可被多个进程共享,即多个进程可运行同一个程序。另外,通过调用关系,一个进程也可包括多个程序。
二、进程的基本状态及转换
1、进程的三种基本状态
(1)就绪状态:
这是指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有必要资源,只要再获得CPU便可立即执行。
如果系统中有许多处于就绪状态的进程,通常将它们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列。
(2)执行状态:
这是指进程已获得CPU,其程序正在执行的状态。对任何一个时刻而言,在单处理机系统中,只有一个进程处于执行状态,而在多处理机系统中,则可有多个进程处于执行状态。
(3)阻塞状态:
这是指正在执行的进程由于发生某事件(或者需要等待某事件发生)暂时无法继续执行时的状态,亦即进程的执行受到阻塞,此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。
通常系统将处于阻塞状态的进程也排成一个队列,称该队列为阻塞队列,另外,在较大的系统中,为了减少队列操作的开销,提高系统效率,根据阻塞原因的不同,会设置多个阻塞队列。
2、三种基本状态的转换
(1)基本状态的转换流程:
①处于就绪状态的进程,在调度程序为之分配了处理机之后便可执行,相应地,其状态就由就绪态转变为执行态。
②正在执行的进程(当前进程)如果因分配给它的时间片已完而被剥夺处理机暂停执行时,其状态便由执行转为就绪。
③如果因发生某事件(或者需要等待某事件发生),致使当前进程的执行受阻(例如进程访问某临界资源,而该资源正被其它进程访问时),使之无法继续执行,则该进程状态将由执行转变为阻塞,直到进程执行受阻的原因得到解决后(比如进程需要访问的临界资源空闲),该进程的状态才重新转到就绪状态。
(2)基本状态的转换规则:
①进程不能由阻塞态直接转换为运行态,因为一个时刻内基本必有另一个进程处在执行状态,该进程只能转换为就绪态重新排队。(从阻塞态进入就绪态则不是进程自身控制的,对进程而言是一种被动行为)
②进程不能由就绪态直接转换为阻塞态,因为进入阻塞态是进程主动要求的,必然需要进程在运行时才能发出这种请求。
③在可剥夺(通俗地说就是可强行打断正在执行的进程)的操作系统中,当有更高优先级的进程就绪时,调度程序将正执行的进程转换为就绪状态,让更高优先级的进程执行。
3、创建状态和终止状态
(1)为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中又为进程引入了两种常见的状态:创建状态和终止状态。
(2)创建状态(新建态):
创建一个进程一般要通过多个步骤才能完成:首先由进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息,然后为该进程分配运行时所必须的资源,最后把该进程转入就绪状态并插入就绪队列之中。
如果进程所需的资源尚不能得到满足,比如系统尚无足够的内存使进程无法装入其中,此时创建工作尚未完成,进程不能被调度运行,于是把此时进程所处的状态称为创建状态。
(3)终止状态(结束态):
进程的终止也要通过两个步骤:首先等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返还系统。
当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其它有终止权的进程所终结,它将进入终止状态,进入终止态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据供其它进程收集,一旦其它进程完成了对其信息的提取之后,操作系统将删除该进程,即将其PCB清零,并将该空白PCB返还系统。
三、挂起操作和进程状态的转换
1、挂起操作的引入
(1)暂时调到外存等待的进程状态为挂起状态,挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
(2)引入挂起操作的原因,是基于系统和用户的如下需要:
①终端用户的需要。当终端用户在自己的程序运行期间发现有可疑问题,希望暂停自己的程序的运行,使之停止下来,以便用户研究其执行情况或对程序进行修改。
②父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
③负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
④操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
2、引入挂起原语操作后三个进程状态的转换
(1)活动就绪→静止就绪。当进程处于未被挂起的就绪状态时,称此为活动就绪状态表示为Readya,此时进程可以接受调度;当用挂起原语Suspend将该进程挂起后,该进程便转变为静止就绪状态,表示为Readys,处于Readys状态的进程不再被调度执行。
(2)活动阻塞→静止阻塞。当进程处于未被挂起的阻塞状态时,称它是处于活动阻塞状态,表示为Blockeda;当用Suspend原语将它挂起后,进程便转变为静止阻塞状态,表示为 Blockeds,处于该状态的进程在其所期待的事件出现后,它将从静止阻塞变为静止就绪Readys状态。
(3)静止就绪→活动就绪。处于Readys状态的进程若用激活原语Active激活后,该进程将转变为Readya状态。
(4)静止阻塞→活动阻塞。处于Blockeds状态的进程若用激活原语Active激活后,进程将转变为Blockeda状态。
3、引入挂起原语操作后五个进程状态的转换
(1)NULL→创建:一个新进程产生时,该进程处于创建状态。
(2)创建→活动就绪:在当前系统的性能和内存的容量均允许的情况下,完成对进程创建的必要操作后,相应的系统进程将进程的状态转换为活动就绪状态。
(3)创建→静止就绪:考虑到系统当前资源状况和性能的要求,不分配给新建进程所需资源,主要是主存,相应的系统将进程状态转为静止就绪状态,被安置在外存,不参与调度,此时进程创建工作尚未完成。
(4)执行→终止:当一个进程已完成任务时,或是出现了无法克服的错误,或是被OS或被其它进程所终结,此时将进程的状态转换为终止状态。
四、进程管理中的数据结构
1、用于管理控制的数据结构
在计算机系统中,对于每个资源和每个进程都设置了一个数据结构用于表征其实体,称之为资源信息表或进程信息表,其中包含了资源或进程的标识、描述、状态等信息以及一批指针,通过这些指针可以将同类资源或进程的信息表或者同一进程所占用的资源信息表分类链接成不同的队列,便于操作系统进行查找。
如下图所示,OS管理的这些数据结构一般分为内存表、设备表、文件表和用于进程管理的进程表四类,通常进程表又被称为进程控制块PCB,系统的所有PCB常驻内存的PCB区。
2、进程控制块PCB的作用
(1)作为独立运行基本单位的标志。当系统创建一个新进程时,就为它建立了一个PCB,进程结束时又回收其PCB,进程随之消亡,也就是说,系统是通过PCB感知进程的存在的,那么PCB则是进程存在系统中的唯一标志。
(2)能实现间断性运行方式。在多道程序环境下,程序是采用停停走走间断性的运方式运行的,当进程因阻塞而暂停运行时,它必须保留自己运行时的CPU现场信息,再被调度运行时,还需要恢复其CPU现场信息。在有了PCB 后,系统就可将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调度执行时恢复CPU现场时使用。
(3)提供进程管理所需要的信息。当调度程序调度到某进程运行时,只能根据该进程PCB中记录的程序和数据在内存或外存中的始址指针找到相应的程序和数据;在进程运行过程中,当需要访问文件系统中的文件或I/O设备时,也都需要借助于PCB中的信息;另外,还可根据PCB中的资源清单了解到该进程所需的全部资源等。
(4)提供进程调度所需要的信息。只有处于就绪状态的进程才能被调度执行,而在PCB中就提供了进程处于何种状态的信息,如果进程处于就绪状态,系统便将它插入到进程就绪队列中,等待着调度程序的调度;另外,在进行调度时往往还需要了解进程的其它信息,如在优先级调度算法中,就需要知道进程的优先级。
(5)实现与其它进程的同步与通信。进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量,在PCB中还具有用于实现进程通信的区域或通信队列指针等。
3、进程控制块中的信息
(1)进程标识符:用于唯一地标识一个进程。
①外部标识符。为了方便用户(进程)对进程的访问,须为每一个进程设置一个外部标识符,它是由创建者提供的,通常由字母、数字组成。为了描述进程的家族关系,还应设置父进程标识及子进程标识。
②内部标识符。为了方便系统对进程的使用,在OS中又为进程设置了内部标识符,即赋予每一个进程一个唯一的数字标识符,它通常是一个进程的序号。
(2)处理机状态:主要由处理机的各种寄存器中的内容组成,处理机运行时的信息存放在寄存器中,当被中断时这些信息要存放在PCB中。
(3)进程调度信息:在OS进行调度时,必须了解进程的状态及有关进程调度的信息。
①进程状态:指明进程的当前状态,它是作为进程调度和对换时的依据。
②进程优先级:用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机。
③进程调度所需的其它信息:与所采用的进程调度算法有关,比如进程已等待CPU的时间总和、进程已执行的时间总和等。
④事件:指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
(4)进程控制信息:指用于进程控制所必须的信息。
①程序和数据的地址:指进程实体中程序和数据的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据。
②进程同步和通信机制:这是实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中。
③资源清单:在该清单中列出了进程在运行期间所需的全部资源(除CPU以外),另外还有一张已分配到该进程的资源的清单。
④链接指针:它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
4、进程控制块的组织方式
(1)线性方式:将系统中所有的PCB都组织在一张线性表中,将该表的首址存放在内存的一个专用区域中。
(2)链接方式:把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列,这样可以形成就绪队列、若干个阻塞队列和空白队列等,操作系统持有指向各个队列的指针。
①对就绪队列而言,往往按进程的优先级将PCB从高到低进行排列,将优先级高的进程PCB排在队列的前面。
②可把处于阻塞状态进程的PCB根据其阻塞原因的不同,排成多个阻塞队列,如等待I/O操作完成的队列和等待分配内存的队列等。
(3)索引方式:系统根据所有进程状态的不同建立几张索引表,并把各索引表在内存的首地址记录在内存的一些专用单元中,在每个索引表的表目中记录具有相应状态的某个PCB在PCB表中的地址。