操作系统期末复习

By Persona_owl

第一章 绪论

一、操作系统的概念与地位

1. 核心定义

操作系统(Operating System,OS)是管理和控制计算机系统中各种硬件和软件资源、合理组织计算机工作流程的系统软件,是用户与计算机之间的接口。

  • 本质:系统软件(由一整套程序组成)
  • 核心职能:资源管理、工作流程组织
  • 核心价值:为用户提供友好、可靠、安全的服务

2. 系统层次中的地位

  • 物理位置:紧贴硬件(裸机)之上,所有其他软件之下
  • 核心作用:提供其他软件的支撑环境,是计算机资源的“总管家”

3. 三大核心作用

作用维度 具体说明
资源管理者 管理对象:CPU、存储器、I/O设备、信息(数据+软件)
管理内容:资源状态监控、分配/回收、访问控制、权限管理
用户与硬件的接口 命令接口:命令行、菜单、图形GUI、脚本
程序接口:系统调用(类似过程调用,用于应用编程)
虚拟机/扩展机 将功能简单的裸机,通过资源管理和服务功能改造为功能更强、使用更便捷的虚拟机器

二、操作系统的发展历史(按阶段梳理)

1. 手工操作阶段(1946~50年代末)

  • 硬件基础:电子管计算机
  • 核心特点:用户既是程序员也是操作员,使用机器语言,依赖纸带/卡片输入输出
  • 主要矛盾:手工操作的慢速度与计算机运算的高速度冲突(人—机矛盾)
  • 效率问题:资源利用率低(用户独占全机)、CPU利用率低(等待手工操作)

2. 单道批处理系统(50年代末~60年代中期)

  • 硬件基础:晶体管计算机
  • 核心思想:操作员将作业分类成批,由“监督程序(Monitor)”自动连续处理
  • 两种模式:
    • 联机批处理:作业输入/输出由CPU直接控制,实现作业自动转接,但CPU等待I/O(效率低)
    • 脱机批处理:通过卫星机(外围计算机)处理I/O,主机与卫星机并行工作,提升CPU利用率
  • 关键技术:通道(专用I/O处理器,实现CPU与I/O并行)、中断(CPU响应外部事件的机制)
  • 主要问题:单道顺序执行,资源利用率仍不高(计算型作业时外设空闲,I/O型作业时CPU空闲)

3. 多道批处理系统(60年代中期~70年代中期)

  • 硬件基础:集成电路计算机
  • 核心思想:内存中同时存放多道程序,由管理程序控制交替执行,共享系统资源
  • 关键特征:
    • 多道性:内存中同时存在多个独立程序
    • 宏观并行:多道程序均处于运行状态(未完成)
    • 微观串行:交替使用CPU
  • 优缺点:
    • 优点:资源利用率高、作业吞吐量大
    • 缺点:用户交互性差、作业周转时间长

4. 分时系统(70年代中期~今)

  • 核心需求:满足用户联机交互、共享主机的需求
  • 原理:将CPU运行时间划分为“时间片”,按轮转方式分配给各终端用户
  • 关键特征:
    • 多路性:一台计算机支撑多个终端用户
    • 独立性:用户感觉独占计算机(响应快速)
    • 交互性:及时响应用户操作,便于程序调试
  • 优点:响应快、界面友好、资源共享便捷

5. 实时系统

  • 应用场景:工业过程控制、军事实时控制、金融交易(如飞机订票)
  • 核心要求:响应时间极短(毫秒/微秒级)、高可靠性、高安全性
  • 典型类型:过程控制系统、信息查询系统、事务处理系统
  • 与批处理/分时系统的区别:专用性强、响应时间更严格、可靠性要求更高、交互性较弱

6. 进一步发展

  • 通用操作系统:兼具批处理、分时、实时功能(如UNIX、Windows、鸿蒙)
  • 衍生类型:个人机OS、网络OS、分布式OS、嵌入式OS、智能化OS

三、操作系统的分类及核心区别

1. 六大基本类型

类型 核心特征 优点 缺点
批处理OS 用户脱机、作业成批处理、多道程序运行 资源利用率高、吞吐量大 等待时间长、无交互能力
分时OS 多路性、独立性、交互性、时间片轮转 响应快、多用户共享、易普及 -
实时OS 实时响应、高可靠性、专用性 满足实时控制需求 交互性弱
个人计算机OS 单用户为主、支持多任务、易用性优先、兼容多种硬件/外设 操作便捷、适配个人需求 资源利用率要求较低
网络OS 基于网络协议、提供网络通信和资源共享服务(如Netware) 实现跨机资源共享 依赖网络协议、耦合度低
分布式OS 处理分布、全系统统一管理、资源调度透明 并行处理能力强、容错性好 实现复杂、要求高容错性

2. 关键对比

  • 多道程序系统 vs 多处理系统:

    • 前者:多个程序在单CPU上交替运行
    • 后者:系统配置多个CPU,并行处理任务
  • 分布式OS vs 网络OS:

    • 对比维度 分布式OS 网络OS
      耦合程度 紧密耦合(统一OS管理) 松散耦合(异种OS互连)
      并行性 进程可分散在多机并行执行 各机进程独立运行
      透明性 资源位置对用户透明 用户需明确指定资源位置
      健壮性 容错能力强 容错能力较弱

四、操作系统的五大核心功能

1. 存储管理

  • 核心目标:提高内存利用率、方便用户使用、支持进程并发
  • 四大功能:
    • 存储分配与回收:为进程分配存储空间并在结束后回收
    • 存储保护:防止进程间相互干扰(如访问合法性检查)
    • 地址映射:将进程逻辑地址转换为内存物理地址
    • 内存扩充:通过覆盖、交换、虚拟存储技术,在不增加物理内存的情况下扩大可用空间

2. 处理机管理(核心是进程管理)

  • 四大功能:
    • 作业和进程调度:通过调度算法为进程分配CPU(核心)
    • 进程控制:创建、撤消、阻塞、唤醒进程(通过原语/系统调用实现)
    • 进程同步:协调进程间关系(互斥/同步),常用机制:锁、信号量
    • 进程通信:实现进程间的信息交换

3. 设备管理

  • 核心任务:分配/回收设备、驱动设备、响应I/O请求
  • 核心目标:提高I/O设备利用率、方便用户使用
  • 四大功能:
    • 缓冲管理:解决CPU与I/O速度不匹配(单缓冲、双缓冲、缓冲池)
    • 设备分配与回收:按策略分配外设及通道、控制器,支持虚拟设备(物理设备→多个逻辑设备)
    • 设备处理:控制设备工作、处理中断(通过设备驱动程序)
    • 设备独立性:用户程序与物理设备无关,提供统一I/O接口

4. 文件管理(管理软件资源)

  • 核心目标:解决文件的存储、共享、保密、保护
  • 四大功能:
    • 文件存储空间管理:分配/回收文件空间,提高利用率
    • 目录管理:实现文件按名存取,支持共享与保护(解决检索问题)
    • 文件读写和存取控制:实现文件访问,防止文件损坏
    • 文件操作管理:创建、删除、打开、关闭文件

5. 用户接口

  • 核心目标:提供友好的访问接口
  • 两种接口:
    • 命令接口:命令行接口(键盘命令)、图形用户接口(鼠标+图标)
    • 程序接口:系统调用(供用户程序/系统程序调用OS功能)

五、操作系统的四大核心特征

1. 并发(Concurrency)

  • 定义:两个或多个事件在同一时间间隔内发生(区别于“并行”:同一时刻发生)
  • 关键:单CPU环境下,进程宏观并发、微观交替执行;并发的核心是“进程”(程序的动态实体)

2. 共享(Sharing)

  • 定义:系统资源可被多个并发进程使用
  • 两种共享方式:
    • 互斥共享:资源分配后到释放前,仅被一个进程使用(如音频设备)
    • 同时访问:宏观上多个进程同时访问(如磁盘)

3. 虚拟(Virtual)

  • 定义:通过管理技术将物理实体转换为逻辑对应物
  • 典型例子:
    • CPU虚拟:单CPU→多个逻辑CPU(分时技术)
    • 存储虚拟:主存+辅存→虚拟存储器
    • 设备虚拟:单台物理打印机→多台虚拟打印机(Spooling技术)

4. 异步性(Asynchronism)

  • 定义:进程执行顺序和时间的不确定性(也称“不确定性”)
  • 表现:进程“时走时停”,运行速度不可预知;中断事件、程序错误发生时刻随机
  • 核心:OS通过调度机制保证进程最终完成执行

六、操作系统的结构

1. 结构设计意义

  • 解决OS代码量大、功能复杂的问题,保证正确性、便于修改和扩充

2. 逻辑结构(分层结构,类似“洋葱头”)

  • 内层(紧贴硬件):系统核(核心层)
    • 功能:初级中断处理、外部设备驱动、进程切换、进程控制与通信
    • 作用:为进程提供存在和活动的环境
  • 外层(从内到外):
    • 存储管理层→I/O处理层→文件存取层→调度与资源分配层
    • 作用:提供各类资源管理功能和用户服务

第二章 操作系统用户界面

一、作业的基本概念

1. 作业的定义

  • 用户视角:要求计算机系统按指定步骤处理应用程序并获得结果的全部加工工作(从输入到输出的完整业务处理流程)。
  • 核心构成:由顺序相连的作业步组成(作业步是处理过程中相对独立的工作环节)。

2. 作业的组成(系统视角)

作业由三部分构成,缺一不可:

