Skip to content

操作系统的起源

1. 早期计算机的运行模式

  • 早期计算机的运行模式:
    早期的计算机系统是 单道程序系统,一次只能运行一个程序,需要管理员手动加载程序并等待程序运行结束。这种方式效率低下,且需要人工干预.

  • 批处理系统的诞生:
    为了提高计算机的利用率,批处理系统 应运而生。批处理系统的核心思想是 自动化程序执行,预先准备一组程序,让计算机 自动 依次执行,无需人工干预.

  • 操作系统的角色:后台程序
    批处理系统的关键在于需要一个 后台程序 来负责在当前程序结束后 自动加载执行 下一个程序. 这个后台程序就是 操作系统.

  • 操作系统的基本功能 (批处理系统层面):

  • 程序执行结束后,跳转回操作系统代码:
    用户程序运行结束后,需要将控制权交还给操作系统,以便操作系统可以继续执行后续任务.
  • 操作系统加载新的用户程序执行:
    操作系统负责加载下一个用户程序到内存,并启动程序的执行.

  • 操作系统的本质:
    虽然早期的操作系统功能看似简单(自动加载程序),但它确实是操作系统的雏形. 现代操作系统的功能已经非常复杂,但其核心仍然是 资源管理程序执行控制.

2. 程序执行流切换的新需求

  • 程序执行流切换的新需求:
    批处理系统需要在 用户程序操作系统 之间进行 执行流切换. 这与程序内部的函数调用不同,需要更严格的控制和保护机制.

  • 为何不能简单地使用 call/jal 指令?
    虽然从技术角度看,执行流切换只是修改程序计数器 (PC) 的值,但简单的 call/jal 指令无法满足操作系统对安全性和稳定性的需求.

  • 安全性考虑:
    操作系统需要被保护起来,防止用户程序 意外或恶意 地破坏操作系统自身. 如果用户程序可以随意跳转到操作系统的任何代码位置,系统的安全性将无法保证.
  • 限制入口:
    操作系统需要一种 限制入口 的执行流切换方式,只允许用户程序在 特定入口点 (例如系统调用) 进入操作系统,而不是随意跳转到操作系统内部的任何函数.

3. 硬件保护机制:特权级

  • 硬件保护机制:特权级
    为了实现对操作系统的保护,硬件层面引入了 特权级 (Privilege Level) 的概念. 不同的架构有不同的特权级实现,例如:
  • x86 (i386): 保护模式 (Protected Mode) 和 特权环 (Privilege Rings, Ring 0 - Ring 3).
  • MIPS32: 内核模式 (Kernel Mode) 和 用户模式 (User Mode).
  • RISC-V: 机器模式 (M-mode), 监管者模式 (S-mode), 用户模式 (U-mode).

共同思想——等级森严的制度:
特权级的核心思想是 分级管理,不同特权级的程序拥有不同的权限. 高特权级程序可以执行所有操作,低特权级程序只能执行受限的操作.

  • 特权级与操作系统和用户程序:
  • 操作系统:高特权级
    操作系统通常运行在 最高特权级 (例如 RISC-V 的 M 模式或 S 模式, x86 的 Ring 0, MIPS32 的内核模式),拥有最高的权限,可以访问所有硬件资源和执行所有指令. 操作系统扮演着 "系统管理员" 的角色.
  • 用户程序:低特权级
    用户程序通常运行在 最低特权级 (例如 RISC-V 的 U 模式, x86 的 Ring 3, MIPS32 的用户模式),权限受限,只能访问分配给自己的资源,不能直接访问硬件或操作系统内核代码.

  • 硬件如何检查特权级?
    CPU 内部维护一个 特权模式寄存器,记录当前 CPU 运行的特权级别. 当程序尝试执行 特权指令 或访问 受保护资源 时,硬件会 检查当前特权模式 是否满足要求.

  • RISC-V sfence.vma 指令示例:
    sfence.vma (地址空间 fence 指令) 是 RISC-V 的特权指令,手册规定只有在特权模式不低于 S 模式 (S 模式或 M 模式) 时才能执行. 硬件会进行如下检查: is_sfence_vma_ok = (priv_mode == M_MODE) || (priv_mode == S_MODE);
  • 非法操作与异常:
    如果特权级检查 不通过,则操作被视为 非法操作,CPU 会 抛出异常信号 (例如,非法指令异常),并跳转到预先设定好的 异常处理程序 (通常是操作系统内核的一部分) 进行处理.

硬件保护的意义:
硬件特权级机制为构建安全的计算机系统提供了 硬件基础. 它确保了操作系统内核的 隔离性安全性,防止用户程序的错误或恶意行为影响整个系统的稳定运行. 这种硬件级别的保护是软件层面安全机制的基础.