chapter1-进程管理
1 进程概述
1.1 进程的定义,组成及组织方式
(1)定义
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
(2)组成
- 进程由PCB(程序控制块),程序段(存放要执行的程序代码)和数据段(存放程序运行过程中处理的各种数据)组成
(3)组织方式
-
进程的组织方式分为链接方式和索引方式
-
链接方式:按进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针
-
索引方式:按照进程状态建立几张索引表,各表项指向一个PCB,操作系统持有指向各个索引表的指针
1.2 进程的特征
- 动态性:进程是程序的一次执行过程,是动态地产生,变化和消亡的
- 并发性:内存中有多个进程实体,各进程可并发执行
- 独立性:进程是系统进行资源分配,调度的独立单位
- 异步性:各进程以不可预知的速度向前推进,可能导致运行结果的不确定性
- 结构性:每个进程都会配置一个PCB。从结构上看,进程由程序段,数据段,PCB组成
2 进程的状态与转换
3 PCB
3.1 PCB的概念?
- 为了便于系统描述和管理进程的运行,在OS的核心为每个进程专门定义了一个数据结构——进程控制块PCB(Process Control Block)。
- PCB作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。
- PCB存在的意义是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
3.2 PCB的内容?
- 进程的描述信息,比如进程的名称,标识符
- 处理机的状态信息,当程序中断时保留此时的状态信息,以便CPU返回时能从断点开始执行
- 进程的调度信息,比如阻塞原因,状态,优先级等
- 进程控制和资源占用信息,同步通信机制以及链接指针信息(指向队列中下一个进程的PCB地址)
PCB中包含的具体信息
3.3 PCB的作用?
- 配置PCB是一个程序成为***独立运行基本单元***的标志。当一个程序(含数据)配置了PCB后,就表示它已经是一个能在多道程序环境下独立运行的、合法的基本单位,也就具有取得OS服务的权力,如打开文件系统中的文件,请求获得系统中的I/O设备,以及与其它相关进程的进行通信等。因此,当系统创建一个新进程时,就为它建立了一个PCB。进程结束时又回收其PCB,进程于是也随之消亡。系统是通过PCB感知进程的存在的。事实上,PCB已成为进程存在于系统中的唯一标志。
- PCB保存了进程的中断信息。在多道程序环境下,程序是采用停停走走间断性的运行方式运行的。当进程因阻塞而暂停运行时,它必须保留自己运行时的CPU现场信息。在有了PCB后,系统就可以将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调度执行时恢复CPU现场时使用。由此,可再次明确,在多道程序环境下,作为传统意义上的静态程序,因其并不具有保护或保存自己运行现场的手段,无法保证其运行结果的可再现性,从而失去运行的意义。
- PCB提供进程管理所需要的信息。当调度程序调度到某进程运行时,只能根据该进程PCB中记录的程序和数据在内存或外存中的始址指针,找到相应的程序和数据;在进程运行过程中,当需要访问文件系统中的文件或I/O设备时,也都需要借助于PCB中的信息。另外,还可根据PCB中的资源清单了解到该进程所需的全部资源等。可见,在进程的整个生命周期中,操作系统总是根据PCB实施对进程的控制和管理。
- PCB提供进程调度所需要的信息。只有处于就绪状态的进程才能被调度执行,而在PCB中就提供了进程出于何种状态的信息。如果进程处于就绪状态,系统便将它插入到进程就绪队列中,等待着调度程序的调度;另外在进行调度时往往还需要了解进程的其他信息,如在优先级调度算法中,就需要知道进程的优先级。在有些较为公平的调度算法中,还需要知道进程的等待时间和已执行过的事件等。
- PCB实现与其他进程的同步与通信。进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量。在PCB中还具有用于实现进程通信的区域或通信队列指针等。
4 进程控制
4.1 进程的创建与撤销
4.1.1 创建新进程的场合
- 创建新进程包括为进程分配必要的资源,建立操作系统用于管理进程的数据结构(如进程控制块)等操作。通常在一线情况下需要创建新进程。
- 用户登录。在交互式系统中,当一个新用户登录系统时会创建进程
- 作业调度。当把位于外存储器中的作业调入内存准备运行时,操作系统会为作业的运行创建进程
- 提供服务。操作系统可以创建一个进程,代表用户程序执行某种功能,使用户无需等待。例如,用户请求打印一个文件,操作系统可以创建一个管理打印的进程,进而可以是请求进程继续执行,与完成打印任务的时间无关。
- 应用请求。当用户发出执行某程序的命令或者用于程序在执行中基于并行的要求在程序中显示调用进程创建的系统调用时,都会引起进程的创建。
注意:在Linux系统中,除了0号进程(swapper进程)外的其他进程都是有其父进程创建的。在错做系统启动并正常工作后,系统中的已有进程在执行过程中都可以通过系统调用创建新进程。被创建的新进程成为创建该新进程的进程的子进程,一个进程可以创建多个子进程,由同一个进程创建的多个子进程之间的关系称之为兄弟进程。系统中所有的进程通过父子关系和兄弟关系被组织成一棵进程树。
-
当新进程创建时,有两种执行可能。
1)父进程与子进程并发执行
2)父进程等待,直到某个或全部子进程执行完毕 -
新进程的地址空间也有两种可能。
1)子进程共享父进程的地址空间
2)子进程拥有独立的地址空间
4.1.2 创建新进程的步骤
通过系统调用创建新进程的一般步骤如下:
1 申请空白PCB
2 为新进程分配资源
3 初始化进程控制块
4 将新进程插入就绪队列
4.2进程的阻塞与唤醒
4.2.1 进程阻塞和唤醒操作场合
- 操作系统在以下几种情况下可能需要进行进程的阻塞和唤醒操作。
1)请求系统服务。例如 打印服务,进程在提出打印请求后,系统创建打印服务进程为该进程服务,而提出打印请求的进程可能被阻塞起来等待打印的完成。
2)启动某种操作。例如,进程发出启动 i/o 或启动打印机的命令后,等待启动完成时处于阻塞状态
3)新数据尚未到达。对于一个计算进程,如果新的输入数据还没有到达,计算进程需要阻塞等待。
4)无新工作可做。发送消息之后等待时。
4.2.2 进程阻塞的过程
-
完成进程阻塞的简化过程如下。
1)将进程的状态改为阻塞态。
2)将进程插入相应的阻塞队列。
3)转进程调度程序,从就绪进程中选择进程为其分配CPU。处于执行态的进程被阻塞后,CPU空闲,需要执行进程调度程序,从就绪态进程中为CPU选择一个进程运行。
4.2.3 进程的唤醒
- 操作系统通过下列过程将阻塞态进程唤醒,使其变成就绪态进程。进程唤醒的过程如下。
1)将进程从阻塞队列中移出。
2)将进程状态由阻塞态改为就绪态。
3)将进程插入就绪队列。
4.2.4 进程的终止
- 进程的终止也称进程的撤销,在下列情况下,进程会被终止。
1)当进程正常执行完毕,调用终止进程的系统调用,请求操作系统删除该进程。
2)一个进程调用适当的系统调用,终止另外一个进程。通常操作系统规定只允许父进程通过这种方式终止其子进程。 - 父进程终止其子进程的原因
1)子进程使用了超过它所分配到的一些资源。
2)分配给子进程的任务已不再需要。
3)父进程退出,如果父进程终止,那么操作系统会自动终止其子进程。对于这类系统,如果一个进程终止,那么它的所有子进程也被终止,这种现象称为级联终止,通常是由操作系统进行的。在Unix系统中,如果父进程终止,那么其他所有子进程将以init进程作为它们新的父进程。因此,子进程仍然有父进程可以收集它们的状态和执行统计。 - 操作系统通过系统调用完成进程终止的一般过程如下
1)从进程PCB中读进程状态。
2)若进程正在执行,则终止进程的执行。
3)若进程有子孙进程,在大多数情况下需要终止子孙进程。
4)释放资源。
5)将终止进程的PCB移出。
5 操作系统的启动和系统中进程的出现
- 当打开计算机电源后,计算机会先进行加电自检,然后寻找启动盘。如果是选择硬盘启动,计算机会检查硬盘的 0 柱面 0 磁道 1 扇区。如果发现该扇区以OxAA55结束,则BIOS认为它是引导扇区,一旦发现引导扇区,BIOS会执行程序将其装入到内存地址0000:7c00处,然后跳转到该地址处执行这段引导程序代码,开始加载操作系统。
- 当硬盘被划分为多个分区,同时安装了多个操作系统时,么个分区都有自己的引导扇区,但是整个硬盘有一个主引导扇区,主引导扇区就是硬盘的 0 柱面 0 磁道 1 扇区。通过执行主引导扇区的代码,判断当前被激活的分区,然后加载被激活分区的引导扇区,通过该引导扇区代码的执行加载该激活分区的操作系统。