绪论
笔记混合 jyy 和大班操作系统知识点
五个简答题,覆盖基本概念、进程、线程与地址空间、编译、链接和加载、并发编程和文件系统。 - 操作系统:“管理软/硬件资源、为应用程序提供服务” 的程序,硬件和软件的中间层 - 操作系统作为系统资源管理者 - 处理机管理 - 存储器管理 - 文件管理 - 设备管理 - 作为用户与计算机硬件之间的接口 - 命令接口:联机命令接口(交互接口),脱机命令接口(批处理接口) - 程序接口:系统调用 - 操作系统发展历程、 - 手工阶段:独占计算机资源,人工操作,资源利用率低 - 单道批处理:自动顺序执行,效率较高 - 多道批处理:(并发)宏观并行,微观串行 - 分时操作系统:交互性强 - 实时操作系统:及时可靠
操作系统的功能¶
-
虚拟化:操作系统将物理资源(如处理器、内存或磁盘)转换为更通用、更强大且更易于使用的虚拟形式。操作系统扮演的主要角色就是操理这些资源,以做到高效或公平
- 虚拟化 cpu:一运行多个程序的能力
- 虚拟化内存:每个进程访问自己的私有虚拟地址空间,操作系统以某种方式映射到机器的物理内存上。进程之间不会相互影响
-
并发
- 并发是两个或多个事件在同一时间间隔内发生
- 并行是系统同事进行多个工作
-
持久性
- 硬件和软件来持久地存储数据,避免由于断电或系统崩溃造成的数据丢失
- 文件系统管理
-
操作系统管理状态机:通过一系列 API 如 fork,execve 等
- 操作系统提供了对象和 API:文件描述符、open、read 等系统调用
设计目标:¶
- 抽象,让系统方便和易于使用
- 提供高性能,最小化操作系统的开销
- 在应用程序之间以及应用程序与 OS 之间提供保护(隔离)
- 操作系统需要不间断运行
应用程序视角下的操作系统¶
- 处理器就是执行指令的状态机,不断取指令执行指令循环往复
- 指令集并不是万能的:比如指令集中没有关闭计算机的指令,这就需要通过系统调用依赖于操作系统实现
- 任何程序都是状态机:
- 从被操作系统加载开始,经历状态机执行(计算+系统调用)最终调用_exit 退出
- 应用程序=计算+操作系统 API(syscall)
- 操作系统的职责:提供令应用程序舒适的抽象 (对象 + API)
- 窗口管理器
- 能直接管理屏幕设备
- 能够和其他进程通信
- 任务管理器
- 能访问操作系统提供的进程对象
- 杀毒软件
- 文件静态扫描 (read)、主动防御 (ptrace)
高级语言程序¶
- 函数调用时会保留上一个栈针执行到的为止,即返回地址。因此可以说每个栈针有自己的 PC 指针
- 非递归的汉诺塔实现
typedef struct { int pc, n; char from, to, via; } Frame; #define call(...) ({ *(++top) = (Frame) { .pc = 0, __VA_ARGS__ }; }) #define ret() ({ top--; }) #define goto(loc) ({ f->pc = (loc) - 1; }) void hanoi(int n, char from, char to, char via) { Frame stk[64], *top = stk - 1; call(n, from, to, via); for (Frame *f; (f = top) >= stk; f->pc++) { n = f->n; from = f->from; to = f->to; via = f->via; switch (f->pc) { case 0: if (n == 1) { printf("%c -> %c\n", from, to); goto(4); } break; case 1: call(n - 1, from, via, to); break; case 2: call( 1, from, to, via); break; case 3: call(n - 1, via, to, from); break; case 4: ret(); break; default: assert(0); } } }
硬件视角下的操作系统¶
-
计算机启动过程:
- 激活 CPU,载入并执行 BIOS
- 硬件自检
- 加载有操作系统的硬盘
- 加载主引导记录 MBR:确定去哪个磁盘哪个分区寻找操作系统
- 扫描磁盘分区,加载活动分区
- 加载分区引导记录 PBR
- 加载启动管理器
- 加载操作系统
-
计算机系统状态机模型:
- 状态:内存、寄存器数值
- 初始状态:由系统设计者制定 CPU Reset
- 状态迁移:从 PC 取指令执行
-
firmware 固件
- 进行运行程序前的计算机系统配置
- 是一个小的操作系统,在 CPU Reset 后初始化硬件;对接操作系统 Boot Loader
- Legacy BIOS (Basic I/O System)
- 最早的固件类型之一,用于个人计算机,它在计算机启动时初始化硬件
- IBM PC 所有设备/BIOS 中断是有 specification 的 ,16-bit DOS 时代 BIOS 常驻内存,提供 I/O 等功能
-
UEFI (Unified Extensible Firmware Interface)
- UEFI是设计来替代Legacy BIOS的一种现代固件标准。它提供了更加丰富的界面和更高的灵活性,支持从大容量硬盘启动系统、快速启动、安全启动等功能。
- 提供更丰富的支持 (例如设备驱动程序):指纹锁、山寨网卡上的 PXE 网络启动、USB 蓝牙转接器连接的蓝牙键盘……
-
Firmware (BIOS) 会加载磁盘的前 512 字节到 0x7c00 (如果这 512 字节最后是 0x55, 0xAA)
- CPU Reset 的时候,0x7c00 应该是啥也没有的,Firmware 的代码扫描了磁盘、加载了它
- Grub 的例子
- Stage 1: 扫描磁盘,找到附近的 ELF 文件头,加载到内存
- Stage 2: 这个 ELF 文件是 Grub; 弹出熟悉的选择系统窗口
- Stage 3: 加载 Linux Kernel
数学视角的操作系统¶
- 应用视角下:操作系统=对象+API(系统调用)
- 机器视角:操作系统就是计算机硬件上的一个普通程序
-
程序正确性的证明方法:
- 暴力枚举
- 写出证明
-
操作系统是一个状态机,应用程序也是状态机是运行在操作系统上的状态机
- 操作系统控制不同应用程序状态机的运行(调度、切换),以及负责执行系统调用
- mini 操作系统