一篇围绕 Unix 展开的操作系统概述笔记。


操作系统导论
本文集的参考教材:操作系统导论

每当介绍操作系统时,往往无非分成这样几个章节

  1. 概述 - 操作系统的作用/组成/发展历史
  2. 进程 - 操作系统分配资源的最小单位
  3. 内存管理 - 内存如何虚拟化,操作系统如何分配内存资源
  4. 文件管理 - 文件系统与磁盘
  5. I/O - 磁盘/网络/终端等设备

本篇聚焦概述部分,以 Unix 为例自顶向下简要梳理。

一、操作系统的作用

操作系统主要指内核(kernel),它长期驻留在内存中,负责最核心的系统管理。其作用可归纳为三类:

作用内容
资源分配决定各用户作业如何分配 CPU、内存、I/O 等有限资源
提供抽象封装硬件,通过编程接口让程序便捷操作硬件
权限管理决定进程可访问哪些资源及如何安全访问

1. 资源分配

操作系统的资源分配以进程为基本单位。进程是”正在运行的程序实例”,包含:

  • 进程标识:pidppid
  • 执行现场:程序计数器、寄存器
  • 地址空间:代码区、数据区、堆、栈
  • 文件描述符表
  • 调度信息:优先级、运行状态

多个进程的资源请求会彼此冲突——内核统一管理的必要性即在于此:

资源类型冲突场景内核职责
CPU多个进程都想占用 CPU调度
内存物理内存有限映射、保护、换出
I/O设备需排队使用安排 I/O 顺序

从 CPU 角度看,调度即内核决定”下一个让谁运行”。时钟中断使内核能周期性夺回控制权,保存当前进程现场后切换到其他进程——多个进程因此看似”同时运行”。

2. 提供抽象

操作系统将底层硬件封装为统一接口,程序员无需面对寄存器、控制器和设备时序:

底层真实对象操作系统抽象常见接口
CPU进程/执行流fork exec wait
物理内存虚拟地址空间mmap brk
磁盘与目录项文件与目录open read write close
终端、管道、socket文件描述符read write socket

Unix 的核心风格:将多种底层对象统一到文件描述符与读写接口附近——普通文件、管道、终端、套接字虽然底层不同,但面向程序员的接口一致。

3. 权限管理

权限分为两层:

层次解决的问题典型机制
用户态/内核态用户程序不能直接执行特权操作硬件模式位、trap、中断
用户之间不同用户能访问哪些资源用户身份、文件权限位、访问控制

第一层——用户态与内核态的边界:

模式能力
用户态运行普通应用程序,不可直接执行特权指令
内核态访问关键硬件资源,执行特权操作

应用程序运行在用户态。执行特权操作(读文件、创建进程、申请内存)时,通过系统调用陷进内核:

阶段操作
1. 准备参数C 函数封装系统调用号和参数
2. 执行特殊指令底层汇编入口执行系统调用指令
3. 跳转内核入口CPU 根据向量表转入内核
4. 保存现场硬件保存基本信息,内核继续保存进程现场
5. 切换权限级CPU 从用户态进入内核态
6. 执行内核服务内核根据系统调用号完成操作
7. 恢复并返回恢复寄存器和状态,回到用户态

中断与陷阱(trap)的共同点:均打断当前执行流、将控制权交给内核、需保存和恢复现场、可导致用户态→内核态切换。

区别:

对比项中断 interrupt陷阱 trap
触发来源外部硬件事件(时钟、磁盘、键盘)程序主动执行特定指令或触发异常
与当前指令关系不一定由当前指令直接引起通常与当前指令直接相关
时机异步同步
常见用途I/O 完成通知、时钟打点系统调用、缺页、非法指令
是否由程序主动发起通常是
  • 中断:外设通知 CPU 有事件需处理
  • trap:当前程序必须立即进入内核处理

第二层——用户之间的权限控制——通过 Unix 文件系统的 rwx 权限位与进程所属用户身份实现。

二、操作系统的组成

