🖥️ 计算机系统概述

操作系统定义 · 四大特征 · 内核态/用户态 · 中断与异常 · 系统调用 · OS结构 · 启动流程
定义与功能 四大特征 内核态与用户态 中断与异常 系统调用 OS结构 启动流程
📛 操作系统的定义与四大功能
操作系统是控制和管理整个计算机系统的最小层的系统软件
📖 定义(408标准表述):
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境。它是计算机系统中最基本的系统软件

🔑 三个关键点:
① 操作系统是系统软件(不是硬件,不是应用软件)
② 提供两大接口:命令接口(用户直接用)和程序接口(系统调用,给程序员用)
③ 目标:方便用户使用 + 提高系统效率
操作系统的四大功能
🧠
处理器(CPU)管理
进程/线程的创建、撤销、调度、同步与通信,合理分配CPU时间
🧠
存储器管理
内存分配与回收、地址映射、内存保护与共享、内存扩充(虚拟内存)
📁
文件管理
文件的创建/删除/读写、目录管理、文件保护、磁盘空间管理
🖥️
设备管理
I/O设备分配与回收、缓冲管理、设备独立性、SPOOLing技术
⚡ 接口类型(考点!):
① 命令接口:用户直接使用的接口
  · 联机命令接口(交互式):用户在终端输入命令,系统立即执行并返回结果(如 Linux shell)
  · 脱机命令接口(批处理):用户把一系列命令写在脚本里,系统批量执行(如 .bat / shell 脚本)
② 程序接口(系统调用):用户通过程序(代码)间接使用的接口
  · 程序员在程序里调用系统调用(如 read()、write()、fork())
  · 是操作系统提供给应用程序的唯一接口

📝 408易混点:系统调用 ≠ 函数调用!系统调用会触发陷入指令(trap),从用户态切换到内核态;普通函数调用一直在用户态。
🌟 操作系统的四大特征
并发、共享、虚拟、异步 —— 408超高频考点,四个特征的关系要搞清楚
🔑 四个特征的关系:
· 并发和共享是最基本的特征,二者互为存在条件(没有并发就没有共享,没有共享就谈不上并发)
· 虚拟异步是并发和共享的延伸和表现
· 考试常问:"哪个是最基本的特征?" → 答:并发与共享
① 并发(Concurrence)
定义:多个事件在同一时间间隔内发生(宏观上同时,微观上交替执行)
并发 vs 并行:
  · 并发:多个事件在同一时间间隔内发生(单CPU也能实现,靠时间片轮转)
  · 并行:多个事件在同一时刻发生(必须要有多个CPU同时执行)

📝 典型考点:
  · 单CPU系统:并发存在,并行不存在
  · 多CPU(多核)系统:并发和并行都存在
  · 程序的顺序执行:顺序性、封闭性、可再现性
  · 程序的并发执行:间断性、失去封闭性、不可再现性
▲ 并发(单CPU时间片轮转)vs 并行(多CPU同时执行)—— 动画循环演示
② 共享(Sharing)
定义:系统中的资源可供内存中多个并发执行的进程共同使用

两种共享方式:
  · 互斥共享(临界资源):一段时间内只允许一个进程访问
    例:打印机、磁带机、变量(需要互斥访问)
  · 同时共享:一段时间内允许多个进程"同时"访问(宏观上同时,微观可能交替)
    例:磁盘I/O、文件读操作(读不修改内容,可以并发读)
📝 考点:临界资源(独占资源)是指一段时间内只允许一个进程访问的资源。实现互斥共享需要同步机制(即后面章节的进程同步)。
③ 虚拟(Virtualization)
定义:把一个物理实体映射为若干个逻辑上的对应物(物理→虚拟,实际→表面)

两种虚拟化技术:
  · 时分复用:虚拟处理器(多道程序技术,每个进程感觉有自己独立的CPU)
  · 空分复用:虚拟内存(离散分配,让用户感觉内存比实际大)、虚拟磁盘(SPOOLing技术)
📝 考点:"虚拟"的本质是复用—— 时间复用(CPU)和空间复用(内存/磁盘)。
④ 异步(Asynchrony)
定义:系统中的进程以不可预知的速度向前推进(进程的执行不是一气呵成的,而是走走停停)

原因:进程在运行过程中可能被中断(时间片到、等待I/O等),然后过一段时间再继续运行

