软考复习笔记01:操作系统
Preface
报名了2022年下半年浙江省软考,科目是系统架构设计师(高级),由于工作、学校各方面的原因,拖到现在才开始复习……不过奋起直追,犹未晚也。
操作系统(Operating System)概述
操作系统是计算机系统中的核心系统软件,负责管理和控制计算机系统中的硬件和软件资源,合理组织计算机工作流程和有效利用资源,是计算机和用户之间的接口。任何操作系统均提供如下基本功能:
- 处理机管理
- 存储管理
- 设备管理
- 文件管理
- 作业管理
根据使用环境和作业处理方式,可以简单将操作系统分为:
- 批处理操作系统:用户脱机使用,成批处理,多道程序运行;
- 分时操作系统:交互性,多用户同时性,独立性;
- 实时操作系统:即时响应,高可靠性;
- 网络操作系统:互操作性,协作处理;
- 分布式操作系统
从结构上,可分为:
- 无序结构: 系统开发周期短,但是模块关系复杂,分析、移植和维护较困难;
- 层次结构:简化接口设计,易保证可靠性,易于移植和维护;
- 面向对象结构:适用于网络操作系统和分布式操作系统;
- 对称多处理结构:所有处理机运行且共享同一内存;
- 微内核结构:核心态(内核态)和用户态的区别,把系统公共部分抽象出来,形成一个底层核心,提供基本服务,其他功能以服务器形式运行在微内核之上;它的主要优点:
- 接口统一
- 可伸缩性、可移植性、实时性、安全可靠性好
- 支持分布式系统
- 真正面向对象的操作系统
处理机管理
操作系统必须能够处理和管理并行的程序,使之对资源的利用按照良性的顺序执行。操作系统中调度和管理的最小单位是进程,而处理器分配资源的最小单位是线程。 进程是由程序、数据和进程控制块(Process Control Block, PCB)构成的,是计算机状态的有序集合;其中PCB是进程存在的唯一标志。
进程的三态/五态模型
这里讨论的三态/五态模型不考虑新建态以及终止态。
三态模型总是假设所有进程都处于系统内存中——这样的系统是理想的,实际上总会出现进程挂起的情况,于是下图所示的模型能更好的展示进程的状态。
注意:
- 只有就绪态可以直接切换到运行态;
- 挂起状态和对应的非挂起状态可以相互切换,但是不能跨状态切换;
- 等待态切换到就绪态是单向的,即便在挂起状态下也是如此;
- 等待事件一般指等待系统分配资源或者人工干预;
信号量(Samphore)和PV操作
信号量是一种特殊的变量,表现形式是一个整形S
和一个队列。若S > 0
,表示系统中可用的临界资源的数量;若S < 0
,其绝对值表示等待使用临界资源的进程数,即等待队列中的进程的数量。
P
操作表示申请一个资源,其中S = S - 1
,若S < 0
则执行P操作的进程暂停,并进入等待队列;V
操作表示释放一个资源,其中S = S + 1
,若S <= 0
则唤醒队列中一个等待的程序[1][2]。
常见的使用PV操作的场景有三个,分别是互斥控制,同步控制和生产者-消费者问题。任何PV操作的题目,均可以从简单互斥、简单同步以及生产者-消费者模型的角度分析解答。
互斥(mutex)控制
互斥控制的目的是保护共享资源,阻止多个进程同时访问同一个共享资源。由于只允许一个进程进入临界区,因此S
的初值为1.
同步控制
同步控制中S
的初值应为0。
为使进程A等待进程B执行到相应位置后再继续执行,A在等待点执行P
操作,此时S = -1 < 0
,进程A进入等待队列;当进程B执行到相应位置后,执行V
操作,此时S = 0 <= 0
,于是进程A被唤醒,继续执行。
生产者-消费者问题
生产者-消费者模型面临两个重要问题:
- 生产者进程和消费者进程的同步问题,
- 缓冲区的互斥关系
为解决这个问题,一般需要引入三个信号量:
Samphore | Operation | 说明 |
---|---|---|
empty | 同步 | 空闲的缓冲区数量,初值为缓冲区的总数 |
full | 同步 | 已填充的缓冲区数量,初值为0 |
mutex | 互斥 | 保证只有一个进程在写缓冲区,初值为1 |
死锁问题
死锁问题的必要条件:
- 互斥条件: 一个资源只能被一个进程占用;
- 保持与等待条件:一个进程持有部分所需资源,但请求其他资源被阻塞,不释放已持有的资源;
- 不可抢占条件:某些系统资源是不可抢占的,只能等待进程执行完毕释放;
- 循环等待条件:若干进程形成循环链,每个都占用对方要申请的下一个资源。
打破任意一个必要条件,都不会产生死锁。因此解决死锁问题的策略主要是:
- 死锁预防:提前破坏死锁条件,代价是降低系统效率;
- 死锁避免:每次申请资源时判断是否会造成死锁,增加系统开销;
- 死锁检测:检测系统是否处于死锁状态,如果是,则执行死锁解除策略;
- 死锁解除:强制剥夺进程持有的资源并分配给其他进程。
银行家算法
银行家算法是一种死锁避免策略的实现,主要原则是:
- 进程对资源的需求不大于系统资源总数时,可以被系统接纳;
- 进程可以分批申请资源,但是请求的总数不能超过其最大需求量;
- 资源不足时,系统可以推迟资源的分配,但是总能在有限的时间内使进程获得资源;
- 分配前测试系统现存资源是否满足进程尚需的最大资源数,以决定是否要延迟分配。
管程与线程
同一进程的线程共享该进程的地址空间。
文件管理
文件的逻辑组织是用户角度看到的文件组织形式,常用的结构有连续结构、多重结构、转置结构和顺序结构等。
文件的物理组织是文件在存储设备上的存储方法,常用的文件物理结构如下:
- 连续文件:只需知道文件起始位置和长度即可进行存取,适用于顺序存取,但是长度不能动态增长;
- 串联文件:使用非连续的物理块,每个物理块都存储指向下一个物理块的指针,适用于顺序访问,提高了设备空间利用率并解决了碎片问题,不适用于随机存取;
- 索引文件:为每个文件建立索引表,记录逻辑块号和对应的物理块号。会增大存储空间的开销但是适用于顺序访问和随机访问。
树形目录结构(略)
存储空间管理
文件存储设备常被分为许多大小相同的物理块,且以块为单位交换信息。存储空间的管理的本质就是对空闲块的组织和管理问题。
- 空闲表法(空白文件目录法):为所有的空闲区建立一张空闲表,记录序号,第一空闲块号和空闲块的数量;
- 空闲链表法:
- 空闲盘块链
- 空闲盘区链
- 位图法:用二进制位表示物理块的使用情况,0表示空闲。所有盘块都与一个二进制位对应;
- 成组链接法。
存储管理(虚拟存储器)
虚拟地址组成的地址空间成为虚拟存储器,由虚拟地址映射到物理地址的方法主要是静态重定位/动态重定位。常用的虚存组织主要是分段技术、分页技术和段页式技术三种。
三种存储技术的虚实地址转换见[[https://blog.csdn.net/m0_54158068/article/details/124206301]]。
策略
虚存管理的策略主要涉及调入策略、放置策略和置换策略。
- 调入策略:决定何时将一页或者一段从外存调入内存,可以按请求调入或者先行调入;
- 放置策略:决定调入后,目标内存的位置;
- 置换策略:决定如何淘汰内存中页。
常见的置换策略的实现有:
- 最优算法:淘汰不再使用或者将来才会使用的页,理想算法,难以实现;
- 随机算法:随机淘汰一些页,可能会淘汰立即就要使用的页,开销小;
- FIFO算法:淘汰在内存中驻留时间最长的页,也可能会淘汰要立即使用的页,可能会产生Belady现象;
- LRU算法:淘汰离当前时刻之前一段时间内使用最少的页。
局部性原理:进程往往会不均匀地高度局部化(时间/空间)地访问内存。
作业管理
作业的状态:
- 提交状态:由输入设备进入外存的过程;
- 后备状态:作业全部进入外存后,系统为其建立作业控制块;
- 执行状态:分配了必须资源且进入内存,进程建立;
- 完成状态:正常结束,资源被回收。
作业的调度:
- 高级调度:从后备状态的作业中选择部分,分配资源,建立进程;
- 中级调度:决定进程在内存、外存之间的调入和调出;
- 低级调度:确定处理器在就绪进程之间的分配。
调度算法
- 先来先调度(FCFS):按照作业到达的先后顺序调度,不利于短作业;
- 短作业优先(SJF):估计运行时间较短的作业优先调度,不利于长作业;
- 响应比高者优先(HRN):FCFS和SJF的综合;
- 优先级调度。
响应比的定义如下:
其中,是等待时间,是执行时间,从的定义可以看出,等待时间越长的作业越有可能被调度。
设备管理
- 提供和进程管理系统的接口;
- 进行设备分配;
- 实现设备和设备、设备和CPU之间的并行操作;
- 缓冲区管理
数据传输控制方式:
- 程序控制
- 程序中断
- DMA
- 通道方式
- 输入输出处理机
磁盘调度:
- FCFS
- 最短寻道时间优先算法(SSTF)
- 电梯算法(SCAN)
- N-SCAN/C-SCAN
虚设备和SPOOLing技术
构成:
- 输入井、输出井:位于磁盘上,模拟脱机磁盘,保存用户输入输出的数据;
- 输入缓冲区、输出缓冲区:位于内存中,暂存输入设备(输出井)的数据,并传输到输入井(输出设备)中;
- 输入进程和输出进程:模拟外围控制机。
优点:
提高了I/O速度;避免分配设备给进程;实现了虚拟设备功能(可共享给多个进程)。