操作系统学习笔记 | 2. 操作系统的启动与核心机制
启动
从计算机系统的角度来说,计算机启动时主要涉及三个部分:CPU、内存和 I/O。
操作系统最初存储在硬盘(DISK)上,由 BIOS(基本 I/O 系统)提供支持。BIOS 的基本功能是在电源启动后检测外设并加载相应的软件。硬盘上还存储了 BootLoader 软件,用于加载操作系统。
启动流程如下:
加电 -> BIOS 加电自检(POST) -> 检查显卡和执行 BIOS
BIOS 加载 BootLoader(通常位于硬盘第一个扇区,大小为 512 字节)
BootLoader 加载操作系统到内存
BootLoader 将 CPU 控制权交给操作系统
核心机制
操作系统通过三个基本机制与设备和应用程序交互:
系统调用:应用程序向操作系统发出服务请求。
异常:因非法指令或内存出错等问题,由不良的应用程序触发。
中断:硬件设备(如计时器、网络)主动发送的信号。
为什么应用程序不能直接操作外设?
操作系统是被信任的第三方,确保系统的安全性和可靠性。
只有内核能够执行特权指令。
为简化应用程序开发,操作系统提供一致、简单的接口。
三大机制的特点
中断处理流程
硬件部分:
设置中断标记。
设置中断事件的 ID。
软件部分:
保存当前处理状态(便于后续恢复)。
执行中断服务程序。
清除中断标记。
恢复之前保存的处理状态。
异常处理流程
设置异常编号。
保存现场。
异常处理(杀死产生异常的程序或重新执行异常指令)。
恢复现场。
系统调用
操作系统通过 系统调用接口(System Call Interface) 向应用程序提供服务。例如,C 语言的 printf()
调用底层的系统调用 write()
。
应用程序通过 高层次 API(如 Windows 的 Win32 API 或 JVM 的 Java API)间接发起系统调用,触发从 用户态 到 内核态 的转换:
用户态:特权级较低,无法访问特权指令和 I/O。
内核态:可以执行特权指令和访问 I/O。
这种状态划分确保了系统的安全性与可靠性。
三大机制跨域系统边界
三大核心机制均涉及应用程序和操作系统的边界切换,这会带来额外开销:
建立中断、异常、系统调用号与服务例程映射关系的初始化开销。
内核堆栈的创建与切换开销。
参数安全性验证的时间开销。
地址空间的映射与权限更新开销。
尽管存在这些开销,它们是保障操作系统安全性和可靠性的必要代价。
总结
操作系统的启动从硬件初始化到加载内核,再到运行应用程序,体现了硬件和软件的紧密协作。通过系统调用、异常和中断三大核心机制,操作系统与应用程序及硬件设备高效交互,确保系统的安全性、稳定性和易用性。同时,这些机制虽然增加了边界切换的开销,但其设计原则和实现方法在计算机系统中具有不可替代的价值。