# 计算机操作系统复试

# 操作系统的作用

  1. 是用户与计算机硬件之间的接口
  2. 是计算机系统资源的管理者
  3. 实现了对计算机资源的抽象

# 操作系统基本特征

  1. 并发
  2. 共享
  3. 虚拟
  4. 异步

# 操作系统最基本调特征

  1. 并发
  2. 共享

# 处理机的双重工作模式

用户态、核心态

特权指令在核心态执行,非特权指令在用户态下执行

# 操作系统主要功能

  1. 处理机调度
    1. 进程控制
    2. 进程同步
    3. 进程通信
    4. 调度
      1. 作业调度(高级调度)
      2. 进程调度(低级调度)
  2. 存储器管理
    1. 内存的分配与回收
    2. 内存保护
    3. 地址映射
    4. 内存扩充
  3. 设备管理
    1. 缓冲管理
    2. 设备分配
    3. 设备处理
  4. 文件管理
    1. 文件存储空间管理
    2. 目录管理
    3. 文件的读写管理和保护
  5. 接口管理
    1. 用户接口(脱机用户接口、联机用户接口、图形用户接口)
    2. 程序接口

# 程序并发执行特性

  1. 间断性
  2. 失去封闭性
  3. 不可再现性

# 进程的特征

动态性、并发性、独立性、异步性

# 进程的 3 状态模型、5 状态模型、7 状态模型

# 单 CPU 中的状态

状态 最多 最少
运行 1 0
就绪 N-1 0
阻塞 N 0

# PCB 中的信息

  1. 进程标识符
  2. 处理机状态
  3. 进程调度信息
  4. 进程控制信息

# 拥有资源?调度?

  1. 进程是拥有资源的
  2. 线程是独立调度的

# 高级调度(作业调度)

决定哪些作业从外存调入内存准备执行,控制系统的并发度。

# 中级调度(内存调度)

管理内存中的进程,通过挂起和激活来调整内存使用。

# 低级调度(进程调度)

决定哪个就绪进程获得 CPU 执行。

# 先来先服务 FCFS

按作业或进程到达的顺序分配 CPU。

  • 简单易实现。
  • 非抢占式,可能导致 “护航效应”(短作业等待长作业完成)。
  • 平均等待时间较长,适合长作业

# 短作业优先 SJF

优先调度运行时间最短的作业。

  • 可抢占或非抢占。
  • 最小化平均等待时间。
  • 可能导致长作业 “饥饿”。

# 优先级调度 Priority Scheduling

按优先级分配 CPU,优先级高的先执行。

  • 可抢占或非抢占。
  • 可能导致低优先级进程 “饥饿”。
  • 优先级可以是静态或动态调整。

# 时间片轮转调度 RR

每个进程分配一个固定时间片(Time Quantum),轮流执行。

  • 抢占式,适合分时系统。
  • 时间片大小影响性能:太小增加上下文切换开销,太大退化为 FCFS
  • 公平性好,响应时间短。

# 多级队列调度 Multilevel Queue Scheduling

将进程分为多个队列,每个队列采用不同的调度算法。

  • 队列间可设置优先级。
  • 适合混合型任务(如前台交互任务和后台批处理任务)。

# 多级反馈队列调度 Multilevel Feedback Queue Scheduling

进程可在多个队列间移动,根据行为动态调整优先级。

  • 结合了优先级调度轮转调度优点
  • 动态适应进程行为,避免 “饥饿”。
  • 实现复杂。

# 算法总结

算法 特点 适用场景
FCFS 简单,非抢占,护航效应 批处理系统
SJF 最小化等待时间,可能导致长作业饥饿 批处理系统
优先级调度 按优先级执行,可能导致低优先级饥饿 实时系统
轮转调度 公平,响应时间短,时间片大小影响性能 交互式系统
多级队列调度 多队列,不同策略 混合任务系统
多级反馈队列调度 动态调整优先级,避免饥饿 通用操作系统

# 死锁

死锁是操作系统中的一种资源竞争现象,指多个进程或线程因争夺资源而陷入无限等待的状态,导致它们都无法继续执行。死锁的发生通常需要满足四个必要条件,称为死锁的四个必要条件