组成部分 核心作用
程序 完成用户业务处理的核心代码,每个作业至少包含一个程序
数据 程序运行所需的输入信息(如计算数据、配置参数等)
作业说明书 体现用户控制意图,用于系统控制作业执行,包含:
1. 基本情况(用户名、作业名、编程语言等)
2. 控制描述(执行顺序、出错处理)
3. 资源要求(处理时间、优先级、内存/外设需求)

二、作业的建立与管理

1. 作业的建立过程

作业建立的标志是“程序+数据输入外存”且“建立作业控制块(JCB)”,具体步骤:

  1. 作业输入:将程序、数据、作业说明书从输入设备传入外存;
  2. JCB建立:系统根据作业说明书生成JCB(核心管理表格),记录作业关键信息。

2. 作业控制块(JCB)

  • 核心属性:与作业一一对应,是系统管理作业的核心依据,包含:
    • 基础信息:作业名、估计执行时间、优先级、程序语言类型;
    • 资源要求:内存大小、外设类型及数量(静态/动态申请);
    • 状态信息:提交/后备/执行/就绪/等待/完成;
    • 存储信息:作业在外存的存储地址(便于快速调入内存);
    • 其他:作业说明书文件名、出错处理规则等。

3. 作业输入输出方式(5种)

输入输出方式 核心原理 优点 缺点
联机 主机直接控制I/O,作业处理与I/O串行 操作简单 CPU利用率低
脱机(预输入) 通过后援存储器(磁带/磁盘)在卫星机与主机间交换作业 提高主机利用率 需人工干预(移动存储介质)
直接耦合 通过大容量公用存储器交换作业,无需人工干预 利用率高、无人工干预 成本高(仅适用于大型机)
SPOOLING 多外设通过通道/DMA与主机、外存连接,OS控制I/O过程(输入井/输出井缓冲) 并行处理I/O、利用率高 需OS复杂控制
网络联机 网络中一台主机输入的信息传送到另一台主机执行 跨机协作 依赖网络稳定性

关键补充:SPOOLING系统工作原理

  1. 输入管理模块的“读过程”将外设数据读入缓冲区;
  2. 缓冲区满后,“写过程”将数据写入外存“输入井”;
  3. 作业输入完毕后,系统建立JCB,作业进入后备队列等待调度;
  4. 输出时反向操作(输出井→缓冲区→输出设备)。

4. 作业控制方式

控制方式 核心逻辑 特点
脱机控制 用户提交作业说明书,系统全程自动控制作业执行,无人工干预 适合批量处理,交互性差
联机控制 人-机会话模式(用户登录→进入shell→输入命令→系统响应→退出) 交互性强,便于调试修改

5. 作业概念的适用场景

  • 主要用于批处理系统、大型机/巨型机系统
  • 微机、工作站系统中较少使用(以“进程/线程”为核心管理单位)。

三、用户接口

1. 用户接口的定义

  • 操作系统提供的用户与计算机交互的外部机制:用户通过接口提交请求,系统通过接口提供服务。
  • 三类用户及对应接口需求:
    • 普通用户:需便捷的应用服务接口(图形界面为主);
    • 管理员用户:需系统管理接口(命令/图形结合);
    • 程序员用户:需程序调用接口(系统调用)。

2. 操作系统的两类核心接口

接口类型 核心作用 表现形式
命令控制接口(操作接口) 组织工作流程、控制程序运行 1. 图形界面(鼠标+图标+菜单);
2. 命令界面(命令行、作业控制语言、命令文件)
系统功能接口(程序接口) 供用户程序调用OS服务(软件开发人员的唯一OS接口) 系统调用(源程序级调用,屏蔽OS内部实现细节)

命令控制接口的两种控制方式

  • 脱机控制:通过作业说明书或命令文件提交执行顺序,全程无交互;
  • 联机控制:用户与系统实时会话,命令分类包括:环境设置、权限管理、系统管理、文件管理、编辑编译执行、通信、资源要求。

3. 系统调用(核心重点)

(1)基本定义

  • 用户程序在运行中调用OS提供的子功能,是程序员访问OS服务的唯一途径(屏蔽硬件细节和OS内部逻辑)。

(2)关键基础:处理机的执行状态

状态类型 执行主体 权限范围 切换触发条件
用户态(目态) 用户程序 仅能访问用户地址空间 执行访管指令(陷阱指令)
系统态(管态) 操作系统程序 可访问全系统资源(硬件+内核) 系统调用处理完毕后返回

(3)系统调用的实现过程

  1. 触发系统调用:用户程序执行“陷阱指令(访管指令)”,指令包含系统调用功能号;
  2. 状态切换:硬件自动将处理机从用户态切换到系统态,保存当前现场(寄存器、程序计数器等);
  3. 查找子程序入口:陷阱处理机构通过功能号查询“入口地址表”,找到对应OS子程序;
  4. 执行OS服务:运行OS子程序完成请求(如文件读写、设备申请);
  5. 返回用户程序:恢复现场,处理机切换回用户态,继续执行用户程序。

(4)参数传递方法(用户程序↔OS子程序)

传递方式 适用场景 特点
陷阱指令自带 参数数量极少的系统调用 限制多,仅能传少量参数
通用寄存器传递 参数数量较少的场景 速度快,依赖公共寄存器
内存堆栈传递 系统调用较多、参数复杂的场景 灵活,支持大量参数传递

(5)系统调用的六大功能分类

功能类别 具体操作
设备管理 请求/释放设备、启动设备操作
文件管理 创建/删除文件、读/写文件、移动文件指针
进程控制 创建/执行/撤销进程、进程状态切换
进程通信 进程间传递消息、信号
存储管理 申请/释放内存块、查询内存块地址和大小
系统管理 设置/读取系统时间、查询用户/主机标识

(6)系统调用与普通过程调用的异同

对比维度 系统调用 普通过程调用(CALL)
相同点 1. 改变指令流程;
2. 公用代码可重复执行;
3. 执行后需返回原断点
1. 改变指令流程;
2. 公用代码可重复执行;
3. 执行后需返回原断点
不同点1:调用类型 动态调用(程序中不含被调用代码,仅含功能号) 静态调用(被调用代码与调用代码在同一程序中)
不同点2:执行状态 切换用户态↔系统态 始终在用户态执行
不同点3:进入方式 通过陷阱指令(int/trap)触发 通过CALL/JMP指令触发
不同点4:调度关系 抢先式调度系统中,返回时需检查高优先级任务是否就绪 与进程调度无关,直接返回
不同点5:嵌套调用 同一进程中一般不允许嵌套/递归调用 支持嵌套/递归调用
不同点6:地址特性 调用地址不固定(依赖功能号查询入口表),返回地址通过栈保存 调用地址固定(包含在CALL指令中),返回地址通过栈保存

第三章 进程管理

一、进程的核心概念

1. 程序的执行方式及特点

  • 顺序执行:单道批处理系统的执行方式,程序独占处理机,按严格次序执行。
    • 核心特征:顺序性、封闭性(独占资源)、可再现性(结果与速度无关)。
  • 并发执行:多道程序环境下,多个程序执行时间重叠(一个未结束另一个已开始)。
    • 核心影响:失去封闭性和可再现性、程序与计算不再一一对应、进程间相互制约。
    • 并发条件(Bernstein条件):任意两程序P(i)和P(j)的读集R、写集W满足:R(i)∩W(j)=∅、W(i)∩R(j)=∅、W(i)∩W(j)=∅。
      • 简单理解:可以同时读,不可同时写,不可同时读写

2. 进程的定义与类型

  • 定义:具有独立功能的程序对某个数据集在处理机上的执行过程,是资源分配和独立运行的基本单位。
  • 类型
    • 系统进程:核心态运行,管理资源(如进程调度),可直接I/O,独占部分资源。
    • 用户进程:用户态运行,通过系统调用获取资源,不可直接I/O。

3. 进程与程序、作业的区别

对比维度 进程(动态) 程序(静态) 作业(任务实体)
本质 执行过程,有生命周期 指令有序集合,长期存在 用户提交的任务集合(程序+数据+说明书)
核心属性 并发、调度、资源分配单位 无并发能力,不可独立运行 外存等待执行,不直接占用资源
对应关系 一个程序可对应多个进程,一个进程可包含多个程序 与进程无一一对应关系 一个作业可由多个进程组成,仅用于批处理/大型机系统

4. 进程的五大特征

  • 并发性:多个进程可在同一时间间隔内执行。
  • 动态性:有创建、执行、消亡的生命周期(程序是静态的)。
  • 调度性:是CPU调度和资源分配的独立单位。
  • 交互性:进程间可能直接/间接相互制约。
  • 异步性:进程以不可预知的速度推进,需通过同步机制保证结果正确。

二、进程的组成

进程由程序、数据集合、进程控制块(PCB) 三部分组成(合称“进程映像”)。

1. 核心组件:进程控制块(PCB)

  • 核心地位:系统感知进程存在的唯一标志,进程与PCB一一对应。
  • 创建与消亡:创建进程时先建PCB,进程消亡时释放PCB。
  • 核心内容
    • 描述信息:进程标识、用户标识、家族关系(父/子进程)。
    • 控制信息:当前状态、优先级、程序开始地址、通信信息。
    • 资源管理信息:占用内存大小、I/O设备号、资源清单。
    • CPU现场保护:寄存器值、程序计数器(进程切换时保存/恢复)。

2. 进程上下文与进程空间

  • 进程上下文:进程执行的静态描述,包括PCB、寄存器值、程序段、数据集、堆栈。
  • 进程空间:进程的地址空间(大小=2ⁿ,n为处理机位数),分为用户空间(用户程序运行)和系统空间(内核程序运行)。

三、进程的状态及其转换

