OS1️⃣概述
1、计算机知识
1.1、结构
1.1.1、软件
- 普通软件:如 web 浏览器、音乐播放器等。
- 用户接口程序:基于文本的 Shell,基于可视化界面的 GUI。
- 操作系统:Kernel(内核)。
1.1.2、硬件
CPU、存储器、磁盘、打印机、键盘鼠标、显示器、网络接口、I/O 设备等。
说明 | 相关知识 | |
---|---|---|
CPU | 从内存中取出指令,解码并执行,重复此过程。 | 调度,寄存器,流水线机制,系统调用,多线程 |
存储器 | 理想状态:迅速,充分大,便宜。 | 缓存(L1, L2),主存 |
磁盘 | 内存管理(物理,虚拟) | |
I/O 设备 | 包括设备控制器,设备本身。 | 中断处理,设备驱动 |
1.2、运行模式
-
内核态:
- OS 所处的模式。
- 具有对所有硬件的完全访问权,可执行机器支持的任何指令。
-
用户态:
- OS 以外的软件所处的模式。
- 仅使用机器指令的一个子集,会影响机器控制或进行 I/O 操作的指令会被禁止。
1.3、启动
相关知识
- BIOS:基本输入输出系统,内置底层 I/O 软件。
- bootloader:加载 OS。
- 加载:将资源从磁盘载入到内存中。
计算机启动流程
- BIOS
- 检查 RAM 数量,确认键盘、显卡等基本设备已安装并正常响应。
- 扫描总线,查找总线上连接的所有设备。
- 根据设备清单决定 boot device(启动设备)。
- 加载 boot device 的第一个扇区并执行,确定活动分区。
- 从活动分区中读入 bootloader(启动装载模块)。
- bootloader:被读入 OS 并启动(可理解为加载 OS)。
- OS:
- 询问 BIOS 以获取配置信息。
- 检查每个设备的驱动程序是否存在,不存在则需下载。
- 将设备调入内核,初始化有关表格,创建需要的背景进程。
- 在每个终端上启动登录程序或 GUI。
2、操作系统(❗)
2.1、理解
操作系统(Operating System, OS)
没有完整、精确、公认的定义,可从功能角度来理解。
-
用户视角:为用户程序提供资源集的清晰抽象,隐藏底层复杂的访问细节。
(OS 封装了对硬件的操作,将简化后的接口提供给用户程序。)
-
程序视角:管理硬件资源。
(OS 负责在相互竞争的程序之间,有序地控制对 CPU、存储器、IO 等硬件资源的分配。)
2.2、特征
含义 | 说明 | |
---|---|---|
并发 | 一个时间段内运行多个进程,由 CPU 调度执行。 | 并行:一个时间点运行多个进程; 串行:一个时间点只能运行一个进程。 |
共享 | 硬件资源共享 | 同时共享:不可修改的资源; 互斥共享:线程相互依赖,或资源不可同时使用。 |
虚拟 | 利用程序抽象技术,让用户程序认为自己独享一套硬件资源 | CPU:进程 磁盘:文件 内存:地址空间 |
异步 | 程序不会一直执行,而是“走走停停” | 取决于 CPU 调度 |
2.3、结构设计
含义 | 特点 | |
---|---|---|
单体系统 | 整个 OS 在内核态以单一程序方式运行 | 各过程之间可自由调用,任一过程的崩溃会连累整个系统。 |
层次化系统 | 具有层次式结构 | 上层软件在下层软件的基础上构建 |
微内核 | 将 OS 划分为较小的良好定义的模块,微内核运行在内核态,其余模块作为普通用户进程运行 | 思想:尽可能减少内核态的功能,高可靠性 |
客户端-服务器模式 | 将进程划分为服务器(提供服务)和客户端(使用服务) | 基于消息传递方式进行通信 |
虚拟机 | 裸机硬件的精确复制品 | 每个虚拟机具有一套完整的硬件资源 |
外核 | 为虚拟机分配资源,限制机器只能使用分配到的资源 | 目的:保持多个虚拟机彼此不发生冲突 |
2.4、OS 的交互(❗)
来源 | 场景 | 时间 | |
---|---|---|---|
中断 | 外设 | 需要访问硬件资源 | 异步:无法确定发生时间 |
异常 | 用户程序 | 执行过程中发生意外 | 同步:发生异常时立即通知 OS |
系统调用 | 用户程序 | 执行过程中需要系统服务 | 同步或异步:发起系统调用请求时立即通知 OS,可以异步等待结果 |
2.4.1、中断
interrupt
当外设需要访问硬件资源时,向 OS 发起中断请求。
- 外设:发起中断请求。
- 硬件:查询中断表得到中断事件 ID,设置中断标记。
- 软件(OS):
- 保存进程状态(e.g. 寄存器数据)。
- 根据中断事件 ID 跳转到相应中断服务程序,进行处理。
- 清除中断标记。
- 恢复进程状态。
2.4.2、异常
exception
当用户程序执行过程中发生意外(e.g. 非法指令,内存出错)时,通知 OS 发生异常。
- 软件(用户程序):发生意外,通知 OS 发生异常。
- 软件(OS):保存进程状态,根据异常 ID 进行异常处理。
- 可处理:处理异常后继续执行,恢复进程状态。
- 无法处理:杀死进程。
2.4.3、系统调用
system call
当用户程序在执行过程中(用户态)需要系统服务时,将控制转移到操作系统。
- 软件(用户程序):准备参数,执行 TRAP 或系统调用指令,将控制转移到操作系统(内核态)。
- 软件(OS):
- 通过指令参数,查找所需的调用进程。
- 执行系统调用。
- 将控制返回给用户程序。
特点
用户程序通常不会直接调用系统调用指令,而是调用已封装的高级 API。
- Windows:Win32 API
- POSIX-based(如 UNIX,LINUX,Mac OS X):POSIX API
- JVM:Java API