⚡ 关键考点:虽然进程的执行是异步的,但操作系统必须保证运行结果的可再现性(即多次运行,只要输入相同,输出必须相同)。这是进程同步要解决的问题!
🔐 内核态与用户态
CPU的两种运行状态,特权指令只能在内核态执行
📖 两种状态:
· 内核态(Kernel Mode / 管态):CPU可以执行所有指令,访问所有内存地址,拥有最高特权
· 用户态(User Mode / 目态):CPU只能执行非特权指令,访问受限的内存地址

🔑 哪些指令是特权指令? 一切可能影响系统安全/其他进程的指令:
  · 有关I/O的指令(I/O指令、中断屏蔽指令)
  · 有关访问程序状态的指令(置程序状态字PSW、切换模式)
  · 修改特殊寄存器的指令(页表基地址寄存器、段表基地址寄存器)
  · 停机指令(HALT)

⚡ 状态切换:
  · 用户态 → 内核态:只能通过中断/异常/系统调用(trap指令/INT指令/ SYSCALL指令)触发
  · 内核态 → 用户态:通过设置PSW标志位(加载新的PSW)实现,操作系统主动退出内核态
▲ 点击「用户态→内核态」或「内核态→用户态」按钮,观看状态切换动画
📝 408高频考点:
① "用户态到内核态的切换是由谁触发的?" → 硬件(中断/异常机制由CPU硬件实现)
② "内核态到用户态的切换是由谁触发的?" → 操作系统(软件设置PSW)
③ "哪些事件会导致用户态切换到内核态?" → 系统调用、中断、异常(缺页异常、除零异常等)
④ "哪些指令只能在内核态执行?" → I/O指令、停机指令、设置PSW、加载页表基址等特权指令
⚡ 中断与异常
中断是操作系统的脉搏 —— 用户态切换到内核态的唯一方式是中断/异常
📖 中断 vs 异常(广义中断 = 中断 + 异常):
· 中断(Interrupt):外设引发,与当前执行的指令无关,是异步的
    例:I/O完成中断、时钟中断、键盘输入中断
· 异常(Exception/Trap):CPU正在执行的指令引发,是同步的
    例:缺页异常(Page Fault)、除零错误、越界错误、系统调用(trap intentionally)

⚡ 处理流程(核心考点!):保存断点 → 识别中断源 → 执行中断处理程序 → 恢复现场
▲ 中断处理完整流程(点击步进观看)
中断处理详细步骤(408标准答案版)
Step 1 — 关中断:CPU在响应中断后,首先要关闭中断(防止在保存现场时被新的中断打断)
Step 2 — 保存断点:程序计数器(PC)的值(即断点)保存到栈或特定寄存器
Step 3 — 识别中断源:读取中断向量表,找到对应中断处理程序的入口地址
Step 4 — 保存现场:CPU所有寄存器(PSW、通用寄存器等)保存到内核栈
Step 5 — 执行中断处理程序:转入中断处理程序,执行具体的I/O操作或其他处理
Step 6 — 恢复现场:从内核栈恢复所有寄存器的值
Step 7 — 开中断:重新允许中断
Step 8 — 返回断点:恢复PC的值,继续执行原来被中断的程序
📲 系统调用(System Call)
系统调用是操作系统提供给应用程序的唯一接口,是程序接口的核心
📖 什么是系统调用?
系统调用是操作系统在内核态提供的一组函数,应用程序通过陷阱指令(trap/SYSCALL)来请求操作系统提供服务。

🔑 常见系统调用类型:
  · 进程控制:fork()、exit()、wait()
  · 文件操作:open()、close()、read()、write()
  · 设备管理:ioctl()、read()、write()
  · 信息维护:getpid()、alarm()、sleep()
  · 通信:pipe()、shmget()、msgget()

⚡ 系统调用 vs 库函数:
  · 库函数(如C语言的 printf())可能调用系统调用(如 write()),也可能不调用
  · 系统调用是操作系统提供的接口,库函数是语言提供的接口
  · 系统调用需要切换到内核态,开销比普通函数调用大
▲ 系统调用执行完整过程(点击步进观看)
系统调用执行过程(详细步骤)
1
【用户态】应用程序调用库函数(如 printf())
2
【用户态】库函数将系统调用号放入特定寄存器(如 x86 的 EAX)
3
【用户态】执行 trap/SYSCALL 指令 → 触发软中断,切换到内核态
4
【内核态】保存用户态上下文(PC、PSW、寄存器等)到内核栈
5
【内核态】根据系统调用号,查找系统调用表,找到对应内核函数的地址
6
【内核态】执行内核函数(如 sys_write()),完成实际工作
7
【内核态】恢复用户态上下文,设置返回值为用户态可访问
8
【用户态】从 trap 指令后继续执行,通过返回值判断调用是否成功
🏗️ 操作系统的结构
从简单到复杂,OS结构经历了多次演进 —— 这部分是408高频考点!
📖 操作系统结构的演进:
无结构(第一代) → 模块化(第二代) → 分层式(第三代) → 宏内核/微内核(现代)

