绪论
什么是操作系统
An operating system is the layer of software that manages a computer's resources for its users and their applications. (OSPP)
操作系统是对硬件进行管理和抽象并为应用提供服务并进行管理的程序。——《现代操作系统》
没有操作系统,程序将直面底层硬件,这非统一接口,含有大量细节,有限制且不安全:
- 操作系统提供简洁、易用的物理层抽象
- 拥有无限的内存,专属的机器
- 高级的对象:文件、进程、信号……
- 屏蔽限制
对程序而言的世界:
程序的「机器」就是操作系统提供的进程这个抽象,每个程序运行在自己的进程上,进程提供了比原始硬件机器更加优美的接口。
对操作系统而言的世界:
操作系统把「难看」的硬件接口翻译成了友好易用的接口,为每个程序提供他们的进程。
- 资源的管理
- 分配
- 保护
- 分享
操作系统将进程彼此隔离,操作系统将自己和其余程序隔离:
- 性能优化员
- 操作系统的底线是支持应用程序的运行
- 自身反而次要
- 理想情况下操作系统自身的资源开支(overhead)应该不大
- 应用程序运行应该尽可能快
其他任务:
- 可靠性:尽可能不崩溃,即使崩溃,尽可能不损坏业务逻辑
- 安全:对抗恶意的程序
- 能源:尽可能省电
- ……
应用视角下的操作系统
略。
硬件视角下的操作系统
略。
抽象视角下的操作系统
实现操作系统的第一个难题就是硬件体系太多(x86, MIPS, RISC-V),在本课程中我们不想每个体系都实现一遍,如何屏蔽这些不同?
答案是「硬件抽象」。本课程中在一个硬件抽象层(Abstract Machine, AM)上实现操作系统,这个抽象层能够帮助 C 程序访问硬件。
两种执行流
普通执行流(normal control flow):遵循冯诺依曼结构的指令循环。
异常控制流(exception control flow):硬件发现了一些异常情况,例如除零、内存访问越界等,这时硬件会触发异常,操作系统需要处理这些异常。
- 不是线性的正常的指令流(PC 的转移不受正常的自增、或者 branch instrunctions 控制)
- 由「外界」强制转移到另一块指令入⼝(强制赋予 PC)
上下文切换
上下文切换(context switch):操作系统在多任务环境下,需要在不同进程之间切换,这就需要保存和恢复进程的上下文。
所谓的上下文,就是进程的状态,包括寄存器、内存、PC 等。大体包含
- PC 寄存器
- 栈指针
- 控制寄存器
- 虚拟内存映射
操作系统的一生
初始化阶段:
运行阶段:
操作系统本身就是状态机
- 内部状态为用户进程的元信息、内核栈、内核堆、操作系统代码区
- 操作系统在硬件加载完毕和初始化之后就变成了就成为了中断/陷阱/故障处理程序
- 操作系统的状态是被动迁移的,用户程序执行 syscall 才会改变操作系统状态、硬件
- 中断事件发生后(如时钟中断)才会改变操作系统状态
余略。