操作系统的作用与历史
操作系统(Operating System)是计算机硬件和用户软件之间的"大管家"——它管理CPU、内存、设备,让你能同时打开十几个应用而不打架
没有操作系统会怎样?
想象你开了一家奶茶店,但没有店长也没有店员——每个顾客进来都得自己找到原料、自己操作封口机、自己算账找零。要是同时进来三个客人,场面瞬间混乱:A 抢了杯子,B 按错了糖浆比例,C 找不到吸管。
操作系统(Operating System, OS) 就是计算机的”店长”——它不亲自做奶茶(不直接完成你的工作任务),但它负责:
- 谁先谁后(CPU 调度)
- 东西放哪(内存管理)
- 怎么拿料(文件系统)
- 别打架(并发控制)
你每天都在用操作系统
| 场景 | 你在用的 | 操作系统在背后干什么 |
|---|---|---|
| 打开 Chrome 写作业 | 浏览器 | 分配 CPU 时间、加载页面到内存、从磁盘读取文件 |
| 微信视频通话 | 微信 | 让摄像头和网络设备协同工作、管理内存 |
| 同时听歌+写代码+看网页 | 多应用 | 调度 CPU 在各程序间快速切换、隔离内存防止冲突 |
操作系统解决了什么问题?
问题 1:硬件太”原始”
如果你直接写程序操作硬件,需要知道:
- CPU 寄存器的编号
- 内存的物理地址
- 硬盘的扇区位置
// 没有操作系统时——直接操作硬件(痛苦)
outb(0x1F6, 0xE0); // 告诉硬盘控制器:我要读写
outb(0x1F2, 1); // 读 1 个扇区
outb(0x1F3, sector & 0xFF); // 扇区号
// ...还要发好多条指令...
有操作系统后,你只需要:
// 有操作系统时——只需要系统调用
FILE* f = fopen("hello.txt", "r");
char buf[100];
fread(buf, 1, 100, f);
💡 操作系统做了一层”包装”:它把复杂的硬件操作封装成简单、统一的接口(系统调用),程序员不用关心底层硬件细节。
问题 2:资源有限,需求无限
一个 CPU 同一时刻只能跑一个指令流。但你打开 Chrome、听网易云、写 Word——这些程序同时”都在跑”。
操作系统的魔法:时分复用——CPU 在程序间快速切换,每秒钟切换几千次,让你感觉它们在”同时运行”。
时间轴 →
程序A ██░░░░██░░░░██░░░░██░░░░ ← 操作系统分配时间片
程序B ░░██░░░░██░░░░██░░░░██░░
程序C ░░░░██░░░░██░░░░██░░░░██
↑ 你看不到的快速切换
问题 3:程序之间别捣乱
没有操作系统时,一个程序的 bug 可能把另一个程序的数据覆盖掉——甚至把操作系统自己的数据也毁了。
操作系统保护机制:
- 用户态 vs 内核态:普通程序不能访问硬件(用户态),只有操作系统内核可以(内核态)
- 内存隔离:每个程序有自己的”虚拟”内存空间,碰不到别人
- 权限控制:不是你创建的文件,你不能随便删
操作系统的发展简史
第一代:没有 OS(1940s-1950s)
程序员直接操作硬件——插拔线路、拨动开关、读纸带。
用户 = 操作员 = 维护员
↓ 一个人全包
计算机 = 庞大昂贵的机器
💡 早期计算机的”编程”就是物理操作——设置开关、连接电缆。一个程序跑完才能跑下一个。
第二代:批处理系统(1950s-1960s)
出现了监控程序(Monitor)——一次把一批作业(Job)读入磁带,计算机自动逐个执行。
[作业1] → [作业2] → [作业3] → ...
自动依次执行
缺点:如果作业 2 在等 I/O(比如读磁带),CPU 就在那空转——浪费!
第三代:多道程序与分时系统(1960s-1970s)
多道程序(Multiprogramming):内存里同时放多个程序,当一个在等 I/O 时,CPU 去执行另一个。
分时系统(Time-Sharing):每个用户分到一个”时间片”,CPU 快速轮转——每个用户都感觉自己独占一台计算机。
🏫 类比:大学食堂
- 批处理:食堂一次只给一个人打饭,打完一个才让下一个进
- 多道程序:打饭阿姨在等米饭蒸熟的时候,先给面食窗口的人打
- 分时:每个人排一小会儿队就轮到了,虽然要等但感觉一直在服务
代表系统:Unix(1969 年,贝尔实验室)——现代操作系统之母。
第四代:个人计算机与 GUI(1980s-1990s)
操作系统走进了普通人的电脑:
| 系统 | 特点 |
|---|---|
| MS-DOS(1981) | 命令行界面,单任务 |
| Mac OS(1984) | 率先普及图形界面(GUI) |
| Windows 3.0(1990) | 让 PC 也有了好用的图形界面 |
| Linux(1991) | 开源免费,Linus Torvalds 的”业余项目” |
第五代:移动与云(2000s-至今)
| 系统 | 领域 |
|---|---|
| Android / iOS | 移动设备 |
| Windows / macOS / Linux | 桌面/服务器 |
| 容器(Docker) | 轻量级虚拟化 |
| 云 OS(AWS / GCP) | 分布式资源管理 |
操作系统的核心角色
┌──────────────────────────────────┐
│ 应用软件 │
│ (Chrome, Word, 微信...) │
├──────────────────────────────────┤
│ 操作系统 │
│ ┌──────────┬──────────┐ │
│ │ 进程管理 │ 内存管理 │ │
│ ├──────────┼──────────┤ │
│ │ 文件系统 │ 设备驱动 │ │
│ ├──────────┼──────────┤ │
│ │ 网络协议 │ 安全保护 │ │
│ └──────────┴──────────┘ │
├──────────────────────────────────┤
│ 硬件 │
│ (CPU, 内存, 硬盘, 网卡...) │
└──────────────────────────────────┘
实际体验:按下开机键后发生了什么?
把 OS 的各个核心角色串起来看——按下一个电脑的开机键后:
1. 通电 → BIOS/UEFI(固化在 ROM 中)自检硬件
2. 引导 → 从硬盘读取 bootloader(GRUB),加载内核
3. 内核初始化 → 设置中断、初始化内存管理、创建第一个进程
4. 驱动加载 → 识别硬盘、网卡、显卡,加载对应驱动
5. 文件系统挂载 → 读取分区表,挂载根文件系统 /
6. init/systemd → 创建第一个用户态进程 PID=1
7. 启动服务 → 网络管理、登录界面、图形桌面……
8. 登录界面出现 → OS 准备好了
每一步都依赖 OS 的一个核心功能——从硬件管理到进程管理、文件系统、设备驱动。
操作系统可以概括为两个核心角色:
- 资源管理者:公平高效地分配 CPU、内存、存储、I/O 设备
- 服务提供者:给应用程序提供方便、统一的接口(系统调用)
小结
| 概念 | 要点 |
|---|---|
| OS 定义 | 管理计算机硬件和软件资源的系统软件 |
| 核心问题 1 | 硬件太原始 → OS 封装成易用的接口 |
| 核心问题 2 | 资源有限 → OS 调度共享 |
| 核心问题 3 | 程序相互干扰 → OS 隔离保护 |
| 发展脉络 | 无 OS → 批处理 → 多道/分时 → PC GUI → 移动/云 |
为什么先学这个? 操作系统是你写的程序与硬件之间的桥梁——理解了 OS 的角色,后续的进程、内存、文件系统才有了上下文。接下来我们看看”店长”是怎么跟”客人”沟通的:系统调用与内核态/用户态。