操作系统按管理的硬件资源分为四类模块:

  • 进程与调度管理:将 CPU 组织为多进程共享的执行环境
  • 内存管理:将物理内存组织为进程可用的地址空间
  • 文件系统:将磁盘数据组织为文件与目录
  • I/O 子系统与设备驱动:管理其他外设,提供统一访问方式

系统调用、中断、异常、权限检查等是贯穿上述模块的公共机制,不与之并列。

一个 read 调用将这些模块串联起来:用户进程通过系统调用进入内核→查文件描述符表→查页缓存→缓存未命中则定位文件数据块→发起磁盘 I/O→I/O 完成通过中断通知内核→数据拷回用户缓冲区并返回。

1. 宏内核与微内核

内核的扩展方式有两类:

方式特点
修改源码后重新编译改动直接进入内核本体
动态加载模块或驱动运行时按需加入功能

核心区别在于扩展代码运行在哪个权限级别:更多功能直接跑在内核态即宏内核,仅最基本机制留在内核态、更多服务放在用户态即微内核。

1.1 宏内核

宏内核(monolithic kernel)将大部分核心功能放在内核态:调度、内存管理、文件系统、网络栈、设备驱动等均在内核态运行。

方面说明
运行位置大部分系统服务直接运行在内核态
优点模块通信直接,性能通常较好
代价内核体积较大,单模块出错可能影响全局
代表Unix、Linux

1.2 微内核

微内核(microkernel)只将最基本机制留在内核态(地址空间管理、线程调度、进程间通信等),文件系统、驱动、网络服务等放在用户态服务中。

方面说明
运行位置最基本机制在内核态,更多服务在用户态
优点模块隔离好,局部故障不拖垮全局
代价服务间消息传递开销明显
设计重点机制留内核,策略与服务外移

实际系统中多采用折中设计,而非纯粹某一类型。

2. Unix 视角下的系统组成

从 Unix 使用者视角,整台机器分为四层:

层次内容
应用程序编辑器、浏览器、数据库、业务程序
系统程序init、Shell、守护进程、编译器、基础命令
内核调度、内存管理、文件系统、驱动等核心机制
硬件CPU、内存、磁盘、终端、网络设备

内核不等同于整套操作系统发行版——平时安装使用的系统除内核外还包括大量系统程序与用户空间工具。操作系统原理课程语境中,”操作系统”一般主要指内核。

系统启动流程:固件引导程序启动→初始化基本硬件并加载内核→内核初始化核心子系统→拉起最早的用户空间系统进程(如 init)。

三、发展历史

阶段重点
早期计算机机器昂贵,尽量让硬件持续工作
多道程序/分时系统多个作业或用户共享一台机器
Unix 出现后形成进程、文件描述符、管道、可组合工具等经典风格
现代操作系统面向桌面、服务器、移动端、嵌入式、云环境等场景

Unix 的主要影响:

  • 进程作为核心执行单位
  • 文件描述符统一多种 I/O 接口
  • “小程序 + 管道”组合复杂任务
  • 偏向简洁、稳定、可组合的接口

现代系统按场景的侧重点:

场景关注点
个人计算机交互体验
服务器吞吐量、稳定性、隔离
移动设备能耗、响应速度、安全模型
嵌入式系统专用性、可靠性、成本

macOS 的内核 Darwin 源自 BSD,与 Unix 联系紧密。

操作系统形态虽多变,核心问题不变:管理有限硬件资源、向上提供统一抽象、在共享环境中保证安全与秩序。

四、小结

简要表述如下:

主题核心点
操作系统的作用资源分配、提供抽象、权限管理
资源分配以进程为基本单位,协调 CPU/内存/I/O 的竞争访问
提供抽象封装硬件为统一接口,Unix 风格以文件描述符为统一句柄
权限管理用户态/内核态边界 + 用户间权限控制,两层分离
操作系统组成进程管理、内存管理、文件系统、I/O 子系统;宏内核与微内核两种架构
核心机制中断(外部异步通知)与陷阱(程序同步进入内核),共同构成内核入口

后续的进程、内存、文件系统和 I/O 各章,均是本文概述内容的逐层展开。