进程管理
2.1进程
进程的概念
程序:是静态的,就是个存放在磁盘里的可执行文件,应用程序。是一系列的指令集合。
进程(Process):是动态的,是程序的一次执行过程,同一个程序可以执行多次。(可以开多个QQ)
操作系统如何区分相同程序多次执行的进程:每一个进程有自己特殊的进程标识PID、用户标识符UID(唯一的、不重复)。同时还记录进程所分配的资源(CPU使用时间,占用多少内存等)
这些信息都被保存在一个数据结构PCB(Process Control Block)中,进程控制块。
操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。
进程的组成
一个进程实体
(进程映像)由PCB、程序段、数据段组成。进程是动态
的,进程实体是静态
的。
程序段:程序的代码(指令序列)
数据段:运行过程中产生的各种数据。(定义的变量等)
引入进程实体概念后,把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个单位。
PCB是进程的唯一标志!
进程的特征
- 动态性:进程是程序的一次执行过程,是动态地产生、变化和消亡的(进程的最基本的特征)
- 并发性:内存中有多个进程实体。各个进程并发执行
- 独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位
- 异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制解决一部问题”
- 结构性:每一个进程都会配置一个PCB。
2.2进程的状态和转换
- 就绪态(Ready):进程创建完毕后,进程就已经具备运行条件,称为“就绪态”,在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。,由于没有空闲CPU,暂时未运行。
- 运行态(Running):CPU空闲,在就绪队列中选择进程上CPU运行。单处理系统中只有一个进程处于运行态,多处理系统可能有多个进程处在运行态。
- 阻塞态(Waiting 等待态):运行态的进程在运行的过程中,可能会请求等待某个事件发生(等待某种资源的分配,打印机等),在这个事件发生之前,进程无法继续 则下CPU,进入“ 阻塞态 ”,CPU空闲,选择下一个就绪态进程运行。如果等待的资源得到释放,空闲,那么阻塞态的进程又会重新回到就绪态。
- 创建态(New 新建态):当进程正在创建时,称为创建态,此时操作系统会为进程分配各项资源、初始化PCB
- 终止态(Terminated):运行态的进程执行exit系统调用,请求操作系统终止进程,或是进程达到自然结束点,或是出现无法克服的错误,或是被操作系统终结,或被其他有终止权的进程所终结,进入“终止态” ,并回收进程占用的各项资源,最后回收进程的PCB。
(PCB中变量state可表示当前进程状态,1表示就绪态,2表示阻塞态…)
三态转化图:
运行态→阻塞态:当前运行的进程因某种原因受阻(访问某种临界资源,该资源正被其它进程访问时),使之无法继续(进程自身的主动行为)
阻塞态→就绪态:临界资源被释放、空闲时,阻塞的进程又回到就绪态(非进程自身控制,是一种被动行为)
就绪态→运行态:CPU空闲,处于就绪态的进程得到处理机后,进入运行状态
运行态→就绪态:分配的时间片已完;有优先级更高的进程
五态转化图
增加创建态和终止态后的状态转化图
NULL→创建态:执行一个程序,创建一个子进程。
创建态→就绪态:系统完成创建进程的相关工作
运行态→终止态:进程运行结束,或是出现无法克服的错误,或是被操作系统终结,或被其他有终止权的进程所终结
终止态→NULL:完成善后操作。
挂起操作和进程状态的转换
在许多系统中,进程除了就绪、运行和阻塞三种基本的状态外,为了系统和用户观察和分析进程的需要,还引入了一个对进程的重要操作——挂起操作。当操作作用于某个进程时,该进程将被挂起,处于静止状态。如果进程正在运行,则被暂停。若原本处于就绪态,则该进程暂时不接受调度。与挂起对应的时激活操作。
引入挂起操作的原因,是基于系统和用户的如下需要:
- 终端用户的需要。当终端用户在自己的程序运行期间发现有可疑问题,希望暂停自己的程序的运行,使之停止下来,以便用户研究其执行情况或对程序进行修改。
- 父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
- 负荷调节的需要。当实时系统中的工作负荷较重,可由系统把一些不需要的进程挂起,以保证系统能正常运行。
- 操作系统的需要。操作系统有时希望挂起某进程,以便检查运行中资源的使用情况或进行记账。
- 对换的需要。为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。
引入挂起后的三态转化
引入挂起后的五态转化
2.3进程管理中的数据结构
操作系统中用于管理的数据结构
在计算机系统中,对每个资源和进程都设置了一个数据结构,用表征其实体,成为资源信息表或进程信息表。包含资源或进程的标识、描述、状态信息等以及指针,通过这些指针可以将同类的资源或进程信息表链接成不同队列。
(进程表又称为进程控制块PCB)
进程控制块PCB的作用
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成行为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
- 作为独立运行基本单位的标志。当一个程序(含数据)配置PCB后,则它就是一个能独立运行的基本单位(只要获得处理机)。当创建进程时,就要为其初始化PCB,进程结束后,收回PCB,进程也就随之消亡。系统是通过PCB感知进程的存在的。所以PCB是进程的唯一标志!
- 能实现间断运行方式。多道程序环境下,程序运行走走停停。当进程因为阻塞而暂停时,需要保留当前运行CPU的现场信息,再次运行时,恢复CPU现场信息。有了PCB,系统可将CPU的现场信息保存在被暂停进程的PCB中。
- 提供进程管理所需要的信息。PCB中记录程序和数据 在内存和外存中的始址指针,根据这些,程序运行时找到相应的程序和数据。
- 提供进程调度所需要的信息。只有就绪态的进程才能被调度运行,在PCB中提供了进程处于何种状态的信息。
- 实现与其他进程同步通信。进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量。在PCB中还具有用于实现进程通信的区域或通信队列指针等。
进程控制块中的信息
- 进程标识符(PID)
- 外部标识符
- 内部标识符
- 处理机状态
- 进程调度信息
- 进程控制信息
进程控制块的组织方式
系统中可拥有数百数千个PCB,为能够对其有效管理,应该用适当的方式将这些PCB组织起来。主要有一下三种方式。
- 线性方式,将所有PCB都组织在一张线性表中,把表首地址存放在内存的一个专区中。该方式实现简单,开销小,但是每次查找时都需要扫描真个线性表,适合进程数目不多的系统。
- 链式,即把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列。这样,可以形成就绪队列、若干个阻塞队列和空白队列等。就绪队列按进程优先级排列PCB,阻塞队列根据阻塞原因不同排列。
- 索引方式,建立几张索引表。
2.4进程控制
进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已经完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。如当一个正在执行的进程因等待某事件而暂时不能继续执行时,将其转变为阻塞状态,而在该进程所期待的事件出现后,又将该进程转换为就绪状态等。进程控制一般是由OS的内核中的原语来实现的。
支撑功能
该功能是提供给OS其它众多模块所需要的一些基本功能,以便支撑这些模块工作。
其中三种最基本的支撑功能是:中断处理、时钟管理和原语操作。
- 中断处理是内核最基本的功能,是整个操作系统活动的基础,例如系统调用、键盘命令的调入、进程调度、设备驱动等。
- 时钟管理是内核基本功能,在时间片轮转调度中,每当时间片用完时,时钟管理产生一个中断信号。
- 原语是由若干指令组成的,用于完成一定功能的一个过程,是一个原子操作,即一气呵成,一个操作中所有动作要么全做,要么不做。
相关原语操作
- 进程的创建:
- 申请空白PCB
- 为新进程分配所需要的资源
- 初始化PCB
- 如果进程就绪队列能够接纳新进程,就将进程插入就绪队列
- 进程的终止:
- 从PCB集合中找出终止进程的PCB
- 若进程正在运行,立即剥夺CPU,分配给其他进程
- 终止其所有子进程,以防成为不可控进程
- 将进程拥有的资源归还父进程或者操作系统
- 从PCB队列或链表中移除终止进程(PCB)
引起进程终止的事件:
正常结束:表示进程的任务已经完成。准备退出运行
异常结束:是指进程在运行过程中发生某种异常,程序无法继续进行
外界干预:进程应外界请求而终止运行
-
进程的阻塞、唤醒:
(进程的阻塞和唤醒是同时出现的,有阻塞,就必须有唤醒) -
进程的切换:
2.5进程通信
进程通信是指进程之间的信息交换。由于进程的互斥和同步,需要在进程间交换一定信息。
共享存储
管道通信
消息传递
2.6线程
基本概念
线程是比进程还小的基本单位,进程的两个基本属性,1.可拥有资源的独立单位,拥有一定资源 2.可独立调度和分派的而基本单位,每个进程都有其唯一PCB 。
程序并发执行时,需要创建进程,撤销进程,切换等。创建的过程中需要分配资源,初始化PCB等,所以在程序执行,进程运行时,系统必须付出较大的时空开销,这样就限制了系统所设置的进程数目,而且进程切换不宜过于频繁。
为了能够使多个程序更好的并发执行,将进程的两个基本属性分开,由OS分开处理。