--- title: "《操作系统》计算机系统概述" date: 2022-08-18T15:53:40+08:00 --- ## 操作系统的基本概念 ### 操作系统的概念 * 负责管理协调硬件、软件等计算机资源的工作 * 操作系统为上层用户,应用程序提供简单易用的服务 * 操作系统是一种系统软件 ### 操作系统的特征 * 并发和共享是最基本的两个性质 * 并发和共享互为存在条件 * 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题 * 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行 * 没有并发和共享就谈不上虚拟和异步 #### 并发 * 并发指两个或多个事件在同一时间间隔内发生 * 并行:系统具有同时进行运算或操作的特性(同时刻) * 可并行的有【处理机与设备】【处理机与通道】【设备与设备】 * 不可并行的有【进程与进程】 * 真正实现并行的为多核处理机 同一时间间隔(并发)和同一时刻(并行)的区别: * 宏观上有多道程序同时进行,微观上这些程序依旧是分时交替执行的,操作系统的并发性正是分时得以实现的 * 并行性则是具有同时进行运算或操作的特性,同一时刻能完成两种或两种以上的工作,需要硬件的支持 #### 共享 共享通常指系统中的资源可供内存中多个并发执行的进程共同使用,拥有两种资源共享方式 * 互斥共享方式 当进程A访问某个资源时,必须先提出请求,若此时该资源空闲,则系统将其分配给进程A使用,此后有其他进程也要访问该资源时,就必须等待。仅当进程A访问完并释放该资源后,才允许另一个进程对该资源进行访问。 临界资源(独占资源): 一段时间内只允许一个进程访问的资源 互斥共享要求一种资源在一段时间内(哪怕是很小的时间)只能满足一个请求,否则就会出现严重的问题 * 同时访问方式 宏观上存在一些资源允许多个进程同时访问,微观上这些进程是交替地对该资源进行访问,即分时共享 #### 虚拟 虚拟是指把一个物理上的实体变为若干逻辑上的对应物。 * 时分复用技术,如处理器的分时共享 * 空分复用技术,如虚拟存储器 #### 异步 * 程序异步性:多道程序环境允许多个程序并发执行,但由于资源有限,进程执行并非一贯到底,而是走走停停,以不可预知的速度向前推进 * 异步性导致的问题: 异步性会使操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。然而在运行环境相同的情况下,操作系统就需要保证多次运行进程后得到的结果相同 ### 操作系统的目标和功能 操作系统应具有以下功能来给多道程序提供良好的运行环境 1. 处理机管理、存储器管理、设备管理和文件管理 2. 需向用户提供接口以方便用户使用 3. 可用于扩充机器来提供更方便的服务、更高的资源利用率 #### 操作系统作为计算机系统资源的管理者 * 处理机管理 * 在多道程序环境下,处理机的分配和运行都以进程(线程)为主要单位 * 主要功能 * 进程控制 * 进程同步 * 进程通信 * 死锁处理 * 处理机调度 * 处理机的管理可归结为对进程的管理,因此进程创建、撤销、管理、避免冲突、合理共享就是进程管理的主要任务 * 存储器管理 * 存储器管理用于给多道程序的运行提供良好环境,便于用户使用及提高内存利用率 * 主要功能: * 内存分配与回收 * 地址映射 * 内存保护与共享 * 内存扩充 * 文件管理 * 计算机的信息都是以文件的形式存在的 * 文件存储空间的管理 * 目录管理 * 文件读写管理和保护 * 设备管理 * 主要任务是完成用户I/O请求,方便用户使用设备,提高设备利用率 * 主要功能 * 缓冲管理 * 设备分配 * 设备处理 * 虚拟设备 #### 操作系统作为用户与计算机硬件系统之间的接口 * 用户使用接口 * GUI用户界面接口 * 命令接口 * 联机命令接口:用户发送一次命令,系统执行一次,主要是交互性,适用于分时或实时系统 * 脱机命令接口:用户一次性发送命令清单,系统按清单执行,无法中途干预,适用于批处理系统,可解决独占问题 * 软件使用接口 * 程序接口(系统调用) #### 操作系统用作扩充机器 * 裸机:没有任何软件支持的计算机 * 扩充机器/虚拟机:覆盖了软件的机器 -------------------------------------------------------------------------------------- ## 操作系统发展历程 ### 手工操作阶段 用户在计算机上的所有计算流程都要人工干预 #### 缺点 * 用户独占全机,资源利用率低 * CPU等待手工操作,CPU利用不充分 ### 单道批处理系统 #### 定义 * 程序封闭性,程序执行的结果只取决与进程本身,不受外界影响 * 失去封闭性后,不同速度下的进程执行结果不同 #### 特点 * 自动性,顺利的情况下,同一磁带上的同一批作业能够自动逐个运行 * 顺序性,磁带上的各道作业顺序地进入内存 * 单道性,内存中仅有一道程序运行 #### 缺点 * 资源利用率低,吞吐量小 ### 多道批处理系统 #### 定义 * 批处理:允许多个用户将若干作业提交给计算机系统集中处理 * 多道性则是为了提高系统利用率和吞吐量 #### 特点 * 多道,共享性,宏观上并行,微观上串行 * 引入多道后,系统失去封闭性和顺序性 * 制约性,程序执行因为共享资源和协同所有产生了竞争,相互制约 * 考虑竞争的公平性,程序断续执行 #### 优点 * 资源利用率高 * 系统吞吐量大 * CPU利用率高 * IO设备利用率高 #### 缺点 * 用户响应时间长 * 不提供人机交互能力(用户无法干预批处理作业) ### 分时操作系统 #### 定义 * 允许多个用户以交互的方式使用计算机的操作系统 * 快速响应用户(分时系统产生原因) * 响应时间 = 时间片*用户 * 进度调度通常采用抢占式的优先级优先 #### 特点 * 同时性 * 交互性,用户能够方便进行人机对话 * 独立性,多个用户可以彼此独立地进行操作 * 及时性,用户请求能在很短的时间内响应 #### 优点 * 提供人机交互能力 #### 缺点 * 不能在规定的时间内做出处理 ### 实时操作系统 #### 定义 * 在该操作系统下,计算机系统能够及时处理过程控制反馈的数据并给出响应 #### 特点 * 硬实时系统:必须在绝对严格的时间内完成处理(自动驾驶系统) * 软实时系统:能接受偶尔违反时间规定(订票系统) #### 优点 * 安全可靠 * 及时处理 * 快速处理 ### 网络操作系统和分布式计算机系统 #### 特点 * 分布性 * 并行性 ### 分布式计算机系统 #### 特点 * 网络中各种资源的关系 * 网络中各计算机间的通信 --------------- ## 操作系统结构 * 分层结构 * 特性 * 内核分多层,每层可单向调用更低一层提供的接口 * 优点 * 便于调试和验证,自底向上逐层调试验证 * 易扩充和维护,各层间调用接口清晰固定 * 缺点 * 仅可调用相邻低层,难以合理定义各层边界 * 效率低,不可跨层调用,系统调用执行时间长 * 模块化 * 特性 * 内核 = 主模块 + 可加载内核模块 * 主模块只负责核心功能,如进程调度,内存管理 * 可加载内核模块:可动态加载新模块到内核,无需重新编译整个内核 * 优点 * 模块间逻辑清晰易维护,确定模块间接口后即可多模块同时开发 * 支持动态加载新内核模块(如:安装设备驱动程序),增强OS适应性 * 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高 * 缺点 * 模块间的接口定义未必合理,实用 * 模块间相互依赖,更难调试和验证 * 宏内核 * 特性 * 所有的系统功能都放在内核里 * 优点 * 性能高,内核内部各种功能都可以直接相互调用 * 缺点 * 内核庞大功能复杂,难以维护 * 大内核中某个功能模块出错,就可能导致整个系统崩溃 * 微内核 * 特性 * 只把中断,原语,进程通信等最核心的功能放入内核,进程管理,文件管理,设备管理等功能以用户进程的形式运行在用户态 * 优点 * 内核小功能少,易于维护,内核可靠性高 * 内核外的某个功能模块出错不会导致整个系统崩溃 * 缺点 * 性能低,需要频繁切换用户/核心态,用户态下的各功能模块不可直接互相调用,只能通过内核的消息传递来间接通信 * 外核(exokernel) * 特性 * 内核负责进程调度,进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全 * 优点 * 外核可直接给用户分配不虚拟,不抽象的硬件资源,使用户进程可以更灵活地使用硬件资源 * 减少虚拟硬件资源的映射层,提升效率 * 缺点 * 降低系统的一致性 * 使系统更加复杂 ----------- ## 操作系统引导 ![](../../images/408/《操作系统》计算机系统概述/system_boot_pic.jpg) * 启动过程 1. CPU加电,CS:IP指向FFFF0H 2. 执行JMP指令跳转到BIOS 3. 登记BIOS中断例程入口地址 4. 硬件自检 5. 进行操作系统引导 * 引导流程 1. CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序 2. 将磁盘的第一块主引导记录读入内存,执行磁盘引导程序,扫描分区表 3. 从活动主区(主分区)读入分区引导记录,执行其中的程序 4. 从根目录下找到完整的操作系统初始化程序并执行,完成开机的一系列操作 * 加电启动过程中执行程序的过程 * 自检程序 * 引导装入程序/自举装入程序 * 位于ROM,作为BIOS的组成部分 * 用于启动具体的设备 * 引导程序 * 位于装有操作系统硬盘的活动分区的引导扇区的程序 * 用于引导操作系统 * 操作系统 * 被装入RAM中 ----------- ## 虚拟机 使用虚拟化技术,将一台物理机器虚化为多台虚拟机器VM,每个虚拟机器都可用于独立运行一个操作系统 | | 第一类VMM(例:WSL) | 第二类VMM(VMWare) | |---|---|---| |对物理资源的控制权 | 直接运行在硬件之上,能直接控制和分配物理资源 | 运行在Host OS之上,依赖于Host OS 为其分配物理资源 | | 资源分配方式 | 安装Guest OS时,VMM要在原本的硬盘上自行分配存储空间,类似于外核的分配方式,分配未经抽象的物理硬件 | Guest OS 拥有自己的虚拟磁盘,该盘实际上是Host OS文件系统的一个大文件,Guest OS分配到的内存是虚拟内存 | | 性能 | 性能更好 | 性能更差,需要Host OS作为中介 | | 可支持的虚拟机数量 | 更多,不需要和Host OS竞争资源,相同的硬件资源可以支持更多的虚拟机 | 更少,Host OS 本身需要使用物理资源,Host OS上运行的其他进程也需要物理资源 | | 虚拟机的可迁移性 | 更差 | 更好,只需导出虚拟机镜像文件即可迁移到另一台Host OS上,商业化应用更广泛 | | 运行模式 | 运行在最高特权级(Ring 0 )可以执行最高特权的指令 | 部分运行在用户态,部分运行在内核态,Guest OS发出的系统调用会被VMM截获,转化为VMM对Host OS的系统调用 | ## 操作系统运行的环境 ### 处理器运行的机制 * 程序运行原理 * 高级语言编写代码,转换为机器指令 * 程序运行过程就是CPU执行指令的过程 * 两种程序 * 内核程序 * 应用程序 * 两种指令 * 特权指令:不允许用户直接使用的指令 * 对I/O设备操作指令 * 获取特殊寄存器的指令 * 有关访问程序状态的指令 * 置中断指令 * 关中断指令 * 清内存指令 * 置时钟指令 * 非特权指令:允许用户直接使用的指令,不能直接访问系统中的软硬件资源,只限于访问用户的地址空间 * 访管/trap指令 * 两种处理器状态 * 核心态【管态】 * 时钟管理相关指令【置时钟指令】 * 中断机制相关的指令【时钟中断程序】 * 原语相关的指令 * 系统控制的数据结构与处理【进程调度程序】【进程切换】【缺页处理程序】【系统调用命令】 * 用户态【目态】 * 命令解释程序【属命令接口,面向用户】 * 访管/Trap指令,跳转指令,压栈指令 * 广义指令(系统调用)的调用 * 外部中断,缺页 * 改变处理器状态 * 内核态$\to$用户态 : 发生在中断返回用户程序是,需要一条修改PSW(程序状态字)的特权命令 * 用户态$\to$内核态 : 发生在中断时,通过硬件完成 * 状态区分目的: 保护系统程序 * 内核功能 * 时钟管理:实现计时功能 * 中断处理:负责实现中断机制 * 设备管理:完成设备的请求和释放,以及设备启动等功能 * 文件管理:完成文件的读、写、创建和释放等功能 * 进程管理:完成进程的创建、撤销、阻塞及唤醒等功能 * 进程通信:完成进程间的信息传递或信号传递等功能 * 内存管理:完成内存的分配,回收及获取作业占用内存大小及地址等功能 * 原语 * 一种特殊的程序 * 处于操作系统最底层,最接近硬件的部分 * 运行具有原子性(只能一气呵成,不可中断) * 运行时间较短,调用频繁 * 外中断和内中断 * 异常(内中断) * 基本概念 * 由CPU内部产生的意外事件 * CPU执行一条命令时,由CPU在其内部检测到的,与正在执行指令相关的同步事件 * 故障和自陷为异常 * 终止异常和外中断属于硬件中断 * 分类 * 故障:在引起故障的指令启动之后、执行结束前被检测到的异常事件 * 指令译码时,出现非法操作码 * 取数据时,出现缺页或缺段 * 除数为零 * 地址越界 * 自陷:也称陷阱或陷入,是预先安排的一种异常事件,如同预先设置好的陷阱一样 * x86机器中,用于程序调试的断点设置和单步跟踪功能 * 系统调用指令 * 条件自陷指令 * 终止:在执行指令的过程中发生了使计算机无法继续执行的硬件故障,程序无法执行,只能终止 * 控制器出错 * 存储器校验错 * 调出中断服务程序来重启系统 * 执行时间 * CPU在执行指令时检查是否有异常产生 * 不同点(与外中断) * 缺页或溢出等异常事件是特定指令在执行过程中产生的 * 异常的检测由CPU自身完成,不需要外部某个信号通知CPU * 中断(外中断) * 基本概念 * 由来自CPU外部的设备发出的中断请求(常用于输入输出) * 典型的由外部设备触发的,与当前正在执行的指令无关的异步事件 * 外部I/O设备通过特定的中断请求信号线向CPU提出中断请求 * CPU每执行一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应期 * 外部中断都是一条指令执行完成后(中断周期)才被检测并处理的 * 分类 * 可屏蔽中断 * 通过可屏蔽中断请求线INTR向CPU发出的中断请求 * CPU可通过在中断控制器中设置相应的屏蔽字来屏蔽或不屏蔽它,被屏蔽的中断信号将不被送到CPU * 不可屏蔽中断 * 通过不可屏蔽中断请求线NMI向CPU发出的中断请求 * 通常为非常紧急的硬件故障 * 举例 * Cache缺失 * I/O中断:键盘输入,打印机缺纸 * 时钟中断 * I/O中断请求 * 执行时间 * 每个指令周期末尾,CPU都会检查是否有外中断信号需要处理 * 不同点(与内中断) * 不与任何指令相关联,也不阻止任何指令的完成 * 系统调用(广义指令) * 定义 * 操作系统对应用程序和程序员提供的接口 * 系统调用需要触发Trap【也叫陷入/访管指令】 * OS通过提供系统调用避免用户程序直接访问外部设备【应用程序通过】 * 目的:请求系统服务 * 与库函数区别 * 库函数 * 语言或应用的一部分,可以运行在用户空间中 * 许多库函数都会使用系统调用来实现功能 * 有的库函数没有使用系统调用 * 系统调用 * 是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间 * 未使用系统调用的库函数,执行效率通常比系统调用的高【无需完成上下文切换和状态转换】 * 功能分类 * 设备管理:完成设备的请求或释放+设备启动 * 文件管理:完成文件的读、写、创建、删除 * 进程控制:完成进程的创建、撤销、阻塞、唤醒 * 内存管理:完成内存的分配、回收、获取作业占用内存区大小及始址 * 系统调用过程 1. 传参 2. 陷入指令/Trap/访管【执行系统调用】(发生在用户态) 3. 由操作系统内核程序处理系统调用(发生在内核态) 4. 返回应用程序