1. 三种基本状态

状态 核心定义 关键说明
就绪状态(Ready) 已获得除CPU外的所有资源,等待调度分配CPU 多个进程可同时处于就绪状态,组成就绪队列
运行状态(Running) 已获得CPU,程序正在执行 单CPU系统中仅一个进程处于该状态
等待状态(Blocked) 因等待某事件(如I/O完成)暂停执行,即使有CPU也无法运行 多个进程可处于该状态,按等待事件组成多个等待队列

2. 状态转换规则

  • 就绪 → 运行:进程调度(调度程序从就绪队列选一个进程分配CPU)。
  • 运行 → 就绪:时间片用完或有更高优先级进程进入就绪队列。
  • 运行 → 等待:进程调用阻塞原语(如等待I/O、等待资源)。
  • 等待 → 就绪:等待的事件发生(如I/O完成),调用唤醒原语。

3. 状态队列管理

  • 就绪队列:所有就绪进程的PCB按调度策略排列(如FIFO)。
  • 等待队列:按等待事件分类(如等待打印机队列、等待磁盘I/O队列)。

四、进程控制

进程控制通过原语实现,原语是系统态下执行的原子操作(不可中断、不可并发)。

1. 核心原语分类及功能

原语类型 触发场景 核心操作步骤
进程创建原语(create) 作业调度或父进程创建子进程 1. 检查同名进程;2. 申请空PCB;3. 填写PCB信息;4. 将PCB加入就绪队列和总链队列
进程撤消原语(kill/exit) 进程完成任务、出错或被祖先进程撤消 1. 查找目标PCB;2. 释放进程占用资源;3. 撤消子进程(若有);4. 释放PCB
进程阻塞原语(susp/sleep) 进程等待某事件(如I/O) 1. 保存CPU现场;2. 置进程状态为等待态;3. 将PCB加入对应等待队列;4. 转调度
进程唤醒原语(wakeup) 等待的事件发生(如I/O完成) 1. 从等待队列摘下PCB;2. 置进程状态为就绪态;3. 将PCB加入就绪队列;4. 转调度

2. 原语与系统调用的区别

  • 相同点:均通过访管(trap/int即陷入指令)指令触发。
  • 不同点:原语不可中断、无并发执行;系统调用可中断,服务于用户程序。

五、进程的互斥与同步

1. 核心概念

  • 临界资源:一次仅允许一个进程使用的资源(如打印机、内存变量)。
  • 临界区:进程中访问临界资源的程序段(需互斥进入)。
  • 互斥:多个进程共享临界资源时,仅允许一个进程进入临界区(间接制约,源于资源竞争)。
  • 同步:多个进程合作时,需按约定顺序执行(直接制约,源于进程协作)。

2. 进入临界区的四大准则

  1. 忙则等待:临界区有进程时,其他进程需等待。
  2. 空闲让进:临界区空闲时,允许等待进程进入。
  3. 有限等待:进程等待进入临界区的时间有限。
  4. 让权等待:无法进入临界区时,让出CPU(避免忙等)。

3. 互斥的实现:加锁机制

  • 锁变量:0表示资源可用,1表示不可用。
  • 核心操作:
    • 上锁(lock):检查锁变量,若为0则置1,否则等待。
    • 开锁(unlock):将锁变量置0,唤醒等待队列中的进程。

4. 信号量与PV操作(核心同步机制)

(1)信号量定义

  • 二元组(S, q):S为非负整型变量(代表资源数),q为等待队列(初始为空)。

    • typedef struct{
      	int value;			//剩余资源数量
      	struct process *L;	//等待队列
      } semaphore;
      
      //P操作 申请资源
      void wait (semaphore S) {
          S.value--;
          if (S.value < 0) {
      		block(S.L);
          }
          
      }
      
      //V操作 释放资源
      void signal (sempaphore S) {
          S.value++;
          if(S.value <= 0){
              wakeup(S.L);
      	}
      }
      
  • 物理含义:

    • S > 0:有S个资源可用;
    • S = 0:无资源可用,等待队列为空;
    • S < 0:|S|表示等待队列中的进程数。

(2)PV操作原语(原子操作)

  • P操作(申请资源)
    • S = S - 1;
    • 若S ≥ 0,进程继续执行;
    • 若S < 0,进程阻塞,加入等待队列。
  • V操作(释放资源)
    • S = S + 1;
    • 若S > 0,进程继续执行;
    • 若S ≤ 0,唤醒等待队列中的一个进程。

(3)PV操作的三大应用

  1. 实现互斥

    1. 设互斥信号量mutex(初值=1);
    2. 进程进入临界区前执行P(mutex),退出时执行V(mutex)。
  2. 实现同步

    1. 设同步信号量S(初值=0,代表“等待的事件是否发生”);
    2. 等待事件的进程执行P(S),触发事件的进程执行V(S)。
  3. 描述前趋关系

    1. 若进程P1完成后P2才能执行,设信号量S(初值=0);
    2. P1末尾执行V(S),P2开头执行P(S)。
  4. 例题:

    1. 4887aff474d7866aa1e492fadab18c7b

    2. semaphore a=0,b=0,c=0,d=0,e=0,f=0,g=0;
      S1(){
      	S1;
      	V(a);
      	V(b);
      }
      S2(){
      	P(a);
      	S2;
      	V(c);
      	V(d);
      }
      S3(){
      	P(b);
      	S3;
      	V(g);
      }
      S4(){
      	P(c);
      	S4;
      	V(e);
      }
      S5(){
      	P(d);
      	S5;
      	V(f);
      }
      S6(){
      	P(e);
      	P(f);
      	P(g);
      	S6;
      }
      main(){
      	cobegin:
      		S1();
      		S2();
      		S3();
      		S4();
      		S5();
      		S6();
      	coend;
      }
      

5. 经典同步问题

(1)生产者-消费者问题

  • 问题描述: 系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的"产品"理解为某种数据)生产者、消费者共享一个初始为空、大小为n的缓冲区。只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。

  • 核心需求:生产者向有界缓冲区放产品,消费者取产品,缓冲区满时生产者等待,缓冲区空时消费者等待。

  • 信号量设置:

    • empty(初值=n):缓冲区空闲数;
    • full(初值=0):缓冲区产品数;
    • mutex(初值=1):缓冲区互斥访问。
  • 关键:生产者先P(empty)再P(mutex),消费者先P(full)再P(mutex)(避免死锁)。

  • seamphore mutex = 1;
    seamphore empty = n;
    seamphore full = 0;
    producer(){
    	while(1){
    		生成一个产品;
    		P(empty);
    		P(mutex);
    		把产品放入缓冲区;
    		V(mutex);
    		V(full);
    	
    	}
    
    }
    consumer(){
    	while(1){
    		P(full);
    		P(mutex);
    		从缓冲区中取出一个产品;
    		V(mutex);
    		V(empty);
    		使用产品;
    	}
    }
    main(){
    	cobegin:
    		producer();
    		consumer();
    	coend;
    }
    

(2)读者-写者问题

  • 问题描述:有两组并发进程:读者和写者,共享一组数据区,进行读写操作,要求任一时刻“写者”最多只允许一个,而“读者”则允许多个。

  • 核心需求:读-读可并发,读-写互斥,写-写互斥。

  • 信号量设置:

    • rw(初值=1):写者与读者/其他写者互斥;
    • mutex(初值=1):对读者计数变量count的互斥访问;
    • w (初值=1) : 用于实现对写的相对有优先,这个信号量可以不加,不加的话写进程可能会出现忙等
    • count(初值=0):当前读进程数。
  • 关键:第一个读者执行P(Wmutex),最后一个读者执行V(Wmutex)。

  • seamphore rw = 1;
    seamphore mutex = 1;
    seamphore w = 1;
    int count = 0;
    writer(){
    	while(1){
    		// P(w);
    		P(rw);
    		写文件;
    		V(rw);
    		// V(w);
    	}
    }
    reader(){
    	while(1){
    		// P(w);
    		P(mutex);
    		if(count==0)
    			P(rw);
    		count++;
    		V(mutex);
    		// V(w);
    		读文件;
    		P(mutex);
    		count--;
    		if(count==0)
    			V(rw);
    		V(mutex);
    	}
    
    }
    main(){
    	cobegin:
    		writer();
    		reader();
    	coend;
    }
    

(3)哲学家进餐问题

  • 问题描述:有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子,即共5只筷子。每个哲学家的行为是思考和进餐。为了进餐,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。思考时则同时将两支筷子放回原处。

  • 核心风险:五个哲学家抢五根筷子,可能同时拿左筷子导致死锁。

  • 死锁解决:

    • 最多允许4个哲学家同时进餐;

      • seamphore chopstick[5]={1,1,1,1,1};
        int count = 4;
        Pi(){
        	do{
        		P(count);
        		P(chopstick[i]);
        		P(chopstick[(i+1)%5]);
        		进食;
        		V(chopstick[i]);
        		V(chopstick[(i+1)%5]);
              V(count);
        		思考;
        	}while(1);
        }
        
    • 奇数号哲学家先拿左筷子,偶数号先拿右筷子。

      • seamphore chopstick[5]={1,1,1,1,1};
        Pi(){
        	do{
        		思考;
        		if(i%2==1){
        			P(chopstick[i]);
                    P(chopstick[(i+1)%5]);
                    进食;
                    V(chopstick[i]);
                    V(chopstick[(i+1)%5]);
        		}
        		else{
        			P(chopstick[(i+1)%5]);
        			P(chopstick[i]);
                    
                    进食;
                    V(chopstick[(i+1)%5]);
                    V(chopstick[i]);
        		}
        		
        		思考;
        	}while(1);
        }
        
    • 补充:必须左右筷子都能拿时才能拿,加一个互斥信号量即可

      • seamphore chopstick[5]={1,1,1,1,1};
        seamphore mutex = 1;
        Pi(){
        	do{
        		思考;
        		P(mutex);
                P(chopstick[i]);
                P(chopstick[(i+1)%5]);
                进食;
                V(chopstick[i]);
                V(chopstick[(i+1)%5]);
        		V(mutex);
        		思考;
        	}while(1);
        }
        

