1. 操作系统概述#
1.1 操作系统的基本概念#
操作系统的概念
- 操作系统是控制和管理计算机系统软/硬件资源、合理调度任务与分配资源,并为用户及其他软件提供统一接口与运行环境的最基本的系统软件。
操作系统的功能和目标
- 操作系统作为计算机系统资源的管理者。
- 提供接口(向上层提供方便易用的服务):
- 直接给用户使用的(用户可以直接使用):
- GUI界面
- 命令接口:
- 联机命令接口:说一句做一句
- 脱机命令接口:说一堆做一堆
- 给软件或者程序员使用的:程序接口(系统调用):函数库本身不是操作系统接口,只是对系统调用的封装。
- 直接给用户使用的(用户可以直接使用):
- 对计算机资源的扩充:裸机通过操作系统成为扩充机器/虚拟机。
操作系统的特征
- 并发:多个事件在同一时间间隔内发生,这些事件在宏观上同时发生,微观上交替发生。
- 并行:多个事件同一时刻同时发生。
- 单核CPU同一时刻仅运行一个程序,多程序并发。
- 多核CPU同一时刻同时执行多个程序,多程序可并行。
- 若运行程序多于核数,则并发性必然必不可少,所以并发性是操作系统一个最基本的特性。
- 共享:系统中的资源可供内存中多个并发执行的程序共同使用。
- 互斥共享:一时段只允许一进程访问,例如摄像头。
- 同时访问:一时段内多进程同时访问,例如硬盘、扬声器,但是往往宏观上同时,微观上交替。
- 并发和共享是操作系统两个最基本的特征,二者互为前提。
- 虚拟:利用时分复用和空分复用,将物理实体映射为多个逻辑上的对应物。
- 异步:多道程序环境下允许多个程序并发执行。但由于资源有限,进程的执行并非连续,而是以不可预知的速度向前推进。
1.2 操作系统的发展历程#
手工操作阶段:未配置操作系统
- 人工操作方式:用户独占,全机资源利用率极低,CPU长时间空闲,计算能力未能充分发挥。
- 脱机IO方式:装带卸带在外围机完成,减少CPU空闲时间,CPU可直接从高速磁带读取或写入数据,提升IO效率。
批处理阶段
- 单道批处理系统:自动性、顺序性、单道性。
- 多道批处理系统:
- 多道性,宏观并行,微观串行,多道程序共享CPU、内存、IO设备等资源,系统吞吐量大,各部件保持高负载状态。
- 利用中断技术提高了IO设备利用率。
- 缺乏交互能力,用户无法了解程序运行状态或进行干预,响应时间长。
分时操作系统
- 处理器时间划分为很短的时间片,轮流给各用户程序使用,以人机交互为核心目的。
- 特点:
- 同时性:允许多个终端用户同时使用同一计算机。
- 交互性:用户通过终端以人机对话的方式直接控制程序运行,并与程序进行交互。
- 独立性:各用户的操作相互独立,任意用户均感觉系统为其独占。
- 及时性:用户请求能在较短时间内获得响应,满足交互需求。
实时操作系统
- 严格时间限制内完成关键任务,确定性高、可靠性强、时效性。
- 分类:
- 硬实时操作系统:必须在规定截止时间前完成,例如飞机控制系统、导弹制导系统。
- 软实时操作系统:允许偶尔错过截止时间,例如订票系统、管理系统。
网络操作系统和分布式系统
- 网络操作系统:支持资源共享与通信功能,数据传输。
- 分布式系统:
- 由多台计算机组成的集合,具有良好的可扩展性和容错能力,支持动态重组。它将一个任务分解为多个子任务,并行执行,协同完成。
- 主要特点包括:
- 分布性
- 并行性
- 透明性
微机操作系统
- 单用户单任务操作系统:仅允许一个用户登录并运行一个程序,例如早期的MS-DOS。
- 单用户多任务操作系统:支持一个用户同时运行多个程序,系统通过时间片轮转实现任务切换,例如现代Windows系统。
- 多用户多任务操作系统:允许多个用户通过终端或网络同时登录,例如Linux服务器版本。
1.3 操作系统的运行环境#
操作系统内核
- 支撑功能包括时钟管理、中断机制以及原语。
- 系统资源管理功能包括进程管理、存储器管理、设备管理。
处理机的双重工作模式
- 用户态(目态)
- 内核态(管态/系统态)
- 通过一个模式位标识当前的运行模式,例如:0表示内核态,1表示用户态。
- 系统加载用户程序后,CPU从内核态切换到用户态;而用户态通过中断或陷阱进入内核态。
- 特权指令仅能在内核态执行,可访问全部地址空间,执行关键操作,如:
- 启动外设
- 设置系统时钟
- 关闭中断
- 修改模式
- 返回用户态
- 非特权指令通常在用户态下执行,用于一般计算和数据处理,无法直接操作硬件或系统核心资源。
- 若用户态程序试图执行特权指令,则硬件将产生非法指令异常。操作系统捕获异常后,会终止程序并重新调度。
中断和异常
- 用户程序进入内核态唯一的合法途径就是中断或异常。当CPU运行用户程序时,一旦发生中断或异常,硬件会自动将处理器切换至内核态,并跳转至内核对应的处理程序。这一过程由硬件强制保障,确保了切换的安全性与原子性。
- 中断(也称外中断):是指来自CPU执行指令外部的事件,通常用于信息输入输出,例如设备发出的IO结束中断、时间中断,表示一个时间片已到,用于系统计时、进程调度和启动定时任务。
- 异常(也称内中断):是指来自CPU执行指令内部的事件,例如非法操作、地址越界、运算溢出、系统的缺页以及专门的陷入指令等引起的事件。异常一旦发生,就必须立即处理,不可被屏蔽。
- 异常包括故障、自陷、终止。
- 外中断包括可屏蔽中断和不可屏蔽中断。
- 其中故障和自陷为软件中断,终止、可屏蔽中断、不可屏蔽中断为硬件中断。
中断和异常的处理过程
- 当CPU在执行用户程序第I条指令时,若该指令引发异常,或在指令结束后检测到中断请求信号,则CPU会打断当前程序,转入相应的中断或异常处理程序执行。
- 若问题可在处理程序中解决:
- 对于故障:通常在处理完成后,返回第I条指令重新执行。
- 对于自陷:在处理完成后,返回第I+1条指令继续执行。
- 对于终止: 比如硬件发生了不可恢复的致命错误。此时程序直接被操作系统终止,不返回。
- 对于中断:在处理完成后,返回第I+1条指令继续执行。
- 若处理程序被判定为不可恢复的致命错误,则终止该用户程序。
- 通常情况下,中断和异常的具体处理由操作系统完成。
中断与子程序调用的区别
- 中断程序与待中断程序相互独立,无固定关联,而子程序与主程序属于同一程序的主从关系。
- 中断的产生通常是随机的,而子程序调用由CALL指令显式触发,是程序员事先安排的。
- 子程序调用完全由软件实现,而中断处理需要硬件电路支持才能完成。
- 中断处理程序的入口地址由中断向量表直接提供,子程序的入口则由call指令中的地址码确定。
- 调用中断处理程序和子程序均需保护程序计数器(PC)的内容:
- 调用中断处理程序:由硬件在中断响应过程中自动保存。
- 子程序调用:由call指令在执行时将当前PC压入栈中。
- 响应中断时,需对同时到达的多个中断请求进行优先级裁决,子程序不用。
系统调用
- 系统调用是操作系统提供给应用程序使用的接口,是一种特殊的子程序调用。
- 系统调用按功能大致可分为:设备管理、文件管理、进程控制、进程通信、内存管理。
- 系统调用必须由操作系统内核程序在内核态下完成,系统调用的核心目的是让应用程序能够安全地访问内核功能,与普通过程调用存在显著差异:
- 运行状态不同:普通过程调用的调用者与被调用者运行在同一特权级;而系统调用的调用者运行在用户态,被调用者运行在内核态。
- 状态转换不同:普通过程调用无需特权级转换,可直接跳转。系统调用需要通过软中断指令触发,先从用户态切换到内核态,再由内核态分配至相应的处理程序。系统调用执行完毕后,内核可能根据调度策略决定是否切换进程;而普通过程调用直接返回原调用点。
- 嵌套调用限制不同:系统调用的嵌套深度受到内核栈空间的限制;而普通过程调用的嵌套深度通常仅受用户栈大小的约束。
- 系统调用的处理过程可分为四个阶段:
- 传递系统调用参数;
- 执行陷入指令并切换至内核态;
- 定位并执行相应服务程序;
- 恢复现场并返还用户态。
- 常见的用户态转向内核态的情形包括:
- 用户程序请求操作系统服务(系统调用)。
- 发生中断,如IO完成、时钟信号。
- 用户程序执行过程中发生异常,如除零、缺页。
- 用户程序试图执行特权指令,从而触发异常。
- 从内核态返回用户态,由内核通过特定返回指令完成该操作,在内核态执行。
1.4 操作系统结构#
分层法
- 各层仅可调用其紧邻下层所提供的服务。
- 优点:
- 便于调试与验证。
- 易于扩充与维护。
- 缺点:
- 层次划分困难。
- 运行效率较低(执行一个高层功能需穿过多个中间层)。
模块化
- 模块不可过大,否则模块内部结构复杂,难以维护。
- 模块不可过小,否则模块交互频繁,增加系统整体复杂度。
- 优点:
- 提高了操作系统设计的正确性、可理解性与维护性。
- 增强了操作系统的适应性,便于功能的扩展。
- 支持并行开发,加速研发过程。
- 缺点:
- 模块间接口规定很难满足对接口的实际需求。
- 无法相互验证。
- 无法找到可靠的决定顺序。
- 模块独立性的衡量标准有两个:
- 一是内聚性:模块内各组成部分间的紧密程度。内聚性越高,模块独立性越好。
- 二是耦合性:模块间相互依赖与影响的程度,耦合性越低,独立性越好。
宏内核
- 宏内核是将系统的主要功能模块集成在一个紧密耦合的整体中,运行在内核态中。
微内核
- 微内核将操作系统中最基础的功能保留在内核中,将其他非核心功能转移至用户态运行,以降低内核复杂度。
- 将移出的服务组织为若干独立的服务程序,运行于用户态,通过消息传递机制完成与用户进程的交互。
- 微内核将操作系统划分为两大部分:
- 内核:仅实现操作系统最核心机制,包括与硬件紧密相关的部分、基本的资源管理机制、客户与服务器间的通信支持。
- 多个服务器。
- 微内核的优点:
- 可靠性与安全性
- 扩展性与灵活性
- 可移植性
- 分布式计算
- 缺点是性能问题,每次服务请求需多次穿越内核态与用户态,导致系统调用延迟增加。
外核
- 将物理资源直接暴露给用户及系统自身,并负责资源的安全分配与隔离。
- 优点:
- 减少抽象开销,提升灵活性与性能。
- 清晰分离保护与实现,外核仅负责资源保护,功能实现完全置于用户空间。
- 体系结构简洁,易于验证。
1.5 操作系统引导#
过程如下:
- CPU激活与BIOS初始化。
- 硬件自检与启动设备选择。
- 加载主引导记录。
- 定位活动分区并加载分区引导记录。
- 加载启动器管理器。
- 加载操作系统内核。
- 内核初始化与用户环境启动。
1.6 虚拟机#
- 通过虚拟化技术,将一台物理计算机抽象为多台独立计算环境。核心是隐藏底层物理硬件的细节,向上层提供统一且隔离的执行平台。
- 第一代虚拟机管理程序:
- 直接运行在物理硬件上,是操作系统中唯一处于最高权级的软件,类似于一个轻量级的操作系统,管理硬件资源与并发调度多个虚拟机,客户操作系统运行在虚拟内核态。
- 第二类虚拟机管理程序:
- 运行在宿主操作系统上,本质是一个用户态进程,例如VMware Workstation。