⚡ 408最常考:宏内核(Monolithic)vs 微内核(Microkernel)
🔵 宏内核(Monolithic Kernel)
所有系统功能都在内核态运行
  • 优点:性能好(各模块直接函数调用,无需切换)
  • 缺点:内核代码庞大、bug影响整个系统、移植性差
  • 典型系统:Linux、UNIX、Windows(早期)
  • 408考点:宏内核切换不需要消息传递,速度快
🟠 微内核(Microkernel)
只把最基础功能放内核态,其他在用户态
  • 优点:内核小、稳定性高、易于移植、各服务独立
  • 缺点:性能较差(需要多次用户态↔内核态切换
  • 典型系统:Mach、MINIX 3、QNX、L4
  • 408考点:微内核切换需要消息传递,开销大
其他结构方式
① 分层式结构(Layered Structure):
  · 把操作系统分成若干层,每层只调用更低一层的接口(单向依赖)
  · 优点:结构清晰、易于调试(第N层出错,问题一定在第N层或以下)
  · 缺点:效率低(每次调用要穿越多个层次)

② 模块化(Modules):
  · 内核被分成多个模块,各模块之间可以直接调用(不是严格的层次关系)
  · Linux 的可加载内核模块(LKM)就是这种思想

③ 外核(Exokernel):(了解即可,408很少考)
  · 把硬件暴露给应用程序,由应用程序自己管理资源(极简内核)
▲ 微内核消息传递过程(点击播放动画)
🚀 操作系统的启动流程
从按下电源键到操作系统完全加载,经历了哪些步骤?这是408的经典综合题考点
📖 启动流程概述:
BIOS → 开机自检(POST) → 加载引导程序(Bootloader) → 引导程序加载操作系统内核 → 操作系统初始化 → 用户登录

⚡ 关键概念:
· BIOS(Basic I/O System):存储在主板ROM中的固件,是计算机加电后执行的第一个程序
· MBR(Master Boot Record):磁盘的第一个扇区(512B),包含引导程序和分区表
· Bootloader:负责把操作系统内核从磁盘加载到内存中(如 GRUB、NTLDR)
1
加电,CPU执行BIOS(ROM)
按下电源键,CPU初始化,PC指向BIOS起始地址(0xFFFF0),开始执行BIOS程序。BIOS存储在主板的ROM/Flash中。
2
开机自检(POST, Power-On Self-Test)
BIOS检测计算机硬件(CPU、内存、I/O设备)是否正常。如有故障,通过"滴滴"声报警(不同响声代表不同故障)。
3
加载BIOS设置,选择启动设备
BIOS读取CMOS中的配置信息(如启动顺序:硬盘→U盘→光盘),找到可启动设备后读取该设备的第一个扇区(MBR,512B)。
4
MBR中的引导程序加载(Bootloader)
MBR中的引导程序(如GRUB Stage 1)被加载到内存 0x7C00 处执行。由于MBR空间有限(512B),它只负责加载更大一点的引导程序(如GRUB Stage 2)。
5
引导程序加载操作系统内核
Bootloader(如GRUB)把操作系统内核(如 Linux 的 vmlinuz)从磁盘读取到内存中,然后把CPU控制权交给内核。
6
操作系统内核初始化
内核开始执行,初始化各种硬件(内存管理、进程管理、中断、文件系统等),创建第一个进程(如 Linux 的 init/systemd,PID=1)。
7
用户登录,系统就绪
init 进程启动各种系统服务,最终启动登录程序(login/getty),等待用户输入用户名和密码,登录后进入 shell 或图形界面。
▲ 操作系统启动流程动画(点击步进观看)
📝 408综合题考点:
① BIOS存放在ROM中(不是RAM,不是磁盘,不是Cache)
② POST过程中如果内存故障,会有响声报警
③ MBR的大小是512字节,存放在磁盘的第一个扇区
④ 引导程序(Bootloader)位于磁盘,被BIOS读入内存执行
⑤ 操作系统启动完成后,系统处于内核态(直到用户登录后执行用户程序才切换到用户态)
← 返回知识树  ·  进程管理 →