操作系统的基本概念
操作系统的概念
- 负责管理协调硬件、软件等计算机资源的工作
- 操作系统为上层用户,应用程序提供简单易用的服务
- 操作系统是一种系统软件
操作系统的特征
- 并发和共享是最基本的两个性质
- 并发和共享互为存在条件
- 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题
- 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行
- 没有并发和共享就谈不上虚拟和异步
并发
-
并发指两个或多个事件在同一时间间隔内发生
-
并行:系统具有同时进行运算或操作的特性(同时刻)
- 可并行的有【处理机与设备】【处理机与通道】【设备与设备】
- 不可并行的有【进程与进程】
- 真正实现并行的为多核处理机
同一时间间隔(并发)和同一时刻(并行)的区别:
- 宏观上有多道程序同时进行,微观上这些程序依旧是分时交替执行的,操作系统的并发性正是分时得以实现的
- 并行性则是具有同时进行运算或操作的特性,同一时刻能完成两种或两种以上的工作,需要硬件的支持
共享
共享通常指系统中的资源可供内存中多个并发执行的进程共同使用,拥有两种资源共享方式
- 互斥共享方式
当进程A访问某个资源时,必须先提出请求,若此时该资源空闲,则系统将其分配给进程A使用,此后有其他进程也要访问该资源时,就必须等待。仅当进程A访问完并释放该资源后,才允许另一个进程对该资源进行访问。
临界资源(独占资源):
一段时间内只允许一个进程访问的资源
互斥共享要求一种资源在一段时间内(哪怕是很小的时间)只能满足一个请求,否则就会出现严重的问题
- 同时访问方式
宏观上存在一些资源允许多个进程同时访问,微观上这些进程是交替地对该资源进行访问,即分时共享
虚拟
虚拟是指把一个物理上的实体变为若干逻辑上的对应物。
- 时分复用技术,如处理器的分时共享
- 空分复用技术,如虚拟存储器
异步
-
程序异步性:多道程序环境允许多个程序并发执行,但由于资源有限,进程执行并非一贯到底,而是走走停停,以不可预知的速度向前推进
-
异步性导致的问题:
异步性会使操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。然而在运行环境相同的情况下,操作系统就需要保证多次运行进程后得到的结果相同
操作系统的目标和功能
操作系统应具有以下功能来给多道程序提供良好的运行环境
- 处理机管理、存储器管理、设备管理和文件管理
- 需向用户提供接口以方便用户使用
- 可用于扩充机器来提供更方便的服务、更高的资源利用率
操作系统作为计算机系统资源的管理者
- 处理机管理
- 在多道程序环境下,处理机的分配和运行都以进程(线程)为主要单位
- 主要功能
- 进程控制
- 进程同步
- 进程通信
- 死锁处理
- 处理机调度
- 处理机的管理可归结为对进程的管理,因此进程创建、撤销、管理、避免冲突、合理共享就是进程管理的主要任务
- 存储器管理
- 存储器管理用于给多道程序的运行提供良好环境,便于用户使用及提高内存利用率
- 主要功能:
- 内存分配与回收
- 地址映射
- 内存保护与共享
- 内存扩充
- 文件管理
- 计算机的信息都是以文件的形式存在的
- 文件存储空间的管理
- 目录管理
- 文件读写管理和保护
- 计算机的信息都是以文件的形式存在的
- 设备管理
- 主要任务是完成用户I/O请求,方便用户使用设备,提高设备利用率
- 主要功能
- 缓冲管理
- 设备分配
- 设备处理
- 虚拟设备
操作系统作为用户与计算机硬件系统之间的接口
- 用户使用接口
- GUI用户界面接口
- 命令接口
- 联机命令接口:用户发送一次命令,系统执行一次,主要是交互性,适用于分时或实时系统
- 脱机命令接口:用户一次性发送命令清单,系统按清单执行,无法中途干预,适用于批处理系统,可解决独占问题
- 软件使用接口
- 程序接口(系统调用)
操作系统用作扩充机器
- 裸机:没有任何软件支持的计算机
- 扩充机器/虚拟机:覆盖了软件的机器
操作系统发展历程
手工操作阶段
用户在计算机上的所有计算流程都要人工干预
缺点
- 用户独占全机,资源利用率低
- CPU等待手工操作,CPU利用不充分
单道批处理系统
定义
- 程序封闭性,程序执行的结果只取决与进程本身,不受外界影响
- 失去封闭性后,不同速度下的进程执行结果不同
特点
- 自动性,顺利的情况下,同一磁带上的同一批作业能够自动逐个运行
- 顺序性,磁带上的各道作业顺序地进入内存
- 单道性,内存中仅有一道程序运行
缺点
- 资源利用率低,吞吐量小
多道批处理系统
定义
- 批处理:允许多个用户将若干作业提交给计算机系统集中处理
- 多道性则是为了提高系统利用率和吞吐量
特点
- 多道,共享性,宏观上并行,微观上串行
- 引入多道后,系统失去封闭性和顺序性
- 制约性,程序执行因为共享资源和协同所有产生了竞争,相互制约
- 考虑竞争的公平性,程序断续执行
优点
- 资源利用率高
- 系统吞吐量大
- CPU利用率高
- IO设备利用率高
缺点
- 用户响应时间长
- 不提供人机交互能力(用户无法干预批处理作业)
分时操作系统
定义
- 允许多个用户以交互的方式使用计算机的操作系统
- 快速响应用户(分时系统产生原因)
- 响应时间 = 时间片*用户
- 进度调度通常采用抢占式的优先级优先
特点
- 同时性
- 交互性,用户能够方便进行人机对话
- 独立性,多个用户可以彼此独立地进行操作
- 及时性,用户请求能在很短的时间内响应
优点
- 提供人机交互能力
缺点
- 不能在规定的时间内做出处理
实时操作系统
定义
- 在该操作系统下,计算机系统能够及时处理过程控制反馈的数据并给出响应
特点
- 硬实时系统:必须在绝对严格的时间内完成处理(自动驾驶系统)
- 软实时系统:能接受偶尔违反时间规定(订票系统)
优点
- 安全可靠
- 及时处理
- 快速处理
网络操作系统和分布式计算机系统
特点
- 分布性
- 并行性
分布式计算机系统
特点
- 网络中各种资源的关系
- 网络中各计算机间的通信
操作系统结构
- 分层结构
- 特性
- 内核分多层,每层可单向调用更低一层提供的接口
- 优点
- 便于调试和验证,自底向上逐层调试验证
- 易扩充和维护,各层间调用接口清晰固定
- 缺点
- 仅可调用相邻低层,难以合理定义各层边界
- 效率低,不可跨层调用,系统调用执行时间长
- 特性
- 模块化
- 特性
- 内核 = 主模块 + 可加载内核模块
- 主模块只负责核心功能,如进程调度,内存管理
- 可加载内核模块:可动态加载新模块到内核,无需重新编译整个内核
- 优点
- 模块间逻辑清晰易维护,确定模块间接口后即可多模块同时开发
- 支持动态加载新内核模块(如:安装设备驱动程序),增强OS适应性
- 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高
- 缺点
- 模块间的接口定义未必合理,实用
- 模块间相互依赖,更难调试和验证
- 特性
- 宏内核
- 特性
- 所有的系统功能都放在内核里
- 优点
- 性能高,内核内部各种功能都可以直接相互调用
- 缺点
- 内核庞大功能复杂,难以维护
- 大内核中某个功能模块出错,就可能导致整个系统崩溃
- 特性
- 微内核
- 特性
- 只把中断,原语,进程通信等最核心的功能放入内核,进程管理,文件管理,设备管理等功能以用户进程的形式运行在用户态
- 优点
- 内核小功能少,易于维护,内核可靠性高
- 内核外的某个功能模块出错不会导致整个系统崩溃
- 缺点
- 性能低,需要频繁切换用户/核心态,用户态下的各功能模块不可直接互相调用,只能通过内核的消息传递来间接通信
- 特性
- 外核(exokernel)
- 特性
- 内核负责进程调度,进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全
- 优点
- 外核可直接给用户分配不虚拟,不抽象的硬件资源,使用户进程可以更灵活地使用硬件资源
- 减少虚拟硬件资源的映射层,提升效率
- 缺点
- 降低系统的一致性
- 使系统更加复杂
- 特性
操作系统引导
-
启动过程
- CPU加电,CS:IP指向FFFF0H
- 执行JMP指令跳转到BIOS
- 登记BIOS中断例程入口地址
- 硬件自检
- 进行操作系统引导
-
引导流程
- CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序
- 将磁盘的第一块主引导记录读入内存,执行磁盘引导程序,扫描分区表
- 从活动主区(主分区)读入分区引导记录,执行其中的程序
- 从根目录下找到完整的操作系统初始化程序并执行,完成开机的一系列操作
-
加电启动过程中执行程序的过程
- 自检程序
- 引导装入程序/自举装入程序
- 位于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通过提供系统调用避免用户程序直接访问外部设备【应用程序通过】
- 目的:请求系统服务
- 与库函数区别
- 库函数
- 语言或应用的一部分,可以运行在用户空间中
- 许多库函数都会使用系统调用来实现功能
- 有的库函数没有使用系统调用
- 系统调用
- 是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间
- 未使用系统调用的库函数,执行效率通常比系统调用的高【无需完成上下文切换和状态转换】
- 库函数
- 功能分类
- 设备管理:完成设备的请求或释放+设备启动
- 文件管理:完成文件的读、写、创建、删除
- 进程控制:完成进程的创建、撤销、阻塞、唤醒
- 内存管理:完成内存的分配、回收、获取作业占用内存区大小及始址
- 系统调用过程
- 传参
- 陷入指令/Trap/访管【执行系统调用】(发生在用户态)
- 由操作系统内核程序处理系统调用(发生在内核态)
- 返回应用程序
- 与库函数区别
- 定义