进程是可并发执行的程序在一个数据集合上的运行过程。
进程是指进程实体的运行过程。
进程和程序比较
进程更能真实地描述并发,而程序不能;
进程是由程序和数据、进程控制块PCB三部分组成的;
进程具有创建其他进程的功能,而程序没有;
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程;
进程特征
- 结构性:由程序段、数据段、进程控制块三部分组成;
- 动态性:进程是程序的执行过程;
- 并发性:多个进程可同存于内存中,能在一段时间内同时运行;
- 独立性:独立运行的基本单位,独立获得资源和调度的基本单位;
- 异步性:各进程按各自独立的不可预知的速度向前推进。
进程的状态转换
进程在生命消亡前处于且仅处于三种基本状态之一。(就绪,运行,阻塞)
就绪状态(Ready):存在于处理机调度队列中的所有进程,它们已经准备就绪,一旦得到CPU,就立即可以运行。这些进程所处的状态为就绪状态。
就绪队列:处于就绪状态的进程按一定的策略排队,同一时刻可有多个就绪队列。
运行状态(Running):正在运行的进程所处的状态为运行状态。
等待/阻塞/睡眠状态(Wait/Blocked):若一进程正在等待某一事件发生(如等待输入输出工作完成),这时,即使给它CPU,它也无法运行,称该进程处于等待状态(阻塞、 睡眠、封锁状态)。 阻塞队列:根据阻塞原因可以设置多个队列。
进程控制块
PCB来源 (Process Control Block)
为了描述一个进程和其它进程以及系统资源的关系,为了刻画一个进程在各个不同时期所处的状态,采用了一个与进程相联系的数据结构,称为进程控制块(PCB)。
PCB是OS中最重要的记录型数据结构。
PCB作用
作用是将一个不能独立运行的程序变成一个可以独立运行的基本单位,一个能与其他进程并发执行的进程。
OS利用PCB来对并发执行的进程进行控制和管理,PCB是OS感知进程存在的唯一标志。
进程与PCB是一一对应的。
PCB随进程创建而建立,随进程结束而回收。
PCB应常驻内存。
PCB的内容
进程描述信息:
- 进程标识符(process ID):唯一,通常是一个整数
- 进程名:通常基于可执行文件名(不唯一)
- 用户标识符(user ID):进程组关系
进程控制信息:
- 当前状态
- 优先级(priority)
- 代码执行入口地址
- 程序的外存地址
所拥有的资源和使用情况:
- 虚拟地址空间的现状
- 打开文件列表
CPU现场保护信息:
- 寄存器值(通用、程序计数器PC、状态字PSW,地址包括栈指针)
- 指向赋予该进程的段/页表的指针
进程控制块组织
- 链接方式
- 通常将具有相同状态进程的PCB根据PCB结构内链接指针,将进程PCB链接在一起,形成就绪队列、阻塞队列以及空闲队列。由于不同操作系统的规模和功能不同,可进一步建立若干个就绪队列和阻塞队列。
- 索引方式
- 索引方式就是根据进程的不同状态建立几个索引表,如就绪索引表、阻塞索引表、空闲表等。索引表中的每一项指示一个PCB在内存的首地址,而各索引表的起始地址存放在内存的专用指示单元中。图5.12 给出了索引方式的PCB组织。
进程控制
进程控制指对系统中的所有进程实施管理。
进程控制一般由OS的内核来实现。
OS的内核
通常将OS中一些与硬件紧密相关的模块(如:中断处理程序;各种常用设备的驱动程序)以及运行频率较高的模块(时钟管理、进程调度以及许多模块公用的一些基本操作)都安排在紧靠硬件的软件层次中,并使它们常驻内存,以提高OS 的运行效率,并对它们加以特殊的保护。这部分就是OS的内核。
内核包括功能
支撑功能
- 中断处理:内核最基本的功能。如:系统调用 进程调度等
- 时钟管理:
- 原语操作:实现进程通信和控制。
资源管理功能
- 进程管理
- 存储器管理
- 设备管理
原语(Primitive)
原语:由多条指令组成,是一种特殊的系统功能调用,它可以完成一个特定的功能。
原语的特点:
- 执行时不可中断
- 不可并发
- 在管态下执行,常驻内存
常用的进程控制原语
- 创建原语 Create
- 终止原语 Destroy
- 阻塞原语Block、唤醒原语Wakeup
- 挂起原语Suspend、激活原语Active
进程创建
- 申请空白PCB
- 为新进程分配资源 如内存
- 初始化进程控制块
- 将新进程插入就绪队列
什么事件可以引起创建进程?
- 用户登录:系统为合法用户创建进程
- 作业调度:系统为被调度作业创建进程
- 提供服务:如用户程序需打印,系统创建打印进程
- 应用请求:由应用创建进程。如某应用可创建子进程完成输入、表格输出等
进程终止
- 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB;
- 若被终止进程处于执行状态,应立即终止执行,并置调度标志为真,调度其他进程;
- 结束该进程所有子孙进程的执行,以防止成为不可控进程;
- 将进程所拥有的资源交给父进程或系统进程;
- 释放PCB 。
进程终止的事件:
- 正常结束
- 异常结束
越界错误 保护错 特权指令错 非法指令错 I/0故障 等运行超时 等待超时 算术运算错
- 外界干预
进程的阻塞与唤醒
阻塞:当一个进程所期待的某一事件尚未出现时,该进程调用阻塞原语将自己阻塞。 进程阻塞是进程自身的一种主动行为。
唤醒:处于阻塞状态的进程是绝不可能叫醒它自己的,必须由它的合作进程用唤醒原语唤醒它。
进程的挂起与激活
挂起:当出现了引起进程挂起的事件时,系统利用挂起原语将指定进程或处于阻塞状态的进程挂起。
激活:当发生激活进程的事件时,系统利用激活原语将指定进程激活。
进程的挂起事件
- 用户进程请求将自己挂起;
- 父进程请求挂起某个子进程;
- 系统利用挂起原语将指定进程或阻塞态进程挂起。
进程的激活事件
- 父进程请求激活某进程
- 用户进程请求激活某进程