@ 操作系统 胡元义 第二章 处理器管理
第二章 处理器管理
2.1 进程的概念
2.1.1 程序的顺序执行
- 程序的顺序执行:一个具有独立功能的程序独占CPU运行,直到获得最终结果的过程
- 程序的顺序执行的特点
- 顺序性:程序的各部分都能按照程序所规定的逻辑次序顺序的运行
- 封闭性:程序一旦开始运行,其运行结果只取决于程序本身,除人为改变计算机运行状态或发生机器故障外,不受外界因素的影响
- 可再现性:当同一个程序以相同的初始条件重复执行时,都将获得相同的计算结果
2.1.2 程序的并发执行
- 程序的并发执行:多个程序在单个CPU上交替执行
- 程序的并发执行实质上是程序间的并发,CPU与io设备之间的并行
- 多道程序的并发执行:多个程序在宏观上并行,微观上串行
- 程序的顺序执行的特点
- 间断性
- 失去了封闭性
- 不可再现性
2.1.3 进程
- 进程是一个可并发执行的、具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和调度的基本单位
- 进程控制块(PCB):用来存储程序向前推进的执行过程中所要记录的有关运行信息
- 进程实体=程序段+相关数据段+PCB
- 进程的特征:
- 动态性
- 并发性
- 异步性
- 结构性
- 进程与程序的区别
- 程序是指令的有序集合,是一个静态的概念,其本身没有任何运行的含义;进程是程序在CPU上的一次执行过程,是一个动态的概念。
- 程序作为软件资料可以长期保存;而进程则有生命期,它因创建而诞生,因调度而执行,因得不到资源而暂停执行,因撤销而消亡。
- 进程是一个独立运行的基本单位,也是系统进行资源分配和调度的基本单位:而程序作为静态文本既不运行,也不分配和调度。
- 进程与程序之间无一一对应关系。既然进程是程序的一次执行,那么一个程序的多次执行可以产生多个进程,而不同的进程也可以包含同一个程序。
- 程序是记录在介质(如磁盘). 上指令的有序集合,而进程则由程序段、数据段和PCB这三部分组成。
2.2 进程的状态及转换
2.2.1 两状态进程模型
- 运行(Running)和非运行(Not-running)
- 两状态进程模型(P53)
2.2.2 进程的三态模型
- 运行(Running)、就绪(Ready)和阻塞(Blocked)
- 三状态模型(P54)
2.2.3 进程的五态模型
- 创建、运行(Running)、就绪(Ready)和阻塞(Blocked)、终止
- 五状态模型(P56)
2.2.4 进程的挂起
- 挂起状态的引入
- 进程挂起:在内存中的进程被暂时移出保存到外存中(如磁盘)的过程
- 引起进程挂起的原因:1.用户请求。2.父进程的请求。3.操作系统的原因(交换、出现问题或故障、操作系统的需要)。
- 具有挂起状态的进程状态转换(P57)
2.2.5 进程控制块
- 进程控制块(进程存在的唯一标志):一种能够描述和控制进程运行的数据结构
- 进程控制块中的信息(多数操作系统都包含的)
- 进程标识符
- 进程的当前状态
- 进程中的程序段与数据段地址
- 进程资源清单
- 进程优先级
- CPU保护现场
- 进程同步与通信机制
- pcb队列指针或链接字
- 与进程相关的其他信息
- 进程控制块的组织方式
- 线性表方式
- 链接表方式
- 索引表方式
2.3 进程控制
进程具有由创建而产生的、被调度而执行、因撤销而消亡的生命周期。因此操作系统要有对进程生命周期的各个环节进行控制的功能,这就是进程控制。
2.3.1 进程切换
进程切换的实质是回收当前进程对CPU的控制权,并将CPU控制权转交给新调度的就绪进程。
- 进程上下文:进程运行时,CPU所有寄存器中的内容、进程的状态以及运行栈中的内容
- 系统级上下文
- 寄存器上下文
- 用户级上下文
- 进程切换的时机(中断)
- 中断
- 异常
- 系统调用
- 进程上下文的切换(步骤)
- 当前运行进程(旧进程)被中断时,保存其CPU现场信息。
- 对被中断的当前运行进程进行PCB更新,包括改变进程状态和其他相关信息。
- 将被中断的当前运行进程的PCB移入适当的队列(因时间片到则移入进程就绪队列,因某事件发生则移入相应的进程阻塞队列)。
- 由进程调度程序选中一个就绪进程(新进程),为其设置执行的上下文环境并对其PCB进行更新。
- 修改新进程的地址空间,更新新进程的内存管理信息。
- 恢复被选中的新进程最后一次进程 上下文切换时所保存的CPU现场信息。
2.3.2 进程控制原语
- 原语(广义指令):一个特殊的程序段(具有原子性),要么全部执行,要么全部不执行
- 进程的创建原语
- 进程的撤销原语
- 进程的阻塞原语
- 进程的唤醒原语
- 进程的挂起原语和激活原语
2.4 处理器调度
CPU调度主要涉及作业调度和进程调度
2.4.1 作业与进程的关系
- 作业与进程的区别
- 作业是用户向计算机提交任务的任务实体。
- 一个作业可以由多个作业步组成,即同时对应多个进程,并且至少由一个进程组
- 作业的概念主要用在批处理系统中,如UNIX这样的分时系统中就没有作业的概念
- 作业调度的主要功能是检查系统是否满足作业的资源要求,以及按照一定的算法来把外存后备作业队列中的作业调入内存,为其创建进程并插入到进程就绪队列等待进程调度。进程调度则是根据一定的算法把 CPU分配给进程就绪队列中的某个进程并让其执行。
- 批处理作业与进程的关系
- 一个批处理作业从预输入到缓输出的四种状态
- 提交状态
- 后备状态
- 执行状态
- 完成状态
- 一个批处理作业从预输入到缓输出的四种状态
- 分时系统中作业与进程关系
2.4.2 CPU的三级调度(P68)
- 高级调度(作业调度/宏观调度)
- 选择作业
- 分配资源
- 创建进程
- 作业控制
- 回收资源
- 中级调度(交换调度)
- 低级调度(进程调度/微观调度)
2.4.3 处理器调度队列模型(常用)
- 仅有进程调度的调度队列模型(分时系统)
- 进程运行完成时
- 时间片到
- 发生等待事件
- 具有高级和低级调度的调度队列模型(多道批处理系统)
- 同时具有三级调度的调度队列模型(同时具有分时系统和多道批处理系统)
2.4.4 进程调度的方式和时机
- 进程调度的方式
- 非抢占式调度
- 抢占式调度
- 高优先级原则
- 时间片原则
- 进程调度的时机
- 创建一个新进程后(父进程先还是子进程先)
- 运行进程终止
- 运行进程阻塞
- 支持抢占式调度的系统
- 时间片到
- 进程的优先级发生变化
- 现代操作系统在以下三种情况不允许进程的调度和切换
- 中断处理过程中
- 进程在操作系统内核的临界区中
- 在需要完全屏蔽中断的原子操作执行过程中
- 进程调度的实现
- 保存当前运行进程的现场信息
- 选择即将运行的进程
- 为新选择的进程恢复现场
2.5 单处理调度算法
2.5.1 调度原则
- 面向系统的准则
- 吞吐量
- CPU利用率
- 系统资源平衡利用
- 公平性
- 面向用户的准则
- 周转时间(带权周转时间/平均周转时间)
- 响应时间
- 截止时间
- 优先权准则
2.5.2 常用调度算法
- 先来先服务调度算法(FCFS)
- 优点:实现简单,公平性
- 缺点:没有考虑作业的类型或进程/线程执行时间的长短,使得短作业或I/O型进程等待时间过长
- 短作业/短进程优点调度算法(SJF/SPF)
- 优点:有效降低作业/进程的平均等待时间,提高系统的吞吐量
- 缺点:长作业或长进程因长期得不到调度而出现饥饿现象,用户提供的估计运行时间不准确
- 时间片轮转调度算法(RR)
- 高响应比优先调度算法(HRRF)
- 优先级调度算法
- 多级反馈队列调度算法(MLFQ)
2.5.3 实时调度
- 基本要求:保证计算机在规定的时间内对外部事件的请求作出相应
- 实时调度与非实时调度的区别
- 实时调度所调度的任务有完成时限,而非实时调度则没有
- 实时调度要求有较快的进程/线程切换时间,而非实时调度的进程/线程切换时间较长
- 非实时调度强调资源利用率(批处理系统)或用户共享CPU (分时系统),实时调度则主要强调在规定的时限范围内完成对相应对象的控制。
- 实时调度为抢占式调度,而非实时调度除分时系统外则很少采用抢占式调度。
- 实时任务
- 硬实时任务、软实时任务(根据截至时间的要求)
- 周期性实时任务、非周期性实时任务(是否具有周期性)
2.6 线程
线程的引入
将进程所承担的两个角色由操作系统分开
2.6.2 线程的概念
- 线程的概念
- 进程内的一个执行单元
- 进程内一个课独立的调度单元
- 线程是进程中一个相对独立的控制流序列
- 线程是执行的上下文
- 线程的属性
- 线程属于轻型实体
- 线程是独立地调度和分配的基本单位,也是能够独立运行的基本单位
- 同一个进程中的所有线程共享该进程所拥有的全部资源
- 线程并发执行程度高,不但同一个进程内部的多个线程可以并发执行,不同进程的多个线程也可以并发执行
- 线程不是拥有资源的基本单位
2.6.3 线程与传统进程的比较
- 线程也叫轻量级进程,传统进程也称重量级进程
- 相似
- 二者都有标识符
- 进程有一个进程控制块(PCB),线程也有一个线程控制块(TCB)
- 进程中的线程共享该进程的资源,子进程也共享父进程的资源,线程和子进程的创建者都可以对线程和子进程实施某些控制
- 差异
- 传统进程除是调度和分派的基本单位外,还是资源分配的基本单位。而在引入线程的操作系统中,线程只是调度和分派的基本单位
- 在引入线程的系统中,不仅同一个进程中的多个线程可以并发执行,而且属于不同进程中的多个线程也可以并发执行(也称为进程并发执行),线程并发执行的程度高于传统进程并发执行的程度
- 创建和撤销一个线程所花费的时空开销远小于创建和撤销一个传统进程所花费的时空开销
- 传统进程是系统资源分配的基本单位,而线程基本不拥有资源
- 由于不同进程具有各自独立的数据空间,因此要进行数据传递只能通过通信方进行,这种方式相对费时而且不方便。但在多线程操作系统中,一个进程的数据空间被该进程的所有线程所共享,一个线程的数据可以直接被属于同一个进程的其他线程所使用,因此数据传递既方便又快捷
2.6.4 线程实现原理
- 用户态实现
- 优点:灵活,线程切换快
- 缺点:需要修改操作系统、违反了软件应遵守的层次架构原则
- 内核态
- 优点:编程简单、如果一个线程受阻,可以很从容的调度另一个线程
- 缺点:效率低
- 混合式线程实现
- 用户态的执行系统线程负责内部线程的非阻塞时的切换
- 内核态的操作系统则负责阻塞线程的切换