入门 #os#overview#history

操作系统的作用与历史

操作系统(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 的一个核心功能——从硬件管理到进程管理、文件系统、设备驱动。

操作系统可以概括为两个核心角色:

  1. 资源管理者:公平高效地分配 CPU、内存、存储、I/O 设备
  2. 服务提供者:给应用程序提供方便、统一的接口(系统调用)

小结

概念要点
OS 定义管理计算机硬件和软件资源的系统软件
核心问题 1硬件太原始 → OS 封装成易用的接口
核心问题 2资源有限 → OS 调度共享
核心问题 3程序相互干扰 → OS 隔离保护
发展脉络无 OS → 批处理 → 多道/分时 → PC GUI → 移动/云

为什么先学这个? 操作系统是你写的程序与硬件之间的桥梁——理解了 OS 的角色,后续的进程、内存、文件系统才有了上下文。接下来我们看看”店长”是怎么跟”客人”沟通的:系统调用与内核态/用户态