(4)补充问题:多生产者多消费者问题

  • 问题描述:桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时,爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。用PV操作实现上述过程。

  • 由于缓冲区大小为一,所以这里可以不用单独设立互斥信号量mutex,当然也可以增加mutex

  • seamphore apple = 0;
    seamphore orange = 0;
    seamphore plate = 1;
    
    dad(){
    	while(1){
    		准备一个苹果;
    		P(plate);
    		把苹果放入盘子;
    		V(apple);
    	}
    }
    
    mom(){
    	while(1){
    		准备一个橘子;
    		P(plate);
    		把橘子放入盘子;
    		V(orange);
    	}
    }
    
    daughter(){
    	while(1){
    		P(apple);
    		从盘中取出苹果;
    		V(plate);
    		吃掉苹果;
    	}
    }
    
    son(){
    	while(1){
    		P(orange);
    		从盘中取出橘子;
    		V(plate);
    		吃掉橘子;
    	}
    }
    

(5)补充问题:理发问题

  • 问题描述:有一个理发师、一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,则理发师便在理发椅上睡觉;当一个顾客到来时,必须唤醒理发师,进行理发;如果理发师正在理发时,又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。

  • seamphore customers = 0;
    seamphore barbers = 1;
    seamphore wait = 0;
    Barber(){
    	while(1){
    		P(customers);
    		wait = wait - 1;
    		理发;
    		V(barbers);
    	}
    }
    Customer(){
    	while(1){
    		if(wait<n){
    			wait = wait + 1;
    			V(customers);
    			P(barbers);
    			理发;
    		}
    		else{
    			离开店;
    		}
    	}
    }
    main(){
    	cobegin:
    		Barber();
    		Cuostomer();
    	coend;
    }
    

六、进程间通信(IPC)

1. 通信分类

  • 按通信量
    • 低级通信:传递控制信息(如信号量),信息量小、编程复杂。
    • 高级通信:传递大批量数据(如文件、消息),效率高、易用。
  • 按通信方式
    • 直接通信:发送进程指定接收进程(如Send(receiver, msg))。
    • 间接通信:通过共享数据结构(如邮箱)中转(如Send(MB, msg))。

2. 常用通信方式

(1)消息缓冲机制

  • 核心思想:利用公用消息缓冲区,按“生产者-消费者”模式交换信息。
  • 原语:
    • Send(B, m):发送进程申请缓冲区,写入消息后挂入接收进程队列。
    • Receive(A, n):接收进程从队列摘下缓冲区,读取消息并释放缓冲区。
  • 信号量:mutex(互斥访问队列,初值=1)、SM(接收进程消息数,初值=0)。

(2)邮箱通信

  • 核心结构:邮箱头(描述邮箱信息)+ 邮箱体(存放消息)。
  • 原语:
    • Deposit(m):发送进程将消息放入邮箱(需P(fromnum,邮箱空格数))。
    • Remove(m):接收进程从邮箱取消息(需P(mesnum,邮箱消息数))。

七、线程(Thread)

1. 线程的引入目的

  • 减小并发开销:线程创建、切换、消亡的时间/空间开销远小于进程。
  • 提高并发度:进程作为资源拥有者,线程作为调度单位,同一进程内线程可并发执行。

2. 线程与进程的核心区别

对比维度 进程 线程
资源分配 独立地址空间,拥有资源(内存、I/O设备) 共享所属进程的资源,无独立地址空间
调度单位 操作系统调度的基本单位(内核级调度) 调度的基本单位(用户级/内核级调度),切换开销小
通信方式 需通过IPC(如消息、管道),复杂 可直接访问进程数据段(如全局变量),需同步互斥辅助
生命周期 与资源分配/释放绑定,生命周期长 依赖所属进程,进程消亡则线程消亡,生命周期短

3. 操作系统线程模型

  • 单进程单线程(如MS-DOS);
  • 多进程单线程(如早期UNIX);
  • 单进程多线程(如Java运行时);
  • 多进程多线程(如Windows、Linux)。

八、死锁问题

1. 死锁的定义

  • 两个或多个进程相互等待对方拥有的资源,且均不释放自身资源,导致进程永久阻塞的状态。

2. 产生死锁的四大必要条件(缺一不可)

  1. 互斥条件:资源为临界资源(仅允许一个进程占用)。
  2. 请求和保持条件(部分分配):进程持有部分资源,同时请求其他资源。
  3. 不剥夺条件:进程已获得的资源不可被强制剥夺。
  4. 环路条件:存在进程-资源的循环等待链。

3. 死锁的排除方法

(1)预防死锁(破坏必要条件)

  • 破坏“请求和保持”:进程创建时一次性分配所需全部资源。
  • 破坏“不剥夺”:进程请求资源失败时,释放已持有资源。
  • 破坏“环路”:资源按序号递增次序申请(如打印机=1、磁带机=2)。

(2)避免死锁(银行家算法)

  • 核心思想:动态分配资源,保证系统始终处于安全状态(存在安全序列,所有进程可完成)。
  • 关键数据结构:
    • Available:系统可用资源向量;
    • Max:进程最大资源需求矩阵;
    • Allocation:进程已分配资源矩阵;
    • Need:进程剩余资源需求矩阵(Need=Max-Allocation)。
  • 算法步骤:
    • 检查请求向量Request≤Need且Request≤Available;
    • 试探分配资源,更新数据结构;
    • 执行安全性算法,判断是否存在安全序列,若存在则实际分配。
  • 例题:假设系统中有4个进程和3类资源,每种资源的数量分别为9、3、6,T0时刻资源分配情况如下,

​ (1)请问此时刻系统是否安全?

​ (2)P2请求资源:Request2(1,0,1),系统能否将资源分配给它?

​ (3)P2申请后,P1申请: Request1(1,0,1),能否分配?

​ (4)P1申请后,P3申请: Request3(0,0,1),能否分配?

image-20260101154259825

(1)
	资源总数(9,3,6),减去已分配(1,0,0)+(5,1,1)+(2,1,1)+(0,0,2) 得剩余(1,1,2)
	(1,1,2) > P2_need (1,0,2) 回收P2已分配 (1,1,2)+(5,1,1)=(6,2,3)
    (6,2,3) > P3_need (1,0,3) 回收P3已分配 (6,2,3)+(2,1,1)=(8,3,4)
    (8,3,4) > P1_need (2,2,2) 回收P1已分配 (8,3,4)+(1,0,0)=(9,3,4)
    (9,3,4) > P4_need (4,2,0) 回收P4已分配 (9,3,4)+(0,0,2)=(9,3,6)
    因此存在安全序列P2->P3->P1->P4
    
(2)
	Request2(1,0,1)后,Allocation和Need分别为
	P2:(6,1,2),(0,0,1)
	剩余(0,1,1)
	仍然存在安全序列P2->P3->P1->P4,可分配
	
(3)
	Request1(1,0,1),剩余的(0,1,1)无法满足,进程阻塞,无法分配
	
(4)
	Request3(0,0,1),Allocation和Need分别为
	P3:(2,1,2),Need(1,0,2)
	剩余(0,1,0)
	发现不存在安全序列,因此不安全,不可分配

(3)检测与解除死锁

  • 检测:通过资源分配图化简,判断是否存在循环等待。
  • 解除:
    • 撤消进程:撤消部分死锁进程(最小代价原则);
    • 资源剥夺:从死锁进程中强制剥夺资源,分配给其他进程。

第四章 处理机调度

一、核心结论

处理机调度的核心是合理分配CPU资源,通过分级调度(作业调度、交换调度、进程调度)实现资源高效利用,核心内容包括作业/进程调度的功能、时机、方式,以及7种常用调度算法,关键是掌握调度逻辑和性能评价指标。

二、分级调度(调度层次体系)

1. 四大调度层次及功能

调度层次 别称 核心功能 适用场景
作业调度 宏观调度、高级调度 从外存后备队列选作业,分配内存/外设等资源,建立进程;作业完成后回收资源 批处理系统、大型机系统
交换调度 中级调度 内外存进程交换(外存就绪/等待进程调入内存,内存暂时不能运行的进程调至外存) 多道程序系统,提升内存利用率
进程调度 微观调度、低级调度 从就绪队列选进程,分配CPU,完成进程上下文切换 所有多道系统(必不可少)
线程调度 - 调度进程内线程,可由OS内核或用户程序实现 多线程系统

2. 作业的状态及转换(4种核心状态)

  • 提交状态:作业从输入设备传入外存的过程。
  • 后备状态:作业全部信息存入外存输入井,等待调入内存(JCB已建立)。
  • 执行状态:作业被作业调度选中,分配资源并创建进程,进入内存运行(进程可能处于就绪/运行/等待状态)。
  • 完成状态:作业运行完毕,等待资源回收和退出系统。
  • 转换逻辑:提交→后备(输入完成)→执行(作业调度)→完成(运行结束)。
  • image-20260101202617449

3. 作业与进程的关系

  • 作业是任务实体(用户提交的任务集合:程序+数据+作业说明书),进程是执行实体(完成任务的运行过程)。
  • 一个作业至少由一个进程组成(系统创建根进程,再按需创建子进程)。
  • 作业在了你存等待调度,进程在内存中竞争CPU资源。

