操作系统
【计算机系统概述】
概论:
- 特征
- 并发: 两个或多个事件在同一时间间隔发生。
- 共享:资源共享。系统资源可供内存中多个并发执行的进程共同使用,互斥共享和同时访问方式。
- 虚拟:虚拟处理器/虚拟内存/虚拟外部设备。
- 异步:进程以不可预知的速度向前推进。
- 目标和功能
- 计算机系统资源的管理者:处理机/存储器/文件/设备。
- 用户与计算机系统之间的接口
- 命令接口:联机命令接口/脱机命令接口
- 程序接口:系统调用(广义指令)
- GUI:图像接口
- 扩充机器:没有任何软件支持的机器为裸机。裸机在最里层,其外是操作系统。
- 发展-批处理操作系统->分时操作系统->实时操作系统->网络和分布式操作系统
- 运行机制
- 中断和异常
- 中断指外中断,来自CPU执行指令意外的事件的发生。时钟中断表示固定时间片已到。
- 异常指内中断/例外/陷入。CPU执行指令内部的事件。异常不能被屏蔽。
- 中断
- 内中断
- 自愿中断
- 强迫中断
- 硬件故障
- 软件中断
- 外中断
- 外设请求
- 人的干预
- 内中断
- 系统调用:系统调用运行在核心态。
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
- 中断和异常
- 体系结构
- 大内核
- 微内核
【进程管理】
知识框架
- 进程
- 概念:程序及其数据在处理机上顺序执行。
- 特征:动态性/并发性/独立性/异步性/结构性
- 状态:运行/就绪/阻塞/创建/结束
- 控制:创建/终止/阻塞和唤醒/切换
- 组织:进程控制块PCB/程序段。数据段
- 通信:共享内存/消息传递/管道通信
- 线程
- 概念:基本的CPU执行单元,由线程ID/程序计数器/寄存器集合和堆栈组成。
- 线程的实现方式:用户级线程/内核级线程
- 处理机调度
- 概念:
- 三级调度:作业调度/中级调度/进程调度
- 调度方式:剥夺式/非剥夺式
- 调度准则:CPU利用率/吞吐量/周转时间/等待时间/相应时间
- 算法:先来先服务/短作业优先/优先级/高相应比优先/时间片轮转/多级反馈队列
- 进程同步
- 概念:临界资源/同步/互斥
- 实现方式:软件实现的集中算法/硬件实现
- 信号量:整型/记录型
- 经典问题:生产者-消费者/读者-写者/哲学家进餐
- 死锁
- 定义
- 原因:系统资源竞争/进程推进顺序非法
- 条件:互斥/不剥夺/请求和保持/循环等待
- 策略:预防死锁/避免死锁/死锁的检测和解除
进程
- 目的:更好地描述和控制程序并发执行
- 定义:进程是进程实体的一次运行,是系统进行资源分配和调度的一个独立单位
- 组成
- PCB:保存进程运行期间相关的数据,是进程存在的唯一标志
- 程序段:能被进程调度程序调度到CPU运行的程序代码段
- 数据段:存储程序运行期间的相关数据,可以是原始数据也可以是相关结果
- 进程状态
- 状态种类
- 运行:进程在处理机上运行
- 就绪:进程已经获得除处理机外的一切所需资源
- 阻塞:进程正在等待某一事件而被暂停运行
- 创建:进程正被创建,尚未转到就绪
- 结束:进程正从系统消失,分为正常结束和异常退出
- 状态变化
- 就绪->运行:经过处理机调度,就绪进程得到处理机资源
- 运行->就绪:时间片用完/可剥夺系统中有更高优先级进程进入
- 运行->阻塞:进程需要的某一资源还没准备好
- 阻塞->就绪:进程需要的资源准备好了,等待处理机资源
- 进程控制
- 创建:终端用户登录系统/作业调度/系统提供服务/用户程序的应用请求
- 终止:正常结束/发生异常/外界干预
- 阻塞:等待资源
- 唤醒:资源到达
- 切换:时间片用完/主动放弃处理机/被更高优先级的进程剥夺处理机
- 进程通信
- 共享存储
- 低级方式:基于数据结构的共享
- 高级方式:基于存储区的共享
- 消息传递
- 直接通信方式:直接把消息挂到接收进程的消息队列
- 间接通信方式:挂到某个中间实体,接收进程找实体接收消息,类似电子邮件
- 管道通信:利用一个特殊的pipe文件连接两个进程
- 代价
- 空间代价:进程控制块及协调各运行机构所占用的内存空间开销
- 时间代价:进行进程间的切换/同步及通信所付出的时间开销
- 线程
- 引入目的:为了更好的使多道程序并发执行,以提高资源利用率和系统吞吐量,增加程序的并发性
- 特点:程序执行的最小单元,基本不拥有任何系统资源
- 实现方式:用户级线程/系统级线程
- 共享存储
- 状态种类
处理机调度
- 调度层次
- 作业调度(高级调度):选择处于后备状态的作业分配资源,发生频率F最低
- 内存调度(中级调度):选择暂时不能运行的进程调出内存,F中等
- 进程调度(低级调度):选择就绪队列中合适的进程分配处理机,F最高
- 进程调度原因:合理的处理计算机软硬件资源
- 进程调度方式
- 剥夺式:有更为重要或紧迫的进程需要使用处理机,立即分配
- 非剥夺式:有更为重要···,仍让当前进程继续执行
- 典型调度算法
- 先来先服务:选择最先进入队列的
- 短作业优先:选择完成时间最短的
- 优先级调度:选择优先级别最高的
- 高响应比优先:选择响应比最大的
- 时间片轮转:总是选择就绪队列中第一个进程,但仅能运行一个时间片
- 多级反馈队列:时间片轮转和优先级调度的综合和发展
进程同步
- 引入原因;协调进程之间的相互制约关系
- 制约关系
- 同步:需要在某些位置上协调进程之间的工作次序而等待/传递信息所产生的制约关系
- 互斥:当一个进程进入临界区使用临界资源时,其他要求“进入临界区“或”进区“必须等待
- 临界资源:一次仅允许一个进程使用的资源
- 临界区互斥
- 原则:空闲让进/忙则等待/有限等待/让权等待
- 基本方法
- 软件实现
- 单标志法
- 双标志法先检查
- 双标志法后检查
- 皮特森算法
- 硬件实现
- 中断频闭法
- 硬件指令法
- 信号量:利用PV操作实现互斥
- 软件实现
- 管程
- 定义:由一组数据以及定义在这组数据之上的对这组数据操作组成的软件模块
- 组成
- 局部于管程的共享结构数据
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
死锁
- 产生原因:非剥夺资源的竞争和进程的不恰当推进顺序
- 定义:多个进程因竞争资源而造成的一种互相等待,若无外力作用,这些进程都无法向前推进
- 解决方案
- 预防死锁
- 破坏互斥条件:有些资源必须互斥使用,无法破坏互斥条件
- 破环不剥夺条件:增加系统开销,降低吞吐量
- 破坏请求和保持条件:严重浪费系统资源,还可能导致饥饿现象
- 破坏循环等待条件:浪费系统资源,造成编程不便
- 避免死锁
- 安全状态:能找到一个分配资源的序列能让所有进程都顺序完全
- 银行家算法:采用预分配策略检查分配完成时系统是否处于安全状态
- 检测死锁:利用死锁定理化简资源分配图以检测死锁的存在
- 解除死锁
- 资源剥夺法:挂起欧协死锁进程并抢夺它的资源
- 撤销进程法:强制撤销部分/甚至全部死锁进程并剥夺资源
- 进程回退法:让一个或多个进程回退到足以回避死锁的地步
- 预防死锁
【内存管理】
知识框架
- 程序执行过程
- 编译/链接/装入
- 逻辑地址和物理地址
- 扩充内存:覆盖与变换
- 连续分配
- 单一连续分配:分配到内存固定区域,只适合单任务系统
- 固定分区分配:会产生内部碎片。分配到内存中不同的固定区域,分区可以相等也可以不等
- 动态分区分配:按照程序的需要进行动态的划分
- 会产生外部碎片
- 分配算法:分配第一个符合条件的
- 首次适应:按地址从小到大排序
- 最佳:按空间从小到大排序
- 最坏:按空间从大到小排序
- 邻近适应:与首次适应相似,从上次查完的结束位置开始查找
- 非连续分配
- 基本分页:页式存储管理
- 概念:页面/地址结构/页表
- 地址变化机构及变换过程
- 快表
- 基本分段:段式存储管理:段表/地址变换机构/段的共享与保护
- 段也是:段页式存储管理:段表/页表
- 基本分页:页式存储管理
- 虚拟内存
- 概念
- 局部性原理
- 特征:多次性/对换性/虚拟性
- 请求分页
- 组成
- 页表机构:通过查表获取相关信息
- 缺页中断机构:要访问页不再内存时产生缺页中断
- 地址变换机构:把逻辑地址变换成物理地址
- 内存和外村:需要一定容量的内存和外存的支持
- 页面置换算法
- 最佳置换OPT:选择以后不用的页面
- 先进先出FIFO-Belady异常:选择最先装入的页面
- 最近最久未使用LRU:选择最近最久未用的页面
- 时钟算法CLOCK:选择最近未用的页面
- 改进型CLOCK:考虑页面修改的问题
- 页面分配策略:预调页策略/请求调页策略
- 抖动/工作集
- 地址翻译:TLB->页表(TLB不命中)->Cache->主存(Cache不命中)-> 外存(缺页)
- 组成
- 概念
内存管理
- 引入目的:更好地支持多道程序并发执行,提升系统性能
- 程序的装入
- 绝对装入:适合单道程序环境
- 静态重定位:适合装入之后不在移动
- 动态重定位:适合装入时还会移动
- 程序的链接
- 静态链接:在程序运行之前链接
- 装入时动态链接:在装入内存时,采用边装入边链接的链接方式
- 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接
- 地址空间
- 逻辑地址空间:源程序在编译或者链接装配后,指令和数据所用的所有相对地址的空间
- 物理地址空间:内存中物理单元的集合
- 内存保护
- 上/下限寄存器:分别与上下限寄存器比较
- 基址/限长寄存器:与限长寄存器比,与基址寄存器相加
- 管理方式
- 连续分配
- 单一连续分配
- 固定分区分配
- 动态分区分配
- 非连续分配
- 基本分页
- 基本分段
- 段页式
- 连续分配
- 内存扩充
- 覆盖:预设覆盖段,覆盖掉暂时不用的内存,通常在同一个程序这种进行
- 交换:把处于等待的程序暂时移到外存,通常在不同程序之间进行
- 虚拟内存:在逻辑上扩充内存。
【文件管理】
知识框架
- 概念:定义/属性/基本操作/打开与关闭
- 文件逻辑结构
- 无结构文件(流式文件):将数据按顺序组成记录并积累保存
- 有结构文件(记录式文件)
- 顺序文件
- 串结构:记录之间的顺序与关键字无关
- 顺序结构:记录之间的顺序与关键字有关
- 索引文件:为变长文件建立索引表,提高查找速度
- 索引顺序文件:顺序文件和索引文件的结合
- 直接文件:通过哈希函数直接决定记录地址
- 顺序文件
- 目录结构
- 文件控制块(FCB)/索引结点
- 单极目录结构:全部文件放在一个目录下
- 两级目录结构:在目录下分出用户目录
- 多级/树形目录结构:将两级目录加以推广,采用树形结构
- 图形目录结构:在树形结构上加入一些有向边,便于共享
- 文件共享
- 基于索引结点(硬链接):共享文件指向同一个索引结点
- 基于符号结点(软连接):保存共享文件的路径名
- 文件保护-
- 保护类型
- 口令保护:通过口令进行访问
- 加密保护:对文件进行加密处理
- 访问控制:根据访问者身份进行限制
- 保护类型
- 实现
- 层次结构
- 目录实现
- 线性列表
- 无序:查找文件较慢,新建文件较快
- 有序:查找文件较快,新建文件较慢
- 哈希表:查找/新建速度都较快,要处理冲突
- 线性列表
- 文件分配
- 连续分配:在磁盘上连续存放文件
- 链接分配
- 隐式:采用类似链表的结构
- 显式:把隐式中的指针单独抽出来
- 索引分配-索引链接/多层索引/混合索引:每个文件所有的盘块号都集中存放,建立索引表中
- 文件存储空间管理
- 空闲表法:把所有空闲块组织成表
- 空闲链表法:把所有空闲块组织成链表
- 位示图法:利用二进制的每位记录空闲块
- 成组链接法:空闲块和空闲链表的结合,适合大的文件系统
- 磁盘
- 磁盘地址结构:柱面号/盘面号/扇区号
- 访问时间
- 寻道时间:将磁头移动到指定磁道
- 延迟时间:将磁头移动到某一磁道的扇区
- 传输时间:从磁盘读出或从磁盘写入数据
- 启动时间:可忽略,控制器的启动
- 调度算法
- 先来先服务(FCFS)-公平:根据进程请求访问磁盘的先后顺序
- 最短寻找时间优先(SSTF)-饥饿现象:选择当前磁头所在磁道距离最近的请求
- 扫描算法(SCAN):磁头当前移动方向上距离最近的磁道
- 循环扫描(C-SCAN):在SCAN基础上规定磁头单向移动
- 磁盘的管理
- 初始化:对磁盘进行低级格式化和逻辑格式化
- 引导块:存放自荐程序
- 坏块:对于损坏扇区的处理
【I/O管理】
知识框架
- 概述
- I/O设备分类
- I/O控制方式-程序直接控制/中断驱动方式/DMA方式/通道方式
- I/O层次结构-用户层IO/设备独立性软件/设备驱动层/中断处理层/硬件层
- 缓冲区
- 单缓冲
- 双缓冲
- 循环缓冲
- 缓冲池
- 缓冲区和高速缓存的对比
- 设备分配
- 概述
- 独占设备:独占式使用
- 共享设备:分时式使用
- 虚拟设备:SPOOLing方式
- 数据结构:DCT(device control table)/COCT(control operator control table)/CHCT(channel control table)/SDT(system development table)
- 策略-静态分配/动态分配
- 逻辑设备名到物理设备名的映射
- 概述
- SPOOLing系统(虚拟设备技术)-组成/实例
I/O核心子系统
- I/O调度:确定一个好的顺序来执行这些I/O请求
- 磁盘高速缓存
- 1:把内存中开辟一个单独的存储空间作为磁盘高速缓存
- 2:把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O分时共享
- 缓冲区:单缓冲/双缓冲/循环缓冲/缓冲池
- 设备的分配与回收
- 分类
- 独占式使用设备:设备被使用时,不再允许其他进程使用该设备
- 分时共享使用设备:设备没有独占使用的要求时,可通过分时共享
- SPOOLing技术:将独占设备改造为共享设备
- 分配原则:既要充分发挥设备的使用效率,又要避免进程死锁,还要将用户程序与具体设备隔离开
- 分配方式
- 静态分配:在用户作业开始执行前,由系统一次性分配该作业需要的所有设备
- 动态分配:在进程执行中根据执行需要进行分配
- 分类