操作系统2_进程管理
文章目录
1. 进程的引入
- 多道程序设计技术:多道程序同时驻留内存
- 宏观上并行运行
- 微观上串行运行
- 多道程序设计技术带来的问题
- 程序执行过程的间断性问题
- 程序执行环境的封闭性问题
- 程序执行结果的再现性问题
- 引入进程
- 描述程序的执行过程,以及分配相关资源
2. 进程概念、特征及状态
2.1 进程的概念
进程process是一个具有一定独立能力的程序在一个数据集合上的一次动态执行过程
它是系统进行资源分配和调度的基本单位
2.2 进程的特征
- 结构特征/进程映像:进程地址空间的结构划分,如:程序段、数据段、核心段、PCB等([见下3.1](### 3.1 进程组成))
- 动态性:进程具有动态的地址空间,地址中间的大小和内容都是动态变化的
- 并发性:指多个进程实体同存于内存中,且能够在一段时间内同时运行
- 独立性:各进程的地址空间相互独立,除非采用进程间通信手段,否则不能相互影响
- 异步性:指进程以各自独立的、不可预知的速度向前推进
2.3 进程的状态
进程在从创建到终止的全过程中一直处于一个不断变化的过程;为了刻画进程的这个变化过程,所有操作系统都把进程分成若干种状态,约定各种状态间的转换条件
-
三种基本状态
- 就绪状态ready:进程已获得除处理器外的所需资源,目前在等待分配处理器资源,只要分配了处理器进程就可执行
- 执行状态running:
- 用户态/目态
- 系统态/内核态/管态
- 阻塞状态blocked/等待状态/封锁状态/睡眠状态:当进程由于等待I/O操作或进程同步等条件而暂停运行时,其处于阻塞状态;在该条件满足之前,即使把处理器分配给该进程,该进程也是无法继续执行的
-
三种基本状态间的转换
- 进程调度/调度运行dispatch:从就绪进程列表中选择一个进程,进入运行状态
- 超时timeout:由于用完时间片或高优先级进程就绪等原因导致进程暂停运行
- 事件等待/等待事件event wait:进程要求的事件未出现而进入阻塞;可能的原因包括:申请系统服务或资源、通信、I/O操作等
- 事件出现event occurs:进程等待的事件出现,如:操作完成、申请成功等
-
具有挂起状态的进程状态图
3. 进程的组成及上下文
3.1 进程组成
-
程序段:进程执行时的程序代码
-
数据段:程序执行时所需要的数据
-
进程控制端PCB:进程存在的标志性数据结构
-
作用:
- 当操作系统要调度某进程执行时,要从该进程的PCB中查出其现行状态及其优先级
- 在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址找到其程序和数据
- 进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问PCB
- 当进程由于某种原因而暂停运行时,又需将其执行断点的处理机环境保存在PCB中
-
特性:
- PCB是系统感知进程存在的唯一标志
- PCB可以被操作系统中的多个模块读或修改,如:调度程序、资源分配程序、中断处理程序、监督和分析程序等
- PCB全部或部分常驻内存
- 系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区内
- PCB中包含有进程的描述信息、控制信息以及资源信息,是进程动态特有的集中反映
- 创建一个进程时首先创建其对应的PCB,当一个进程完成功能后,系统释放其PCB,进程随之消亡
- 系统根据PCB感知进程的存在,通过PCB中所包含的各项变量的变化,掌握进程所处的状态,系统通过修改PCB中相应项的值来调整进程状态和控制进程的活动
-
其中的信息:
- 进程描述信息:进程标识符process id(进程标识符用于唯一标识一个进程)
- 内部标识符:在所有的操作系统中,都为每一个进程赋予一个唯一的数字标识符,其通常是一个进程的符号;设置内部标识符主要是为了方便系统使用
- 外部标识符:由创建者提供,通常是由字母、数字组成,往往是由用户/进程在访问该进程时使用;进程名通常是可执行文件名
- 用户标识user id:以指示拥有该进程的用户
- 进程组process group
- 处理机状态信息:主要是由处理机的各种寄存器中的内容组成的
- 通用寄存器/用户可视寄存器:是用户程序可以访问的,用于暂存信息,在大多数处理机中,有8-32个通用寄存器,在RISC结构的计算机中可超过100个
- 指令寄存器:其中存放了要访问的下一条指令的地址
- 程序状态字PSW:含有状态信息,如:条件码、执行方式、中断屏蔽标志等
- 用户栈指针:指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址;栈指针指向该栈的栈顶
- 进程调度信息:一些与进程调度和进程对换有关的信息
- 进程状态:指明进程的当前状态,作为进程调度和对换时的依据
- 进程优先级:用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机
- 进程调度所需的其他信息:与所采用的进程调度算法有关,如:进程已等待CPU的时间总和、进程已执行的时间总和等
- 事件:是指进程由执行状态转变为阻塞状态所等待发生的时间,即阻塞原因
- 进程控制信息
- 程序和数据的地址:是指进程的程序和数据所在的内存或外存地/首址,以便再调度到该进程执行时,能从PCB中找到其程序和数据
- 进程同步和通信机制:指实现进程同步和进程通信时必须的机制,如:消息队列指针、信号量等,其可能全部或部分地放在PCB中
- 资源清单:是一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的列表
- 链接指针:给出了本进程PCB所在队列中的下一个进程的PCB的首地址
- 进程描述信息:进程标识符process id(进程标识符用于唯一标识一个进程)
-
PCB链表:
-
进程控制块的索引:
-
3.2 进程上下文
- 进程上下文的定义:进程执行活动全过程的静态描述
- 进程上下文的内容:
- 进程的用户地址空间内容
- 正文段
- 数据集
- 堆栈
- 处理器中寄存器内容
- 该进程相关的核心数据结构
- 进程的用户地址空间内容
- 进程上下文的分类:
- 用户级上下文:
- 用户正文段
- 用户数据段
- 用户栈
- 寄存器级上下文:
- 程序寄存器
- 处理器状态寄存器
- 栈指针
- 通用寄存器的值
- 系统级上下文:
- 进程的静态部分(PCB和资源表格)
- 由核心栈等构成的动态部分
- 用户级上下文:
3.3 进程空间
- 进程空间的定义:进程中所有能使用的地址集合
- 所有程序的执行都在自己的进程空间中进行
- 用户程序、进程的各种控制表格都按一定结构排列在进程空间中
- 进程空间的大小:进程空间的大小与处理机中指令的地址长度有关
- 分类:
- 用户空间(用户程序)
- 系统空间(系统程序)
4. 进程的创建与撤销
4.1 创建进程
- 进程的创建者
- 由系统程序创建
- 由父进程创建
- 创建进程时机(引起进程创建的事件)
- 用户登录
- 作业调度
- 提供服务
- 应用请求
- 进程创建过程
- 申请空白PCB
- 为新进程分配资源
- 初始化进程控制块
- 将新进程插入就绪队列
4.2 撤销进程
- 引起进程终止的事件/时机
- 正常结束
- 异常结束
- 越界错误、保护错误、非法指令、特权指令错误
- 运行超时、等待超时、算术运算错误、I/O故障
- 外界干预
- 操作员或操作系统干预
- 父进程请求
- 父进程终止
- 进程终止方式(谁来终止进程)
- 由操作系统终止进程
- 由进程向操作系统发出终止请求,终止进程
- 进程的终止过程
- 根据被终止的进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态
- 若该进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度
- 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程
- 将被终止进程所拥有的全部资源,或归还给其父进程,或归还给系统
- 将被终止进程(其PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息
5. 进程的阻塞和唤醒
- 引起程序阻塞的事件
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可做
- 进程阻塞过程
- 保存当前进程的CPU现场
- 将其状态修改为等待状态
- 将其PCB插入对应的等待队列
- 转调度程序进行重新调度
- 进程唤醒过程
- 根据唤醒原因,从对应的等待队列中摘下一个PCB
- 将其状态修改为就绪状态
- 将其PCB插入就绪队列
- 转进程调度程序或返回
6. 进程的挂起与激活
- 进程的挂起过程
- 首先检查被挂起进程的状态,若处于活动就绪状态,则将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞
- 把该进程的PCB复制到指定的内存区域
- 若被挂起的程序正在执行,则转向调度程序重新调度
- 进程的激活过程
- 将进程从外存调入内存
- 检查该进程的现行状态
- 若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞
7. 进程与程序的关系
- 进程
- 动态性
- 代码的执行过程
- 不可迁移
- 暂时性
- 组成内容不同
- 进程可以创建其它进程
- 程序
- 静态性
- 代码的集合
- 可迁移
- 永久性
- 对应关系
- 程序不能创建新的程序
8. 进程的执行方式
8.1 顺序执行
- 什么是顺序执行
- 操作系统依次执行各程序,在一个程序的整个执行过程中该程序执行占用所有系统资源,不会中途暂停
- 顺序执行是单道批处理系统的执行方式,也用于简单的单片机系统
- 顺序执行的特征
- 顺序性
- 封闭性
- 可再现性
- 结果正确性
8.2 并发执行
-
什么是并发执行
- 一组在逻辑上相互独立的程序或程序段,在执行过程中,其执行时间在宏观上(时间段)相互重叠
- 指从宏观上看,在一段时间内有多个程序处于运行状态
-
并发执行的特征
- 独立性:每道程序逻辑上完全独立,不存在相互制约的关系
- 随机性:程序的开始执行、输入输出、完成时间都是随机的
- 资源共享:系统内的所有资源都是被所有并发进程共享,正是由于资源共享,导致了对程序推进速度的制约
-
并发执行带来的影响
- 提高了系统处理能力和系统资源的利用率
- 会导致系统资源的共享与竞争,从而影响程序的推进速度
- 为操作系统和用户程序开发带来一定的难度
-
并发执行带来的问题
- 间断/异步性
- 失去封闭性
- 失去可再观性
-
顺序执行与并发执行的对比
顺序执行 并发执行 程序与执行对应关系 一一对应 一个程序可对应多个执行 封闭性 独占资源,具有封闭性 共享资源,不具有封闭性 确定性 有 无 可再观性 有 无 程序间制约关系 无 有间接制约或者直接制约关系([ 见下9.1 与互斥相关的概念 ](### 9.1 与互斥相关的概念))
8.3 并行执行
并行执行的含义:一组在逻辑上相互独立的程序或程序段在同一时刻(时间点)同时执行
9. 进程的互斥
9.1 与互斥相关的概念
- 间接制约:由共享共有资源而造成的对并发进程执行速度的制约
- 直接制约:一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程
- 临界资源:在一段时间内只允许一个进程使用的资源
- 临界区:每个进程中访问临界资源的那段程序代码
9.2 互斥的概念及特征
- 什么是互斥
- 互斥是并发执行的多个进程由于竞争同一资源而产生的相互排斥的关系
- 不允许两个以上的共享某资源的并发进程同时进入临界区
- 互斥的特征
- 互斥进程彼此在逻辑上是完全无关的
- 它们的运行不具有时间次序的特征
9.3 互斥遵循的规则
- 空闲让进:当临界区无进程时,说明临界资源空闲,应允许某个请求进程进入自己的临界区
- 忙则等待:当已有进程进入临界区时,说明临界资源正被访问,其他视图进入临界区的进程必须等待,以保证互斥访问临界资源
- 有限等待