4. 调度性能的衡量指标

(1)面向用户的指标

  • 周转时间:作业从提交到完成的总时间(含等待、执行、I/O等时间)。

  • 平均周转时间:所有作业周转时间的平均值:

    • \[T = \frac{1}{n} \sum_{i=1}^{n} T_i, \quad T_i = \text{完成时间} - \text{提交时间} \]

  • 平均带权周转时间:

    • \[W = \frac{1}{n} \sum_{i=1}^{n} \frac{T_i}{r_i}$$($$r_i$$为作业实际执行时间,综合反映等待和执行效率)。 \]

(2)面向系统的指标

  • 吞吐量:单位时间内完成的作业总数。
  • 设备利用率:CPU、外设等资源的使用占比(如CPU利用率)。
  • 资源均衡利用:搭配CPU繁忙和I/O繁忙的作业,避免资源闲置。
  • 公平性:避免部分作业长期等待。

(3)面向算法的指标

  • 易于实现:算法逻辑简单,开发成本低。
  • 执行开销小:调度过程占用的系统资源少。

三、作业调度

1. 作业控制块(JCB)

  • 核心作用:记录作业的关键信息,是系统管理和调度作业的依据(与作业一一对应)。
  • 主要内容:作业名、作业类型、资源要求、资源使用情况、优先级、当前状态等。

image-20260101204349039

2. 作业调度的核心功能

  1. 记录系统中所有作业的状态和信息。
  2. 按调度算法从后备队列中选择作业。
  3. 为选中的作业分配内存、外设等所需资源。
  4. 为作业创建相应的进程,送入就绪队列。
  5. 作业完成或撤离时,回收资源、撤消进程及JCB,计算执行费用。

3. 作业调度的目标

  • 核心目标:公平合理、高设备利用率、高吞吐量、快响应时间(需折衷,无法同时满足)。
  • 实际原则:与系统设计目标一致、均衡使用资源、保证作业截止时间、缩短平均周转时间。

四、进程调度

1. 进程调度的核心功能

  1. 记录所有进程的执行状态(静态+动态信息)。
  2. 按调度算法选择一个就绪进程。
  3. 完成进程上下文切换(关键步骤):
    1. 检查切换合法性(如原语执行时不可切换)。
    2. 保存被切换进程的现场(程序计数器、寄存器等),移入对应队列(就绪/阻塞)。
    3. 选取新进程,恢复其现场,使其获得CPU控制权。

2. 进程调度的时机(满足任一条件触发)

  • 正在执行的进程运行完毕或异常终止。
  • 进程调用阻塞原语,进入等待状态。
  • 执行P/V操作:P操作导致资源不足阻塞,V操作激活等待队列。
  • 进程提出I/O请求,被阻塞。
  • 系统调用完成,返回用户进程时。
  • 分时系统中时间片用完。
  • 有更高优先级的进程进入就绪态(抢占式调度)。

3. 进程调度的方式

调度方式 核心逻辑 优点 缺点
非抢占式(非剥夺式) 进程一旦获得CPU,直到完成或自身原因阻塞才让出 实现简单、系统开销小 不利于短作业和高优先级进程
抢占式(可剥夺式) 系统可因优先级、时间片等强行剥夺当前进程的CPU 响应快、公平性好 上下文切换频繁、开销大

4. 进程调度的性能衡量

  • 定性指标:公平性(避免进程饥饿)、可靠性(不破坏系统稳定性)、简洁性(低开销)。
  • 定量指标:CPU利用率、响应时间(分时系统)、吞吐量(批处理系统)。

5. 作业调度与进程调度的区别

对比维度 作业调度 进程调度
核心作用 为进程调度做准备(分配除CPU外的资源,创建进程) 直接分配CPU,激活进程运行
资源分配范围 内存、外设等系统资源 仅CPU资源
调度频率 低(作业进入/退出时) 高(进程状态切换频繁)
必要性 部分系统可无(如分时系统) 所有多道系统必不可少

五、常用调度算法(重点)

1. 先来先服务算法(FCFS)

  • 基本思想:按作业提交/进程就绪的先后顺序分配资源(等待最久者优先)。
  • 适用场景:作业调度、进程调度(辅助算法)。
  • 优点:实现简单、系统开销小。
  • 缺点:不利于短作业和I/O繁忙的作业,长作业会阻塞短作业(“饥饿”)。
  • image-20260102002648223

2. 短作业优先算法(SJF)/短进程优先(SPN)

  • 基本思想:优先选择预计执行时间最短的作业/进程。
  • 适用场景:作业调度、进程调度(非抢占式为主,变型为“最短剩余时间优先(SRT)”,支持抢占)。
  • 优点:缩短平均周转时间和带权周转时间,提高吞吐量。
  • 缺点:不利于长作业(可能长期饥饿),难以准确估计执行时间。
  • image-20260102002740776
  • image-20260102002926612

3. 最高响应比优先算法(HRN)

  • 基本思想:兼顾等待时间和执行时间,响应比高者优先(响应比=1+等待时间/执行时间)。
  • 适用场景:作业调度、进程调度(FCFS和SJF的折衷)。
  • 优点:避免短作业抢占长作业,也避免长作业长期等待。
  • 缺点:每次调度需计算响应比,系统开销略增。
  • image-20260102002955158

4. 时间片轮转算法(RR)

  • 基本思想:就绪进程按FCFS排队,每次分配一个时间片,时间片结束后移至队尾,切换下一个进程。
  • 适用场景:进程调度(分时系统核心算法)。
  • 时间片长度确定:$$q = R/N$$(R为目标响应时间,N为最大就绪进程数),需平衡(过长退化为FCFS,过短切换开销大)。
  • 优点:响应快、公平性好,适合交互式系统。
  • 缺点:上下文切换频繁,长作业周转时间长。
  • 响应时间:从进程到达系统到它第一次开始执行的时间间隔。
  • image-20260102003653878
  • image-20260102003744621
  • image-20260102003808995

5. 多级队列算法

  • 基本思想:按作业/进程类型划分多个子队列(如前台终端作业、后台批处理作业),各队列采用不同调度算法。
  • 适用场景:作业调度、进程调度(混合类型系统)。
  • 示例:前台队列用RR,后台队列用FCFS(前台队列优先占用CPU)。
  • 优点:针对性调度,适配不同类型作业需求。
  • 缺点:队列间优先级固定,可能导致低优先级队列饥饿。
  • image-20260102004813265

6. 优先级算法

  • 基本思想:优先调度优先级高的作业/进程(分抢占式和非抢占式)。

  • 优先级分类:

    • 静态优先级:创建时确定,终身不变(依据:作业类型、用户要求、资源需求)。
    • 动态优先级:运行过程中动态调整(如等待时间越长优先级越高,占用CPU越久优先级越低)。
  • 适用场景:作业调度、进程调度(实时系统常用)。

  • 优点:可优先处理紧迫任务。

  • 缺点:低优先级进程可能饥饿(需搭配“老化机制”缓解)。

  • image-20260102004202640

  • image-20260102004228291

  • 补充线性优先级调度算法(SRR)

  • image-20260102005144265

  • image-20260102005153846

第五章 存储管理

一、核心结论

存储管理的核心是高效利用内存资源,通过地址变换、分配回收、共享保护、虚拟存储四大功能,解决内存与外存的统一管理问题,关键技术包括分区、页式、段式、段页式管理,核心是掌握地址映射逻辑、虚拟存储实现及页面置换算法。

二、存储管理概述

1. 存储层次结构

  • 核心层级:CPU→内存(主存,直接访问,断电失数据)→外存(辅存,间接访问,长期存储)。
  • 地址概念
    • 物理地址(绝对地址):内存存储单元的实际编号,可直接寻址。
    • 逻辑地址(相对地址/虚地址):用户编程时使用的地址(首址为0),需通过地址映射转换为物理地址。
  • 程序执行阶段:编辑→编译→链接→装入(构造PCB形成进程)→运行。

2. 存储管理的四大核心功能

  1. 存储分配与回收:为进程分配内存空间,回收释放的空间。
  2. 地址变换:将逻辑地址转换为物理地址(重定位)。
  3. 存储共享与保护:实现代码/数据共享,限制进程仅访问自身地址空间。
  4. 存储器扩充:通过覆盖、交换、虚拟存储技术扩展可用空间。

3. 存储分配方式

分配方式 核心逻辑 适用场景
直接分配 编程/编译时确定物理地址 单道程序系统,灵活性差
静态分配 装入时分配全部资源,运行中不可移动/申请新资源 简单多道系统,资源利用率低
动态分配 装入时分配部分资源,运行中可移动/申请/释放资源 现代多道系统,灵活性高

4. 重定位(地址映射)

  • 定义:将程序的逻辑地址转换为物理地址的过程。
  • 三种实现方式
    • 绝对装入:编程/编译时确定地址,不灵活,不适用于多道系统。
    • 静态重定位:装入时由装入程序完成转换,无需硬件支持,但程序不可移动,难以共享。
    • 动态重定位:运行时由硬件(重定位寄存器)自动转换,支持非连续分配和共享,是现代系统主流方式。

5. 内存共享与保护

(1)保护目的

  • 防止用户进程侵犯系统程序区,避免进程间非法访问。

(2)保护方式

  • 界限保护:
    • 上下界寄存器:检查物理地址是否在首址和末址之间。
    • 基址/限长寄存器:检查逻辑地址是否≤限长(基址为程序起始物理地址)。
  • 访问方式保护(保护键):为内存区域和进程设置保护键,匹配且权限合法方可访问。