# 死锁的四个必要条件

  1. 互斥条件(Mutual Exclusion)
    • 资源一次只能被一个进程占用,其他进程必须等待。
  2. 请求与保持推荐(Hold and Wait)
    • 进程已经占有一些资源,同时请求其他被占用的资源。
  3. 不剥夺条件(No Preemption)
    • 进程已获得的资源不能被强制剥夺,只能由进程自行释放。
  4. 循环等待条件(Circular Wait)
    • 存在一个进程等待的循环链,每个进程都在等待下一个进程占用的资源。

# 死锁的处理方法

  1. 死锁预防
  2. 死锁避免
  3. 死锁检测
  4. 死锁解除

# 银行家算法

  • 检查资源分配后系统是否处于安全状态(即是否存在一个执行序列使所有进程完成)。

  • 如果不安全,则拒绝分配请求。

# 两种制约关系

  1. 互斥关系
  2. 同步关系

# 解决临界区同步问题须遵循以下准则

  1. 空闲让进
  2. 忙则等待
  3. 有限等待
  4. 让权等待

# 程序的装入方式

  1. 绝对装入
    1. 程序中的地址是固定的,装入时不需要进行地址转换。
    2. 适用于单道程序环境,或者内存地址固定的系统。
    3. 灵活性差,程序必须加载到指定的内存位置,无法适应多道程序环境。
  2. 可重定位装入
    1. 程序可以在内存的不同位置加载,适应多道程序设计。
    2. 装入时需要进行地址重定位,通常由操作系统或装入程序完成。
    3. 适用于多道程序环境,支持内存的动态分配。
  3. 动态运行时装入
    1. 程序可以部分加载,只有在需要时才将相关部分加载到内存。
    2. 地址转换由硬件和操作系统共同完成。
    3. 支持虚拟内存技术,允许程序的大小超过物理内存的容量。
  • 绝对装入:适用于单道程序环境,地址固定,装入简单但缺乏灵活性。
  • 可重定位装入:适用于多道程序环境,支持地址重定位,灵活性高。
  • 动态运行时装入:支持虚拟内存,程序可以动态加载,适合现代操作系统。

# 连续分配存储器管理方式

  1. 单一连续分配
  2. 固定分区分配
  3. 动态分区分配

# 动态分区分配的算法

  1. 首次适应算法
  2. 循环首次适应算法
  3. 最佳适配算法
  4. 最坏适配算法

# 分页存储

# 分段存储

# 页面置换算法

  1. 先进先出算法
  2. 最佳页面置换算法
  3. 最近最久未使用算法
  4. 最少使用算法
  5. Clock 算法
  6. 改进型 Clock 算法

# 抖动

** 抖动(Thrashing)** 是操作系统中与虚拟内存管理相关的一种现象,通常发生在系统内存资源不足时。当系统频繁地进行页面置换(即频繁地将内存中的页面换出到外存,再从外存换入新的页面),导致大部分时间都花在页面调度上,而不是执行实际任务时,就发生了抖动。

# I/O 设别控制方式

  1. 使用轮询的可编程 I/O 方式(落后)
  2. 使用中断的可编程 I/O 方式(用的比较多)
  3. 使用 DMA(减少了 CPU 对 I/O 的干预)
  4. 使用 I/O 通道

# 假脱机技术 - SPOOLing

假脱机技术(SPOOLing,Simultaneous Peripheral Operations On-Line) 是一种用于管理输入 / 输出(I/O)操作的技术,特别是在处理低速外设(如打印机)时。SPOOLing 的核心思想是通过缓冲排队机制,将外设的操作与主机的计算任务分离,从而提高系统的效率和资源利用率。

SPOOLing 的基本原理

  1. 输入井和输出井
    • SPOOLing 系统在磁盘上创建两个专门的存储区域:输入井输出井
    • 输入井用于暂存从输入设备(如读卡器)读取的数据。
    • 输出井用于暂存需要发送到输出设备(如打印机)的数据。
  2. 缓冲和排队
    • 当用户提交任务时,数据首先被写入磁盘的输入井或输出井,而不是直接发送到外设。
    • 外设(如打印机)从输出井中按顺序读取数据并执行操作,而主机可以继续执行其他任务。
  3. 并行操作
    • 主机和外设可以并行工作。主机不需要等待外设完成操作,而是将数据交给 SPOOLing 系统后继续执行其他任务。

