CS162笔记第一章(操作系统)
由于我最近在学习学校开设的操作系统课程,想对此有更深入的了解,所以选择了cs162。一来是学习国内外对于学习的两种思维模式,二来是鞭策自己尽早习惯英文环境。鉴于英文授课对很多新手来说并不友好,我在此做出关键内容的整理和课件的搬运与翻译。
这里推荐两个资源
【CS162精翻·英文原声】伯克利大学《计算机操作系统》(2020)_哔哩哔哩_bilibili
这个CSDN上的笔记是所有字幕整理成了文字,我习惯先阅读我要学习的部分,然后再去看一遍视频,接着做笔记的时候再次阅读(仅供参考)
总课程有二十五章,每章约90min左右,当然我想想要吃透是需要3h的。我会在一月内尽量完成这门课的学习。(立flag)
一、时延引入:操作系统是系统运行的核心
课程开篇通过经典的Jeff Dean计算机时延对照表,直观展现不同硬件操作的时间量级差异,从纳秒级的缓存访问到毫秒级的跨洋网络传输,时间跨度极大。而能让这些差异巨大的硬件协同工作、支撑上层应用稳定运行的关键,就是操作系统。
[!NOTE]
核心结论:没有操作系统,无法高效、安全地使用硬件资源;操作系统为应用和程序员屏蔽硬件差异,提供统一抽象接口,是连接应用与硬件的关键中间层。
经典计算机时延对照表
| 操作 | 英文原文 | 时延(纳秒 ns) | 直观量级 |
|---|---|---|---|
| L1 缓存访问 | L1 cache reference | 0.5 ns | 纳秒级(CPU 内部最快) |
| 分支预测错误 | Branch mispredict | 5 ns | 纳秒级 |
| L2 缓存访问 | L2 cache reference | 7 ns | 纳秒级 |
| 互斥锁加锁 / 解锁 | Mutex lock/unlock | 25 ns | 纳秒级 |
| 主存访问 | Main memory reference | 100 ns | 百纳秒级 |
| 用 Zippy 压缩 1KB 数据 | Compress 1K bytes with Zippy | 3,000 ns | 微秒级(3µs) |
| 在 1Gbps 网络发送 2KB 数据 | Send 2K bytes over 1 Gbps network | 20,000 ns | 微秒级(20µs) |
| 从内存顺序读取 1MB | Read 1 MB sequentially from memory | 250,000 ns | 百微秒级(0.25ms) |
| 同数据中心内往返 | Round trip within same datacenter | 500,000 ns | 半毫秒级(0.5ms) |
| 磁盘寻道 | Disk seek | 10,000,000 ns | 10 毫秒级 |
| 从磁盘顺序读取 1MB | Read 1 MB sequentially from disk | 20,000,000 ns | 20 毫秒级 |
| 数据包往返加州→荷兰→加州 | Send packet CA→Netherlands→CA | 150,000,000 ns | 150 毫秒级 |
操作系统的核心作用:管理多应用间的资源共享,处理系统安全问题,本学期核心学习的构建模块包括进程、线程、并发、调度、协调、地址空间、保护与安全等。
二、日常案例:手机搜索背后的系统逻辑
通过日常手机搜索场景,直观展现操作系统核心模块的实际落地与协同,理解系统底层组件的整合逻辑:
完整流程:手机发起搜索 → 连接DNS服务 → 解析域名获取IP → 访问对应数据中心 → 负载均衡器分配后端服务器 → 服务器执行搜索、生成结果与广告 → 结果原路返回手机
1. DNS(域名系统)详解
定义:Domain Name System,全球分布式、层级化的域名解析系统,核心功能是将人类可读的域名(如baidu.com),翻译为计算机可识别的IP地址,实现域名与IP地址的相互转换。
- 层级架构:树状结构,分为根域名服务器、顶级域服务器(com/cn/org)、权威域名服务器,每层仅负责自身管辖范围,不存储全量数据
- 分布式特性:无单台服务器存储全球所有域名,每台服务器仅负责局部数据,查询时逐级请求
- 缓存机制:解析结果会缓存,TTL(过期时间)控制缓存时效,大幅提升解析速度,是DNS高性能的关键
- 网络协议:默认使用UDP 53端口,速度快、无连接,适合小型查询;大型请求切换为TCP协议
2. 负载均衡器(LB)详解
定义:Load Balancer,数据中心入口的流量调度组件,相当于网络流量的交通警察。
- 核心作用:将用户请求均匀分发至多台后端服务器,避免单台服务器过载,实现高并发承载与高可用
- 工作逻辑:检测后端服务器负载状态,选择空闲服务器转发请求,服务器处理完成后,将结果回传给用户
延伸问题:DNS服务器的一致性与安全性
- 多DNS服务器如何保持数据一致? 采用树形层级架构,每层仅管理自身权限范围内的数据;域名更新时,先修改权威服务器,再逐级向上通知刷新;依靠TTL缓存过期机制,实现最终一致性,无需实时强同步,兼顾效率与稳定性。
- 为什么难以入侵DNS系统? 物理层面:服务器全球分散部署,跨国家、跨运营商,无法同时攻破;逻辑层面:层级隔离,单台服务器被入侵仅影响局部数据;技术层面:默认53端口严格管控,配合TSIG事务签名、DNSSEC数字签名,防止数据伪造与劫持。
三、操作系统的定义
目前操作系统无统一公认的定义,课程中给出核心界定:
操作系统包含内核(Kernel)与配套程序,其中内核是计算机中始终运行的核心程序,其余内容要么是随系统发布的系统程序,要么是用户使用的应用程序。
四、拆解“操作”与“系统”
1. 什么是系统(System)
系统由多个相互关联的硬件部件组成,部件之间相互交互、相互依赖;系统追求鲁棒性(Robustness),需要具备完善的错误处理机制,防范恶意操作与误操作,正视硬件的局限性与故障风险,并非简单的硬件拼接。
2. 什么是操作(Operating)
“操作”核心是对系统资源的管控,包含三大核心:
- 资源共享:协调多应用竞争CPU、内存、磁盘、网络等硬件资源
- 隔离与保护:实现进程间的权限隔离,单个程序崩溃不影响整个系统,防止非法访问
- 多路复用/并发:单CPU硬件基础上,通过快速切换任务,实现多任务同时运行的效果
3. 硬件与软件的接口:虚拟化核心
硬件与软件的接口问题,本质就是虚拟化问题。上层应用直接运行在复杂杂乱的硬件上,无法实现受控、安全、统一的访问,课程默认学习者已完成CS61C学习,掌握计算机硬件基础组成:
- 处理器(CPU):包含寄存器,可存储数据、内存地址,支持进程切换时的状态保存与恢复
- 内存:存储各类数据,部分内存专属操作系统使用,不同区域对应不同进程,实现进程隔离
- 缓存:位于CPU与内存之间,加速数据访问,提升系统处理速度
- 页表:实现虚拟地址到物理地址的转换,支撑虚拟内存功能
- 外部设备:存储设备、网络设备、显示器、GPU等,通过总线与控制器连接,实现硬件协同
硬件本身复杂度极高,指令集架构(ISA)仅提供基础标准化,仍无法满足便捷编程的需求,操作系统的核心价值,就是将底层硬件细节全部抽象,提供干净的边界与虚拟化视图,大幅降低应用编程难度。
五、操作系统的核心:抽象与虚拟化(幻觉性质)
操作系统最核心的特性是幻觉性质(Illusion),即通过虚拟化技术,为上层应用提供硬件本身不存在、却简洁易用的抽象接口,让应用误以为独占硬件资源,无需关注底层硬件的复杂性。
1. 核心抽象内容(硬件中不存在,由操作系统创造)
- 线程:虚拟化CPU,将单个物理CPU转化为多个可独立运行的执行单元,实现并发
- 地址空间(虚拟内存):虚拟化物理内存,为每个进程提供独立、连续、受保护的内存视图,营造“无限内存”的幻觉
- 文件:虚拟化磁盘块,将硬件层面零散的存储块,封装为易用的文件与目录,实现持久化存储
- 用户与权限:创造用户概念,实现系统权限管控,保障系统安全
- 套接字/消息队列:虚拟化网络传输,将不可靠的网络数据包,转化为可靠、有序的通信接口
2. 虚拟化模型
操作系统运行在硬件之上,作为核心中间层,将底层杂乱的硬件资源,转化为标准化、易用的运行环境,应用程序不直接接触硬件,仅与操作系统提供的抽象交互。
六、关键概念:程序与进程
1. 进程的定义
进程是操作系统提供的、具备受限权限的执行环境,相当于一个干净的运行容器,是应用程序实际运行的载体,也是操作系统虚拟化的核心产物。
2. 进程包含的核心内容
- 独立的地址空间(受保护的内存块)
- 一个或多个线程(执行单元)
- 打开的文件、网络套接字
3. 程序与进程的区别
- 程序:磁盘上存储的二进制代码文件,是静态、未运行的状态
- 进程:程序被实例化、加载运行后的动态状态,是操作系统分配资源的基本单位
核心结论:应用程序感知到的“机器”,并非真实物理硬件,而是操作系统提供的进程抽象;每个运行的程序对应独立进程,进程提供的接口远比原始硬件简洁易用。
七、操作系统的三大核心角色(必考)
1. 裁判(Referee)
作为系统资源的管理者,负责CPU、内存、设备等资源的分配与调度,实现进程间的隔离、保护与公平竞争,处理权限与安全问题,避免资源争抢与系统崩溃。
2. 幻术师/抽象大师(Illusionist)
通过虚拟化技术,为应用制造独占硬件、资源无限的幻觉,屏蔽硬件差异与底层细节,提供进程、线程、地址空间、文件等高层抽象,让编程更简单。
3. 粘合剂(Glue)
作为软硬件生态的连接层,提供统一的存储、网络、设备访问接口,将零散的硬件、驱动、应用粘合在一起,实现跨硬件、跨平台的兼容运行。
第一讲核心总结
- 操作系统是硬件与应用之间的中间层,核心是虚拟化+抽象,解决硬件复杂性问题
- 内核是操作系统始终运行的核心,负责资源管理与抽象提供
- 进程是应用运行的核心载体,程序是静态代码,进程是动态运行实例
- 操作系统兼具裁判、幻术师、粘合剂三大角色,实现资源共享、隔离保护、便捷编程三大目标