6. 虚拟存储器

(1)核心概念

  • 一种不受物理内存结构和容量限制的存储技术,让用户“看到”的内存容量远大于实际物理内存。
  • 物质基础:内存+外存的两级存储结构,地址变换机构。

(2)核心原理

  • 程序装入时仅调入当前需要的部分,运行中需访问的内容不在内存时,由OS自动调入(请求调入/预调入),同时将内存中暂时不用的内容调出至外存。

(3)四大特征

  • 虚拟性:逻辑上扩充内存容量。
  • 离散分配:内存空间可非连续分配。
  • 部分分配:作业分多次调入内存。
  • 多次对换:运行中可换进换出内存内容。

(4)容量限制

  • 上限1:地址字长(如32位地址空间最大4GB)。
  • 上限2:物理内存+外存交换区容量之和。

7. 内外存数据传输控制

  • 应用程序控制:覆盖(Overlay),不同时使用的程序模块共用内存分区,用户负担大。
    • image-20260102133502126
  • OS控制:
    • 交换(Swapping):以整个进程为单位在内外存间交换。
    • 虚拟存储:以程序段/数据段为单位交换(请求调入/预调入)。

三、存储管理基本技术:分区存储管理

1. 核心原理

  • 将内存划分为若干分区,OS占用一个分区,其余分区分配给进程,支持多道程序并发。
  • 关键问题:存在碎片(内碎片:分区内未利用空间;外碎片:分区间难以利用的小空闲区)。

2. 分区管理分类

类型 核心逻辑 优点 缺点
固定分区 系统初始化时划分大小固定的分区(可相等/不等) 实现简单,硬件要求低 内碎片多,内存利用率低
动态分区 按进程需求动态划分分区,大小不固定 内碎片少,利用率高 存在外碎片,管理复杂

3. 动态分区的分配算法

算法名称 核心逻辑 优点 缺点
最先适应法 按空闲区首址升序查找,选择第一个满足要求的分区 分配/回收速度快 低地址空间碎片多
最佳适应法 按空闲区大小升序查找,选择最接近需求的分区 碎片最小 查找耗时,易产生大量小碎片
最坏适应法 按空闲区大小降序查找,选择最大的分区 剩余分区仍可利用 大分区快速耗尽,查找耗时
  • 最先适应法(first-fit)

    • image-20260102133707480
  • 最佳适应法(best-fit)

    • image-20260102133734973
  • 最坏适应法(worst-fit)

    • image-20260102133753038
  • 例题:

    • image-20260102133923685
    • image-20260102133938206

4. 动态分区的回收算法

  • 核心:检查回收分区与相邻空闲区的邻接关系(上空闲区、下空闲区、上下都有),合并为连续大空闲区,减少外碎片。

5. 碎片解决:紧缩技术

  • 将所有占用分区向内存一端移动,合并空闲区为一个连续分区,需硬件支持动态重定位,会增加CPU开销。

四、页式存储管理

1. 基本原理(解决碎片问题)

(1)核心思想

  • 逻辑空间分页:将用户程序地址空间划分为大小相等的页(页面),页号从0开始。
  • 内存空间分块:将内存划分为与页大小相等的内存块(物理块),块号从0开始。
  • 分配原则:以页为单位分配内存,进程的页可装入物理上不相邻的块中。

(2)关键数据结构:页表

  • 与进程一一对应,记录页面与内存块的映射关系,核心字段:页号、块号、存取控制位、中断位(是否在内存)、外存地址。
  • 页表寄存器:存储页表在内存的始址和长度,用于快速查找页表。

2. 地址映射过程

  1. 逻辑地址拆分:页号P=INT(逻辑地址/页大小),页内位移d=逻辑地址MOD页大小。
  2. 检查页号是否越界(P≥页表长度则触发越界中断)。
  3. 由页表寄存器找到页表,根据页号查找对应的块号。
  4. 物理地址=块号×页大小+页内位移。
  • 优化:引入快表(高速联想寄存器),缓存常用页号-块号映射,减少内存访问次数(无需两次访问内存)。

image-20260102145251901

image-20260102145503936

image-20260102145510324

image-20260102150223414

3. 请求页式存储管理(虚拟存储的实现)

(1)核心改进

  • 与纯页式的区别:程序装入时仅调入部分页,运行中需访问的页不在内存时,触发缺页中断,由OS调入对应页。
  • image-20260102213312453

(2)关键问题及解决

  • 如何发现缺页:通过页表中的中断位(1表示不在内存)。
  • 调入策略:请求调入(缺页时调入)、预调入(预测即将访问的页)。
  • 淘汰策略(置换算法):内存无空闲块时,选择需淘汰的页,核心是降低缺页率。
  • image-20260102154915926

(3)常用页面置换算法

算法名称 核心逻辑 优点 缺点
随机淘汰算法 随机选择淘汰页 实现简单 缺页率高,性能差
先进先出(FIFO) 淘汰驻留内存时间最长的页 实现简单 存在Belady现象(分配块数增多,缺页率反而上升)
最近最久未使用(LRU) 淘汰最近一段时间内最久未使用的页 缺页率低,性能好 实现复杂,需记录访问时间
理想淘汰(OPT) 淘汰未来最长时间内不使用的页 缺页率最低 无法实现(需预知访问序列)
LRU近似算法 最不经常使用(LFU:淘汰访问次数最少的页)、最近未使用(NUR:淘汰访问位为0的页) 平衡性能与实现复杂度 性能略逊于LRU
  • 补充:轮转法,循环换出内存可用区内一个可以被换出的页,无论该页是刚被换进或已换进内存很长时间。

  • 先进先出FIFO

    • image-20260102214603477
    • image-20260102214723323
  • 最佳置换算法OPT(理想化),每次需要置换时,往后找到最远被访问的那个进行置换

    • image-20260102214123499
  • 最近最久未使用LRU

    • image-20260102215033698
  • LRU近似算法

    • image-20260102215701010
    • image-20260102215718291
    • image-20260102215743916

4. 存储保护

  • 地址越界保护:检查页号是否在0~页表长度-1之间。
  • 存取控制保护:通过页表中的存取控制位(读/写/执行)限制访问权限。

5. 优缺点

  • 优点:解决碎片问题,支持虚拟存储,内存利用率高。
  • 缺点:需硬件支持(地址变换机构、缺页中断),存在内碎片(最后一页未用完),可能产生抖动。

五、段式存储管理

1. 基本概念(满足用户编程逻辑需求)

(1)核心思想

  • 按程序的逻辑结构分段(如主程序、子程序、数组),每段是逻辑上完整的信息块,有独立段名和段号,段长不固定。
  • 内存分配:以段为单位分配连续内存块,同一进程的各段可离散分布。

(2)关键数据结构:段表

  • 与进程一一对应,核心字段:段号、段长、内存始址(外存始址)、存取方式、状态位(是否在内存)。
  • 段表地址寄存器:存储段表始址和长度。
  • image-20260103003857916

2. 地址映射过程

  1. 逻辑地址拆分:段号S、段内位移W。
  2. 检查段号是否越界(S≥段表长度则触发越界中断)。
  3. 查找段表,获取该段的内存始址和段长,检查W是否越界(W≥段长则触发越界中断)。
  4. 物理地址=段的内存始址+段内位移。

image-20260103004636694

3. 缺段中断与处理

  • 段不在内存时触发缺段中断,OS按动态分区分配算法为段分配内存,调入段并更新段表,返回继续执行。

4. 段的共享与保护

  • 共享:不同进程的段表中,相同段名对应同一内存始址,设置合理存取权限即可共享逻辑完整的段(如公用子程序)。
  • 保护:段号越界保护、段内位移越界保护、存取权限保护。

5. 与页式管理的异同

对比维度 页式管理 段式管理
划分依据 物理单位(系统固定大小) 逻辑单位(用户按功能划分)
大小特性 页大小固定 段长不固定
地址空间 一维(页号+页内位移) 二维(段号+段内位移)
核心优势 解决碎片问题,内存利用率高 符合编程逻辑,便于共享、动态链接
核心缺点 不利于共享(页无逻辑完整性) 存在外碎片,段长受内存空闲区限制

6. 优缺点

  • 优点:支持虚拟存储,便于共享和动态链接,段长可动态增长。
  • 缺点:存在外碎片,需更多硬件支持,可能产生抖动。

六、段页式存储管理(结合页式与段式优势)

1. 基本思想

  • 逻辑空间:先分段(按逻辑结构),段内再分页(页大小与内存块一致)。
  • 内存分配:以页为单位分配内存块,段的大小不受内存空闲区限制。

2. 关键数据结构

  • 段表:每个进程一张,记录段号、页表始址、页表长度。
  • 页表:每个段一张,记录页号与内存块的映射关系。
  • 段表地址寄存器:存储段表始址和长度。

3. 地址映射过程(需三次内存访问)

  1. 逻辑地址拆分:段号S、段内页号P、页内位移d。
  2. 查找段表,获取该段的页表始址,检查S是否越界。
  3. 查找页表,获取对应的内存块号,检查P是否越界。
  4. 物理地址=块号×页大小+页内位移d。
  • 优化:引入快表,缓存S、P、块号映射,减少内存访问次数。
  • image-20260103011840684

4. 优缺点

  • 优点:兼具段式的逻辑完整性(便于共享)和页式的无外碎片(内存利用率高)。
  • 缺点:地址映射复杂,需更多硬件支持,系统开销大。

七、局部性原理和抖动问题