SPOOLing 的应用场景

  1. 打印任务管理
    • 打印机是典型的低速外设,SPOOLing 技术可以有效地管理多个打印任务,避免用户等待。
  2. 批处理系统
    • 在批处理系统中,SPOOLing 技术可以用于管理输入作业和输出结果。
  3. 网络打印
    • 现代网络打印机通常使用 SPOOLing 技术来管理来自多个用户的打印任务。

SPOOLing 技术就是将独占设备转变为逻辑上的共享设备,提高了 I/O 速度,实现了虚拟设备的功能。

# 文件在外存的组织方式

  1. 连续组织方式
  2. 链接组织方式(显示连接 FAT、隐式链接)
  3. 索引组织方式(一级索引、二级索引…)

# 显示链接

显示链接通过一个专门的链接表来记录文件中各个块的物理地址。这个表通常称为文件分配表(FAT, File Allocation Table)

# 隐式链接

隐式链接将每个块的指针存储在块本身中,而不是使用一个全局的链接表。每个块中除了存储数据外,还包含下一个块的地址。

# 显示链接 vs 隐式链接

特性 显示链接(FAT) 隐式链接
存储结构 使用全局的 FAT 表存储链接信息 链接信息存储在块内部
访问方式 支持随机访问 仅支持顺序访问
空间开销 FAT 表占用额外空间 无额外空间开销
实现复杂度 较复杂 较简单
可靠性 FAT 损坏可能导致文件系统失效 单个块损坏可能影响文件完整性
适用场景 需要随机访问的场景 顺序访问为主的场景

# 小问题

# 进程和程序有什么区别

  1. 程序
    1. 程序是存储在磁盘或其他存储介质上的静态实体,由一系列指令和数据组成。
    2. 它是一个被动的实体,只有在被加载到内存并执行时才会发挥作用。
  2. 进程
    1. 进程是程序在内存中的动态执行实例
    2. 它是一个主动的实体,包含了程序的执行状态(如程序计数器、寄存器、堆栈等)以及系统分配的资源(如内存、文件句柄等)。
特性 程序(Program) 进程(Process)
定义 静态的指令和数据集合 程序的动态执行实例
生命周期 永久存在 临时存在,从创建到终止
状态 无状态 有状态(运行、就绪、阻塞等)
资源占用 不占用系统资源 占用系统资源(CPU、内存等)
并发性 不支持并发 支持并发
独立性 独立存在 进程间独立,可通过 IPC 交互
创建方式 开发者编写,编译生成 操作系统创建
示例 可执行文件(如 a.exe 运行中的程序实例

# 死锁是什么?死锁是怎么产生的?如何处理死锁?

死锁是操作系统中的一种资源竞争问题,指的是多个进程或线程因为竞争资源而相互等待,导致它们都无法继续执行的状态。死锁是一种严重的系统问题,会导致系统资源浪费和程序无法正常运行。

  1. 死锁的产生条件
    1. 互斥条件
    2. 不剥夺条件
    3. 请求与保持条件
    4. 循环等待条件
  2. 死锁的处理方法
    1. 死锁的预防
    2. 死锁的检测
    3. 死锁的避免
    4. 死锁的解除

# 饥饿是什么?和死锁有什么区别?

饥饿是指某个进程或线程因为资源总是被其他进程抢占,导致它长期得不到所需的资源,从而无法继续执行。

产生原因

  1. 资源分配策略不公平
    • 某些进程总是优先获得资源,而其他进程被忽略。
  2. 优先级调度问题
    • 高优先级进程不断抢占资源,低优先级进程始终得不到资源。
  3. 资源竞争激烈
    • 资源数量有限,且竞争资源的进程过多。
特性 饥饿(Starvation) 死锁(Deadlock)
定义 某个进程长期得不到资源 多个进程相互等待,无法继续执行
成因 资源分配不公平或优先级调度问题 四个必要条件同时满足
涉及进程数量 可能只有一个进程被 “饿死” 至少有两个或多个进程相互等待
资源状态 资源被其他进程占用,但未被阻塞 资源被占用且进程相互阻塞
解决方法 公平调度、动态优先级调整、资源预留 预防、避免、检测与恢复、忽略
影响范围 只影响被 “饿死” 的进程 影响所有参与死锁的进程
是否可恢复 可以通过调整资源分配恢复 需要外部干预(如终止进程)才能恢复
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KarryLiu 微信支付

微信支付

KarryLiu 支付宝

支付宝