基础概念
操作系统引论
操作系统的目标
- 方便性
- 有效性
- 开放性
- 可扩充性
操作系统的作用
- 用户与计算机硬件系统之间的接口
- 计算机资源的管理者
- 扩充裸机资源的软件
- 计算机工作流程的组织者
单道批处理系统
- 自动性
- 顺序性
- 单道性
多道批处理系统
- 多道性
- 调度性
- 无序性
分时系统
- 多路性
- 独立性
- 及时性
- 交互性
操作系统的基本特征
- 并发(最重要的特征)
- 共享(和并发同为操作系统最基本的特征,二者互为存在的条件)
- 虚拟(以并发和共享为前提)
- 异步(并发和共享的必然结果)
操作系统的功能
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
- 提供友好的用户接口
处理机管理
主要是对处理机的分配和运行进行管理
- 进程控制
- 进程同步
- 进程通信
- 进程调度
存储器管理
主要是对多道程序的运行提供良好的环境
- 内存分配
- 内存保护
- 地址映射
- 内存扩充
设备管理
主要是完成用户的I/O请求
- 缓冲管理
- 设备分配
- 设备处理
文件管理
主要是使用户能方便、安全地使用各种信息资源
- 文件存储空间的管理
- 目录管理
- 文件的读写管理和保护
提供友好的用户接口
主要是方便用户使用计算机
- 命令接口
- 程序接口
- 图形用户接口
操作系统的结构设计
- 整体式系统
- 模块化结构
- 分层式结构
- 微内核结构
进程管理
程序的顺序执行
- 顺序性
- 封闭性
- 可再现性
程序的并发执行
- 间断性
- 失去封闭性
- 不可再现性
进程
引入进程的目的是为了使程序正确地并发执行
特征:
1. 结构特征
2. 动态性
3. 并发性
4. 独立性
5. 异步性
定义:
1. 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
2. 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程控制块
通常包含下列信息:
1. 进程标识符
2. 处理机状态
3. 进程调度和控制信息
PCB的常用组织形式:链接方式和索引和方式。
进程同步
基本概念
- 临界资源:一次仅允许一个进程访问的资源
- 临界区:访问临界资源的那段代码
用来实现互斥的同步机制的准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
信号量机制
类型:
1. 整型信号量
2. 记录型信号量
应用:
1. 用于实现前趋关系
2. 用于实现互斥
管程
管程是由一组局部的变量对局部变量进行操作的一组过程以及对局部变量进行初始化的语句序列构成的一个软件模块,它可用来实现进程同步。
进程通信
进程通信的类型
- 共享存储器系统
- 消息传递系统(利用信号量等进程同步功能和共享存储器功能?实现)
- 管道通信
线程
属性:
1. 轻型实体
2. 独立调度和分派的基本单位
3. 可并发执行
4. 共享进程资源
分类:
1. 用户级线程,用户级线程在用户空间实现,无需得到内核的支持,调度算法由线程库提供。
2. 内核支持线程,内核支持线程的TCB被它的保存在核心空间中,它的运行需获得内核的支持。
3. (用户级线程和核心级线程的结合,LWP)
线程的同步
- 互斥锁
- 条件变量
- 信号量机制
进程同步经典问题
处理机调度和死锁
调度方式和算法的选择,取决于操作系统的类型及其目标。
选择准则(面向系统):
1. 系统吞吐量
2. 处理机利用率
3. 各类资源的平衡利用
选择准则(面向用户):
1. 周转时间
2. 响应时间
3. 截止时间的保证
4. 优先权原则
三级调度
高级调度
又称为作业调度或长程调度
中级调度
它按一定的算法将外存中已具备运行条件的进程换入内存,而将内存中某些处于阻塞状态的某些进程换出至外存(阻塞->挂起)。中级调度的目的是为了解决内存紧张问题。
低级调度
又称为进程调度或短程调度。是最基本的调度,在三种类型的操作系统中都必须配置它。
分为:
1. 非抢占方式
2. 抢占方式,原则:1)优先权原则 2)短作业优先原则 3)时间片原则
调度算法
先来先服务-FCFS
按照作业/进程进入系统的先后次序,遵循先进入系统者先调度。
优点:
1. 有利于长作业/进程
2. 有利于CPU繁忙型作业/进程
缺点:
1. 不利于短作业/进程,尤其是来的较晚的短作业/进程
2. 不利于I/O繁忙型作业/进程
用于批处理系统,不适于分时系统
短作业/进程优先算法-SJF/SPF
按照运行时间长短进行调度,运行时间越短越优先调度。不可抢占。
优点:
1. 能有效降低作业/进程的平均等待时间
2. 提高系统的吞吐量
缺点:
1. 不利于长作业/进程
2. 未考虑作业/进程紧迫程度,不能保证紧迫作业/进程被及时处理
3. 运行时间无法准确估计,不能真正保证短作业/进程优先
4. 无法实现人机交互
高优先权优先算法-HPF
分类:
1. 静态优先权,简单易行,开销小,但是不够精确,还可能导致低优先权作业/进程长期得不到调度
2. 动态优先权,更好的调度性能,可防止长作业/进程长期垄断处理机
高响应比优先调度算法-HRRN
此处的要求服务时间,准确来说是指剩余的需要服务的时间。
HRRN是介于FCFS和SJF/SPF之间的一种这种算法,相比于SJF/SPF有着更低的吞吐量和更高的系统开销。
对短作业有利,一定程度上是先来先服务,也对长作业有利,但由于计算响应比,会增加系统开销。
时间片轮转算法-RR
系统将所有就绪进程按先来先服务原则排成队列。
就绪进程直接置于队尾,若此时正处于某一进程的时间片,该进程是位于队首的
多级反馈队列调度算法-FB
原理:
1. 设置多个就绪队列,并为各个队列赋予不同的优先级
2. 一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度
3. 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行
调度过程:
1. 按优先级由高到低设置多个队列RQ0 ,RQ1 … RQn ,高优先级队列时间片小
2. 刚进入系统的进程按FCFS放入最高的RQ0中
3. 进程一次时间片没执行完,就降至下一级队列,以此类 推,降至最低优先级队列后,一直在此队列中不再下降
4. 系统优先调度高优先级队列中的进程,仅当RQ0 空闲时才调度RQ1 队列进程,以此类推
5. 如果是抢占式,当前时间片未用完时有进程进入高优先级队列时,将当前进程置于其所在队列的末尾,而后开始执行高优先级队列的时间片
实时调度
常用的调度方式:
1. 非抢占式轮转调度方式
2. 非抢占式优先权调度方式
3. 抢占式调度优先权调度方式
4. 立即抢占的优先权调度方式
由上往下,响应时间数量级逐个降低,要求更为严格,所需资源也更多。
常用的高优先权优先的实时调度算法:
1. 最早截止时间优先算法-EDF,截止时间越早越优先。
2. 最低松弛度优先算法-LLF,松弛度:截止时间-剩余所需时间-当前时间,主要用于可抢占调度方式,当松弛度为0时,必须立即抢占CPU。
产生死锁的原因
- 竞争资源
- 进程推进顺序非法
产生死锁的必要条件
- 互斥条件
- 请求与保持条件
- 不剥夺条件
- 环路等待条件
处理死锁的基本办法
预防死锁
破坏死锁必要条件的后三者之一,互斥条件因为一些资源固有特性的限制,难以破坏,对于打印机这样的设备可以通过SPOOLing技术对互斥条件予以破坏。
1. 破坏“请求与保持”条件,规定所有进程都必须一次性申请运行过程所需的全部资源,会造成资源浪费严重和更多更久的进程阻塞。
2. 破坏“不剥夺”条件,规定一个已经保持了某些资源的进程,在提出新的资源请求而不能立即得到满足时,必须释放它已经获得的所有资源,方法实现复杂且开销大。
3. 破坏“环路等待“条件,将系统资源按类型赋予不同的序号,当进程要获取多种资源时必须按序号逐个获取资源。会限制新设备类型的增加,由于有些进程使用资源的顺序与规定的顺序不同,会造成资源的浪费。
避免死锁
将系统状态分为安全状态和不安全状态,安全状态一定不会产生死锁,不安全状态可能会产生死锁。
允许进程动态申请资源,系统分配资源前进行安全性检查,若分配会导致系统进入不安全状态,则不予以分配。
银行家算法,根本思想:当某个进程提出资源请求,并请求资源小于等于它实际所需资源时,检查是否存在一条路径可以在资源分配后,剩余的进程仍然可以完全结束。
数据结构:
1. 可用资源向量 Available
2. 最大需求矩阵Max
3. 分配矩阵Allocation
4. 需求矩阵Need
5. 工作向量work
6. 工作向量Finish
死锁的检测与解除
系统定时进行死锁的检测,当判明将发生死锁或已经发生死锁时,进行死锁的解除。
死锁的检测:
1. 判断的现有的资源能否让现有的进程全部正常结束,不能则认为将发生死锁。
2. 周期性检测进程阻塞时间,当其超过某一时间后,认为该进程为死锁进程。
死锁的解除:
1. 剥夺资源
2. 撤销进程