1. 局部性原理(虚拟存储的理论基础)

  • 程序执行时,CPU集中访问程序的某个部分(时间局部性:近期访问的内容可能再次访问;空间局部性:邻近地址的内容可能被连续访问)。

2. 抖动(颠簸)

(1)定义

  • 页面在内存与外存之间频繁交换,调度页面的时间远超进程实际运行时间,系统效率急剧下降。

(2)产生原因

  • 页面置换算法不合理,或分配给进程的物理块数少于其工作集(进程运行所需的最低内存块数)。

(3)解决对策

  • 选择合理的置换算法(如LRU)。
  • 为进程分配足够的物理块数(不小于工作集)。
  • 减少并发进程数,避免内存过度竞争。

image-20260103012808078

八、补充知识:二级页表

image-20260103121559348

第六章 文件管理

一、核心结论

文件管理的核心是实现按名存取,通过文件的逻辑/物理结构设计、存储空间管理、目录管理和存取控制,解决信息的组织、存储、共享与保护问题,关键技术包括文件结构设计、空闲空间分配、目录检索和磁盘调度。

二、文件系统的基本概念

1. 文件与文件系统

  • 文件:程序或数据的集合,是一组赋名的相关联字符流或记录的集合。
  • 文件系统:操作系统中管理文件的软件和数据的总称,负责文件的建立、撤消、读写、修改、复制、共享和存取控制。

2. 文件的分类(按不同维度)

分类维度 具体类型 核心特点
性质与用途 系统文件、用户文件、库文件 系统文件为OS核心,库文件为标准子程序
保护方式 只读文件(R)、读写文件(RW)、可执行文件(E)、不保护文件 限制用户操作权限,防止非法修改
组织处理方式 普通文件、目录文件、特殊文件(UNIX中I/O设备) 目录文件存储文件目录信息,特殊文件映射外部设备
信息流 输入文件、输出文件、输入/输出文件 输入文件仅可读,输出文件仅可写
数据形式 源文件、目标文件、可执行文件 源文件为源码,目标文件为编译后二进制,可执行文件为链接后可运行文件

3. 文件系统的功能

  • 系统视角:文件空间管理、定义文件逻辑/物理结构、信息查找、共享与保护。
  • 用户视角:核心是按名存取,无需关注文件物理存储位置。

三、文件的组织结构

1. 文件的逻辑结构(用户可见,与存储设备无关)

(1)两种核心类型

逻辑结构 核心定义 适用场景 优缺点
字符流式文件 无结构字节序列,基本单位是字节,文件长度为字符数 源程序、目标文件等 管理简单、操作方便;查找特定信息困难
记录式文件 结构化文件,由相关联的记录组成,每条记录含多个域,有唯一键 数据库文件、表格文件 便于修改、查找;管理复杂

(2)记录式文件的常用结构

  • 连续结构:记录按生成顺序排列,利于追加,搜索性能差。
  • 多重结构:按键建立记录队列,搜索效率优于连续结构。
  • 转置结构:同一键的记录指针集中存放,适合按键查找。
    • 比方说查询某个字在哪些记录中出现过
  • 顺序结构:按键的规定顺序(如时间、字母)排列,适合有序搜索。

2. 文件的存取方法

存取方法 核心逻辑 适用文件类型
顺序存取 按文件逻辑地址顺序读写(记录式按记录排列顺序,流式按指针偏移) 字符流式文件、连续结构记录文件
随机存取(直接) 按记录号或读写指针直接定位到目标位置 定长记录文件、索引文件
按键存取 按关键字查找记录,先找键再找记录 数据库文件、复杂记录文件

3. 文件的物理结构(外存存储形式,依赖存储设备)

(1)三种核心类型

物理结构 核心逻辑 适用存储设备 优缺点
连续文件(顺序结构) 文件信息存放在连续物理块中,目录记录始址和块数 磁带、磁盘(顺序存取) 结构简单、存取速度快;无法动态增长、产生内碎片
链接文件(串联结构) 文件信息存放在非连续物理块中,块间通过指针链接,目录记录始址和末址 磁盘(顺序存取) 可动态增长、无内碎片;搜索效率低、仅支持顺序存取
索引文件 为文件建立索引表,记录逻辑块与物理块的映射,目录记录索引表地址 磁盘(随机存取) 支持动态增长和随机存取;占用额外存储空间、需多次访问内存

(2)索引文件的扩展结构

  • 多级索引:索引表分多级,解决大文件索引表占用过多内存的问题。
    • image-20260104000931899
  • 混合索引:结合直接寻址和多级索引,兼顾小文件效率和大文件支持(如UNIX的I结点)。
    • image-20260104000912557

4. 存储设备特性

  • 顺序存取设备(如磁带):需按物理块顺序存取,块间有间隙,仅支持顺序存取。
  • 直接存取设备(如磁盘):可直接定位到任意物理块,支持顺序和随机存取,物理块位置由“磁头号+柱面号+扇区号”标识。

5. 磁盘调度算法(优化寻道时间)

算法名称 核心逻辑 优点 缺点
先来先服务(FCFS) 按访问请求到达顺序服务 简单、公平 寻道时间长,磁头反复移动
最短寻道时间优先(SSTF) 优先服务距当前磁头最近的请求 平均寻道时间短 可能导致部分请求饥饿
扫描算法(SCAN,电梯算法) 磁头按固定方向移动,服务沿途请求,到达边界后反向 无饥饿问题、效率高 对边界请求响应稍慢
  • image-20260104001730252
  • image-20260104001745226
  • image-20260104001757816
  • 实际系统普遍采用最短寻道时间优先算法,简单有效,性价比高

四、文件存储空间的管理(空闲块管理)

1. 四种核心方法

管理方法 核心逻辑 分配与回收过程 优缺点
空闲文件目录法 记录所有连续空闲区的目录(含起始块号、块数、空闲块号) 分配:查找合适空闲区,拆分或删除目录项;回收:合并相邻空闲区,新增目录项 适用于连续文件;空闲区多时目录庞大
空闲块链法 所有空闲块通过指针链接成链,内存仅存链头指针 分配:从链头摘取所需块;回收:将块插入链尾 实现简单;查找效率低
成组链接法 空闲块按50块分组,每组首块存前一组信息,最后一组信息存于文件资源表 分配:从当前组栈顶取块;回收:将块压入当前组栈,组满则写入外存 兼顾效率和空间,UNIX常用
位示图法 用二进制位映射物理块状态(0=空闲,1=占用) 分配:查找值为0的位,转换为块号,置1;回收:将块号转换为位,置0 查找快、占用空间小;需转换计算
  • 空闲表法

    • image-20260104002408399
  • 空闲块链法

    • image-20260104002441800
  • 成组链接法

    • image-20260104003516597

2. 关键计算(位示图法)

  • 块号→位坐标(行i、列j,从1开始):i = 块号 ÷ 每行位数 + 1;j = 块号 % 每行位数 + 1。
  • 位坐标→块号(从0开始):块号 = 每行位数 × (i-1) + (j-1)。
  • 注意:该公式对应的是i,j为1-based,若为0-based则如下图所示
  • image-20260104002702075

五、文件目录管理(实现按名存取)

1. 文件的组成

  • 文件体:文件本身的信息(字符流或记录)。
  • 文件控制块(FCB):文件存在的标志,记录文件名、物理地址、存取控制、管理信息等。

2. 目录结构类型

目录结构 核心逻辑 优点 缺点
单级目录 系统建立一张统一目录,所有文件占一个表项 简单、按名存取 不允许重名、查找慢、不便于共享
二级目录 分主目录(MFD)和用户文件目录(UFD),MFD记录用户名和UFD地址 解决重名、提高查找速度 不适用于大量用户和文件
多级(树形)目录 目录呈树形结构,目录也作为文件(目录文件),路径名标识文件位置 层次清晰、支持重名、查找快 结构复杂
  • 二级目录
    • image-20260104011306013

3. 文件共享的目录实现方法

  • 绕道法:用户指定共享文件的完整路径,访问效率低。
  • 链接法:在目录间建立指针,直接指向共享文件目录。
    • image-20260104011413061
  • 基本文件目录表(BFD)+ 符号文件目录表(SFD):BFD存文件物理信息(唯一内部ID),SFD存文件名与ID映射,共享时复用BFD项。
    • image-20260104011506736
    • image-20260104011512661

4. 目录操作核心:打开与关闭文件

  • 打开文件(fopen):将文件FCB从外存调入内存,验证访问权限,返回文件描述符(fd),后续操作通过fd进行。
  • 关闭文件(fclose):释放内存中的FCB,若文件修改则写回外存,切断用户与文件的联系。

六、文件存取控制(共享、保护、保密)

1. 核心目的

  • 共享:不同用户共同使用文件,节省空间。
  • 保护:防止文件内容被非法修改或破坏。
  • 保密:防止未经授权的用户访问文件。

2. 四种控制方式

控制方式 核心逻辑 优点 缺点
存取控制矩阵 二维矩阵记录所有用户对所有文件的权限(读/写/执行) 逻辑简单 文件和用户多时矩阵庞大
存取控制表 以文件为单位,记录各组用户的存取权限 灵活、高效 管理稍复杂
口令方式 文件创建时设置口令,访问时验证 占用空间小、验证快 可靠性差、权限单一
密码方式 文件存储时加密,访问时用密钥解密 保密性强 加密解密耗费CPU资源
  • 存取控制矩阵
    • image-20260104011706219
  • 存取控制表
    • image-20260104011733470

第七章 设备管理

一、核心结论

