操作系统理论知识:进程
目录
一、进程概念
1、顺序与并发
程序的顺序执行(单道单线程批处理)
(1)一个具有独立功能的程序独占处理机直至最终结束的过程。
(2)顺序执行的特征:
- 顺序性:只有前一个操作结束才能执行后续操作;
- 封闭性:程序运行时独占全机资源,执行过程不受外界影响;
- 可再现性:结果与执行速度无关;
(3)符合现代计算机的冯诺依曼体系结构的要求(即程序的代码和数据存储在内存,指令按顺序执行)
程序的并发执行(多道批处理,单道多线程批处理)
(1)指一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在宏观上互相重叠,一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。
(2)与计算机的冯诺依曼体系结构的要求相悖(指令按顺序执行)。
(3)程序并发执行的特征:
- 间断性:程序的执行可被中断,转而执行其他程序;
- 失去封闭性:一个程序的执行受到其他程序的影响;
- 不可再现性:程序执行的结果与其执行的相对速度有关,是不确定的;
(4)优点:充分利用系统资源,提高系统处理能力;
(5)缺点:引起互斥、同步、死锁、饥饿等问题;
(6)现代计算机系统的并发是以时间片为基础的,在很短的时间内每个进程都分别运行一次。
2、进程
进程描述:
- 进程是程序在一个数据集上的运行过程,是系统进行资源分配和调度的一个独立单位;
- 操作系统是资源管理者,而进程是资源分配的对象;
- 操作系统把进程和系统资源当作实体,构成且维护每一个被管理的实体的信息表;
进程的特征:
- 动态性:有一定的生命周期;
- 并发性:多个进程实体同时存在于内存中,能在一段时间内(不一定是同一时刻)同时运行;
- 独立性:进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位;
- 异步性:进程按各自独立的、不可预知的速度向前推进(即按异步方式运行);
- 结构特征:进程实体是由程序段、数据段以及进程控制块等部分组成——称为进程映像(process image);
- 进程控制块是描述进程的数据结构;
进程控制块PCB
(1)用于描述进程且进行进程的管理和调度;
(2)进程控制块为下述信息的列表:
- 标识符:唯一的进程ID/父进程标识符/用户标识符;
- 状态:进程当前的状态;
- 优先级:相对于其他进程的优先级别;
- 程序计数器:即将被执行的下一条程序指令的地址;
- 内存指针:包括执行程序代码、相关数据和共享内存的指针;
- 上下文数据:进程被中断时处理器寄存器中的数据;
- I/O状态信息;
- 记账信息;
(3)PCB的组织方式有链接方式(同一状态的进程的PCB组成一个链表,多个状态对应多个不同的链表)和索引方式(同一状态的进程的PCB归入一个索引表,多个状态对应多个不同的索引表)。
进程映像
进程映像是进程的物理表示:
- 用户数据和用户程序;
- 系统栈(跟踪过程调用和过程间参数传递);
- 进程控制块(PCB)——由OS维护的用于记录和控制进程属性的集合;
进程映像的位置取决于OS采用的存储管理方案,可以是:
- 整体在连续或不连续的主存区域中;
- 部分在主存中,主体在连续的辅存区域中;(映像只要被挂起则不在内存中)
进程的状态
(1)两状态模型:运行态、未运行态;
(2)三状态模型:运行态、就绪态、等待/阻塞态;这是进程的三个基本状态;
(3)五状态模型:运行态、就绪态、等待态/阻塞态、新建态、退出态;
(下图的超时是指进程用完了处理器可分配给它的时间)
(
4)六/七状态模型:一种有挂起状态的进程模型。为了节省内存,可将部分处于阻塞态(和就绪态)的进程从内存换出到磁盘的挂起队列中。为此增加进程的一个/两个挂起态(suspend state):阻塞挂起态/就绪挂起态。
进程的创建和终止
(1)操作系统创建一个进程需要:
- 建立管理进程的数据结构(PCB)——申请空白PCB;
- 为进程分配内存空间——为新进程分配资源;
- 创建进程映像——包括初始化PCB,根据进程创建要求和已有信息填充PCB;
- 将进程插入就绪队列;
(2)导致进程创建的原因:
- 新的批处理作业——运行新程序;
- 交互登录——终端用户登录到系统(多用户操作系统);
- OS提供服务——操作系统为用户创建进程以提供服务(如控制打印机);
- 进程派生(process spawning)——指操作系统为一进程显式请求创建新进程(由现有进程创建若干新进程);
(3)进程终止的操作:进程的终止由操作系统执行,操作系统会调用进程终止原语来终止对应的进程
- 根据进程ID从PCB集合中检索出该进程PCB;
- 若进程为运行状态则终止其运行,若进程有子进程则终止所有子进程;
- 将进程拥有的资源归还给系统,若进程为子进程则归还给父进程;
- 将进程PCB从所在列表中移除(就绪列表、阻塞列表)
进程阻塞
进程的阻塞是由进程自身主动执行的,当进程发现自身无法继续执行时会主动调用进程阻塞原语阻塞自己。
- 进程停止执行;
- 将进程状态改为阻塞态并将PCB插入阻塞队列;
- 在PCB中保留进程阻塞前的处理状态信息;
- 让调度程序重新调度;
进程唤醒
进程的唤醒通常由其他进程执行,当其他进程由于某些事件希望执行某一个进程时则会调用进程唤醒原语将指定进程唤醒。阻塞的进程必须有进程唤醒操作才能继续执行。
- 将进程PCB从阻塞队列中移除;
- 将进程状态从阻塞态改为就绪态;
- 将PCB插入就绪队列中;
进程的挂起
(1)挂起的原因:
- 实存不足:没有使用虚存的系统中多个进程完全进入主存导致内存不足;
- CPU时间浪费:I/O速度比计算速度慢很多,可能出现主存中多个进程全部阻塞等待I/O的情况;
- 调度策略:其他作业因没有主存空间不能投入运行;(进程需要有主存空间才能运行)
(2)交换(swapping)
进程映像整体地或部分地从主存转移到辅存中(换出),或从辅存转移到主存中(换入)。
交换是一种I/O操作,过于频繁的交换可能会导致系统整体性能的恶化。
进程的切换
- 保护处理器的上下文环境;
- 更新当前处于运行态进程PCB的控制信息(修改状态);
- 该进程PCB插入相应队列;
- 选择一个就绪进程;
- 更新所选进程的PCB;
- 更新存储管理数据结构(涉及地址转换);
- 恢复被选中的进程的处理器上下文;
两类进程
- 系统进程是实现操作系统功能的进程;
- 用户进程是完成用户功能的进程;
- 系统进程可以运行在用户态。
3、原语(primitive)
进程控制由原语实现。
(1)原语是由若干条指令构成、在系统模式下执行,用于完成一定功能的一个过程;
(2)原语是原子操作(atomic operation),即一个操作中的所有动作要么全做要么全不做,是一个不可分割的操作。
(3)两种类型的原语:都在系统模式下执行。
- 机器指令:执行期间不允许中断;
- 功能型:作为原语的程序段不允许并发执行;
4、执行模式
两类指令
- 特权指令(privileged instruction):允许操作系统使用,不允许一般用户使用;
- 非特权指令:操作系统和用户均可用;
两种执行模式(CPU状态)
- 用户模式/目标状态/非管态:只能执行非特权指令,用户程序在用户模式下运行;
- 系统模式/内核模式/监管状态(supervisory state):能执行指令全集,具有改变CPU执行状态的能力;操作系统在系统模式下运行。
模式切换
(1) 用户模式切换到系统模式:唯一途径是通过中断机制;发生模式切换可以不改变当前处于运行态的进程的状态(只要调用了非系统中断即可,因为调用系统中断会使得进程进入阻塞态)。
(2)系统模式切换到用户模式:可以通过修改程序状态字PSW中的“模式标识位”实现;
(3)CPU响应中断时:
- 保存当前正在执行的程序的上下文环境;
- 把程序计数器置成中断处理程序的开始地址;
- 从用户模式切换到内核模式,使得中断处理代码可以执行特权指令;(故中断会引发模式切换,但不一定引发进程切换)
内核
内核是OS中包含重要系统功能的部分,通常驻留主存,在系统模式下运行,响应进程的调用和设备的中断。
内核的典型功能:
- 进程管理:进程的创建、撤销、调度、切换、同步和通信以及PCB的管理等;
- 存储管理:给进程分配空间、交换、管理页和段;
- I/O管理:缓冲区管理、给进程分配I/O通道和设备;
- 支持功能:中断处理;
内核的设计:
(1)非进程内核:传统方法,利用中断实现;
- 在此内核下进程概念仅适用于用户程序;
- OS代码是在特权模式下工作的独立实体,不是进程,不参与进程调度;
(2)在用户进程中执行:
- OS是用户进程调用的一组例程,OS代码为所有进程映像共享(提供可被调用的接口);
- 执行OS代码时切换到系统模式;
(3)基于进程的OS:
- 主要内核功能被组织成独立进程;
- 适合多处理器和多机环境;
- 可以分为用户进程和系统进程;
分层内核(宏/单体内核):
- 所有功能按层次组织,只在相邻层之间发生交互。
- 相邻层之间有很多交互,难以确保安全性。
微内核:
- 基本思想:只有最基本的OS功能放在内核中,运行在内核模式下,不是最基本的服务和应用则放在内核外,运行在用户模式
- 三种操作:授权、映射、刷新。
- 微内核的系统进程之间不能互相调用。安全性更高。