CS162笔记第一章(操作系统)

csdiy实验

由于我最近在学习学校开设的操作系统课程,想对此有更深入的了解,所以选择了cs162。一来是学习国内外对于学习的两种思维模式,二来是鞭策自己尽早习惯英文环境。鉴于英文授课对很多新手来说并不友好,我在此做出关键内容的整理和课件的搬运与翻译。

这里推荐两个资源

【CS162精翻·英文原声】伯克利大学《计算机操作系统》(2020)_哔哩哔哩_bilibili

UCB CS162 操作系统笔记(一)-CSDN博客

这个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服务器的一致性与安全性

  1. 多DNS服务器如何保持数据一致? 采用树形层级架构,每层仅管理自身权限范围内的数据;域名更新时,先修改权威服务器,再逐级向上通知刷新;依靠TTL缓存过期机制,实现最终一致性,无需实时强同步,兼顾效率与稳定性。
  2. 为什么难以入侵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)

作为软硬件生态的连接层,提供统一的存储、网络、设备访问接口,将零散的硬件、驱动、应用粘合在一起,实现跨硬件、跨平台的兼容运行。

第一讲核心总结

  1. 操作系统是硬件与应用之间的中间层,核心是虚拟化+抽象,解决硬件复杂性问题
  2. 内核是操作系统始终运行的核心,负责资源管理与抽象提供
  3. 进程是应用运行的核心载体,程序是静态代码,进程是动态运行实例
  4. 操作系统兼具裁判、幻术师、粘合剂三大角色,实现资源共享、隔离保护、便捷编程三大目标