设备管理的核心是高效管理I/O设备,实现CPU与设备、设备与设备的并行工作,核心技术包括数据传送控制(4种方式)、中断处理、缓冲优化、设备分配策略及SPOOLING虚拟设备技术,最终为用户提供透明、高效的设备使用接口。

二、设备管理概述

1. 设备的分类(多维度划分)

分类维度 具体类型 核心特征
操作特性 存储设备(磁盘、磁带、光盘)、I/O设备(键盘、打印机、扫描仪) 存储设备用于长期保存数据,I/O设备用于信息输入输出
隶属关系 系统设备(键盘、显示器)、用户设备(扫描仪、外接硬盘) 系统设备默认配置,用户设备需安装驱动程序
信息组织方式 字块设备(磁盘、磁带)、字符设备(键盘、打印机) 字块设备以“块”为单位存取,字符设备以“字符”为单位存取
资源分配角度 独占设备(打印机)、共享设备(磁盘)、虚拟设备(SPOOLING模拟的打印机) 独占设备一次仅分配给一个进程,共享设备可分时供多个进程使用,虚拟设备由共享设备模拟

2. 设备管理的任务与功能

(1)核心任务

  • 合理分配I/O设备,控制设备与内存间的数据传输。
  • 提供透明接口,让用户编程无需关注设备硬件特性。
  • 提高并行度(CPU与设备、设备与设备、进程与进程)。

(2)核心功能

  • 提供与进程管理的接口,转达进程的设备资源请求。
  • 设备分配与回收,将未分配到设备的进程放入等待队列。
  • 实现设备与CPU、设备与设备的并行操作(依赖控制器、通道等硬件)。
  • 缓冲区的分配、释放与管理,缓解CPU与设备的速度矛盾。

三、数据传送控制方式(4种核心方式)

控制方式 核心原理 优点 缺点 适用场景
程序直接控制方式 用户进程直接控制设备与内存的数据传输,循环测试设备状态 控制简单,无需复杂硬件支持 CPU利用率极低,无法并行工作 早期低速设备、简单系统
中断控制方式 设备准备就绪后发中断请求,CPU暂停当前进程处理中断,完成数据传输 提高CPU利用率,支持并行操作 频繁中断会消耗CPU时间,可能数据丢失 中低速设备(键盘、打印机)
DMA方式(直接存取) 由DMA控制器直接控制设备与内存的数据传输,仅启动和结束时需CPU干预 大幅降低CPU负担,传输效率高 需专用DMA控制器,成本较高 高速块设备(磁盘、光盘)
通道控制方式 独立于CPU的I/O处理机,执行通道指令控制多设备与内存的数据传输 完全解放CPU,并行度最高 硬件复杂,仅大中型系统支持 多设备、高I/O需求的系统
  • 程序直接控制方式

    image-20260104013905725

    • image-20260104013830250
  • 中断控制方式

    • image-20260104013929564
    • image-20260104013941618
  • DMA方式

    image-20260104014213734

    • image-20260104014124372
  • 通道方式

    • image-20260104014356897
  • 对比

    • image-20260104014427539

关键对比

  • 中断方式 vs DMA方式:中断需CPU参与数据传输,DMA无需;DMA的中断次数远少于中断方式。
  • 通道方式 vs DMA方式:通道可控制多设备,DMA通常控制单设备;通道有独立指令系统,DMA无。

四、中断技术

1. 核心概念

  • 中断:CPU执行期间收到急需处理的事件请求,暂停当前程序转去处理事件,完成后返回原程序。
  • 中断源:引起中断的事件(如I/O完成、算术溢出、设备错误)。
  • 中断屏蔽:通过软件有选择地封锁部分中断,仅允许关键中断响应。

2. 中断的分类

分类类型 具体类型 核心区别
按中断源位置 外中断(I/O中断、时钟中断)、内中断(陷阱/异常,如除数为零、非法指令) 外中断与现行指令无关,内中断由现行指令引起
按实现方式 硬中断(硬件触发)、软中断(进程间模拟硬中断的信号通信) 硬中断CPU自动响应,软中断需接收进程获得CPU后处理

3. 中断处理过程(核心步骤)

  1. 关中断:防止中断嵌套导致现场混乱。
  2. 保存现场:保存被中断进程的CPU寄存器、程序计数器等信息。
  3. 分析中断原因:识别中断源,找到对应的中断处理程序。
  4. 执行中断处理子程序:完成数据传输、错误处理等操作。
  5. 恢复现场:恢复被中断进程的运行环境。
  6. 开中断:允许后续中断响应。

image-20260104122616379

4. CPU响应中断的条件

  • 存在有效的中断请求。
  • CPU处于开中断状态(PSW中断允许位为1)。
  • 中断源优先级高于当前CPU执行程序的优先级。

五、缓冲技术

1. 引入缓冲的核心目的

  • 缓和CPU与I/O设备的速度不匹配矛盾。
  • 减少CPU的中断次数(缓冲区满/空时才发中断)。
  • 解决DMA/通道方式的瓶颈问题。

2. 缓冲的分类(按缓冲区数量)

缓冲类型 核心结构 优点 缺点 适用场景
单缓冲 CPU与设备间仅设一个缓冲区,互斥使用 实现简单 速度匹配效果有限 简单I/O场景
双缓冲 设两个缓冲区,交替用于输入/输出 提升并行度 难以匹配高速设备 中低速设备
多缓冲 多个缓冲区分为输入缓冲区和输出缓冲区 适配多设备并行 管理复杂 多设备并发场景
缓冲池 多个缓冲区组成统一区域,可用于输入或输出 利用率最高,灵活通用 需复杂管理机制 现代操作系统主流方式

3. 缓冲池的管理

(1)核心队列

  • 空白缓冲队列(em):存放未使用的缓冲区。
  • 输入缓冲队列(in):存放装满输入数据的缓冲区。
  • 输出缓冲队列(out):存放装满输出数据的缓冲区。

(2)工作方式

  • 收容输入:从em队列取缓冲区,装入输入数据后送入in队列。
  • 提取输入:从in队列取缓冲区,将数据送入CPU后,缓冲区归还em队列。
  • 收容输出:从em队列取缓冲区,装入输出数据后送入out队列。
  • 提取输出:从out队列取缓冲区,将数据送入设备后,缓冲区归还em队列。
  • image-20260104124014663

六、设备分配技术(核心重点)

1. 设备分配的核心数据结构(4张表)

数据结构 核心作用 关键字段
系统设备表(SDT)System Device Table 记录系统所有I/O设备的全局信息,仅一张 设备类型、设备标识符、DCT指针、驱动程序入口
设备控制表(DCT)Device Control Table 记录单台设备的详细信息,每台设备一张 设备状态(忙/闲)、COCT指针、设备等待队列指针
控制器控制表(COCT)Controller Control Table 记录控制器的使用情况,每个控制器一张 控制器状态(忙/闲)、CHCT指针、控制器等待队列指针
通道控制表(CHCT)Channel Control Table 记录通道的使用情况,每个通道一张(仅通道控制方式有) 通道状态(忙/闲)、通道等待队列指针

2. 设备分配的方式

分配方式 核心逻辑 优点 缺点 适用设备
静态分配 作业执行前一次性分配所需设备、控制器、通道,直至作业结束释放 无死锁风险 设备利用率极低 独占设备(打印机)
动态分配 进程需要时申请设备,使用完毕后立即释放 设备利用率高 分配不当可能导致死锁 共享设备(磁盘)、虚拟设备

3. 设备独立性(设备无关性)

  • 定义:应用程序独立于具体物理设备,用户编程时使用逻辑设备名,系统自动映射为物理设备名。
  • 优点:提高系统适应性和可扩展性,设备故障时只需修改映射,无需修改程序。
  • image-20260104133500330

4. 设备分配策略

  • 先请求先分配:按进程申请设备的先后顺序分配,公平简单。
  • 优先级高者先分配:高优先级进程优先获得设备,同优先级按先请求先分配。

5. 设备分配步骤(通道控制方式下)

  1. 分配设备:查找SDT和DCT,若设备空闲则分配,否则将进程放入设备等待队列。
  2. 分配控制器:查找COCT,若控制器空闲则分配,否则将进程放入控制器等待队列。
  3. 分配通道:查找CHCT,若通道空闲则分配,否则将进程放入通道等待队列。
  4. 启动I/O:三者均分配成功后,启动设备进行数据传输。

image-20260104133914219

6. 虚拟设备与SPOOLING系统

(1)虚拟设备

  • 定义:通过软件技术将独占设备模拟为多台共享的虚拟设备,提高设备利用率。

(2)SPOOLING系统(假脱机技术)

  • 核心思想:利用高速共享设备(磁盘)模拟独占设备,实现多进程并行使用。
  • 组成部分:
    • 硬件:输入井(存输入数据)、输出井(存输出数据)、输入缓冲区、输出缓冲区。
    • 软件:预输入进程(输入设备→输入井)、缓输出进程(输出井→输出设备)、输入/输出井管理进程。
  • 优点:提高I/O速度,实现设备共享,模拟虚拟设备。

七、I/O进程控制与设备驱动程序

1. I/O进程控制

  • 定义:从进程I/O请求开始,到设备分配、启动I/O、中断响应的全过程控制。
  • 实现方式:作为请求进程的一部分、作为当前进程的一部分、由专门的I/O进程实现。

2. 设备驱动程序

  • 定义:直接控制物理设备进行I/O操作的子程序集合,负责设置设备寄存器、启动设备。
  • 管理方式:通过设备开关表(DST)管理,记录设备各类操作子程序的入口地址。
posted @ 2026-01-04 14:12  Persona_owl  阅读(28)  评论(0)    收藏  举报