操作系统之进程详解一
进程的概念和特征
进程的定义
-
进程是程序的一次执行过程。
-
进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
-
进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单元。
进程的特征
-
动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
-
并发性:指多个进程实体同时存于内存中,能在一段时间内同时运行。并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
-
独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单元。凡未建立PCB的程序都不能作为一个独立的单元参与运行。
-
异步性:由于进程的相互制约,使得进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此在操作系统中必须配置相应的进程同步机制。
-
结构性:每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段、数据段和进程控制块三部分组成的。
进程的状态和转换
-
运行态:进程正在处理机上运行。在单机处理机环境下,每个时刻最多只有一个进程处于运行态。
-
就绪态:进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,成为就绪队列。
-
阻塞态:又称等待态。进程正在等待某一事件而暂定运行,如等待某资源为可用或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
-
创建态:进程正在被创建,尚未转到就绪态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息,然后由系统为该进程分配运行时所必须的资源,最后把该进程转入就绪态。
-
结束态:进程正从系统中消失,可能是进程正常结束或其他原因中断退出运行。进程需要结束运行时,系统首先必须置该进程为结束态,然后再进一步处理资源释放和回收等工作。
以下图1.1说明了五种状态的转换:
就绪态->运行态:处于就绪态的进程被调度后,获得处理及资源,于是进程由就绪态转换为运行态。
运行态->就绪态:处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转换为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行。
运行态->阻塞态:进程请求某一资源的使用和分配或等待某一事件的发生时,它就从运行态转换为阻塞态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
阻塞态->就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞转换为就绪态。
进程控制
1、进程的创建
-
为新进程分配一个唯一的进程标识号,并申请一个空白PCB。若PCB申请失败,则创建失败。
-
为进程分配资源,为新进程的程序和数据及用户栈分配必要的内存空间。若资源不足,则并不是创建失败,而是处于阻塞态,等待内存资源。
-
初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理控制信息,以及设置进程的优先级等。
-
若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。
2、进程的终止
操作系统终止进程的过程如下:
-
根据被终止进程的标识符,检索PCB,从中读取该进程的状态。
-
若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
-
若该进程还有子孙进程,则应该将其所有子孙进程终止。
-
将该进程所拥有的全部资源,或归还给其父进程,或归还给操作系统。
-
将该PCB从所在队列中删除。
进程的阻塞和唤醒
-
找到将要被阻塞进程的标识号对应的PCB。
-
若该进程为运行态,则保护其现场,将其状态转为阻塞态,停止运行。
-
把该PCB插入相应事件的等待队列,将处理机资源调度给其他就绪进程。
唤醒的执行过程如下:
-
在该事件的等待队列中找到相应进程的PCB。
-
将其从等待队列中移除,并置其状态为就绪状态。
-
把该PCB插入就绪队列,等待调度程序调度。
进程切换
切换的过程如下:
-
保存处理机上下文,包括程序计数器和其他寄存器。
-
更新PCB信息。
-
把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
-
选择另一个进程执行,并更新其PCB。
-
更新内存管理的数据结构。
-
恢复处理机上下文。
进程的组织
1、进程控制块
进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单元。它由三部分组成,其中最核心的进程控制块(PCB)。
PCB主要包括描述信息、进程控制和管理信息、资源分配清单和处理机相关信息等。
-
进程描述信息:进程标识符,标志各个进程,每个进程都有一个唯一的标识号。用户标识符,进程归属的用户,用户标识符主要为共享和保护服务。
-
进程控制和管理信息:进程当前状态,描述进程的状态信息,作为处理机分配调度的依据。进程优先级,描述进程抢占处理机的优先级,优先级高的进程可优先获得处理机。
-
资源分配清单:用于说明有关内存地址空间或虚拟地址空间的状况,所打开文件的列表和所使用的输入/输出设备信息。
-
处理机相关信息:指处理机中各寄存器的值,当进程被切换时,处理机状态信息必须保存在相应的PCB中,以便在该进程重新执行时,能从断点继续执行。
2、程序段
程序段就是能被进程调度程序调度到CPU执行的程序代码段。注意,程序可被多个进程共享,即多个进程可以运行同一个程序。
3、数据段
一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。
进程的通信
1、共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换,如图1.2所示,在对共享空间进行写/读操作时,需要使用同步互斥工具,对共享空间的写/读进行控制。
2、消息传递
进程通过系统提供的发送消息和接收消息两个原语进行数据交换。
- 直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓存队列上,接收进程从消息缓冲队列中取得消息,如图1.3。
- 间接通信方式:发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱,这种通信方式又称信箱通信方式。该通信方式广泛运用于计算机网络中,相应的通信系统称为电子邮件系统。
3、管道通信
管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间的通信的一个共享文件,又称pipe文件。向管道提供输入的发送进程,以字符流形式将大量的数据送入管道;而接收管道输出的接收进程则从管道中接收数据。管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现如下:
-
限制管道的大小。实际上,管道是一个固定大小的缓冲区。在linux中,该缓冲区的大小为4kb,这使得它的大小不像文件那样不加校验的增长。使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,这种情况发生时,随后对管道的write()调用将默认地阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。
-
读进程也可能工作得比写进程快。当所有当前进程数据已被读取时,管道变空。当这种情况发生时,一个随后的read()调用将默认地被阻塞,等待某些数据被写入,这解决了调用返回文件结束的问题。
更多经常内容请关注公众号:计算机基础爱好者