CS162笔记(操作系统)

csdiy实验

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

这里推荐两个资源

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

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

这个CSDN上的笔记是所有字幕整理成了文字,我习惯先阅读我要学习的部分,然后再去看一遍视频,接着做笔记的时候再次阅读(仅供参考)

总课程有二十五章,每章约90min左右,当然我想想要吃透是需要3h的。我会在一月内尽量完成这门课的学习。(立flag)

一、什么是操作系统

1.时间-引入

image-20260318194604326

“不知何故,系统会在这些规定的时间内运行,其中有一些神奇的事”

经典计算机时延对照表

操作 英文原文 时延(纳秒 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 毫秒级

从半纳秒或皮秒级别的CAF引用,到跨越全球传输所需的毫秒,甚至在某些情况下是秒级时间。**而操作系统是实现这一切的关键。**因为如果没有它,你实际上是无法使用这些东西的。操作系统,它几乎为应用程序和程序员提供了统一的抽象,尽管硬件各不相同。(这是我的理解:我们知道随着底层技术的进步,现在有各种各样的设备,电脑就有各种品牌。而对于不同的设备安装软件时,我们需要不管什么设备都可以正确的运行软件,在其中起到作用的就是操作系统)后文kubi提到“底层实际上是硬件,操作系统是介于应用程序(这些是你想要完成的任务)和复杂杂乱的底层硬件之间的一个层。”

从作用上来说,“它使你能够管理在多个应用程序之间共享的资源,同时还能够处理安全问题。而一些关键的构建模块,我们将在本学期深入讨论的内容,诸如进程、线程、并发、调度、协调、所有这些内容、地址空间、保护和安全等。”

二、搜索-举例

image-20260318201226924

“在这节课上,你可以近距离观察到这些构建模块如何实际被实现,如何将它们整合在一起。举个例子,你拿出手机,搜索一些内容。其实,发生的是:

手机会连接到DNS服务,DNS是层级化的,因此可能有多个服务器连接以获取响应。它的作用是将你可读的人类服务名称转化为IP地址,之后可以用来通过互联网不断跳转到某个地方。

可能是一个数据中心,你将在入口点遇到负载均衡器。你完全没有意识到,负载均衡器会选择下一个跳点来转发这个信息。然后,也许有一些定制的服务器在忙于执行你的搜索或寻找信息。

找到你感兴趣的信息。可能会生成一些广告,并且其他的合成也会发生在最终网页上,生成一个包含你结果的页面,也许还有一些广告,然后这些结果会通过同样的路径回传,通常是通过互联网返回到手机。这件你每天都会利用的简单事情,实际上有很多非常有趣的环节。”

什么是DNS?

DNS(domain name system),也就是域名系统,把你能看懂的网址(比如 baidu.com翻译成电脑能看懂的 IP 地址(比如 180.101.49.11)。是一个全球分布式、层级化的数据库,实现域名 ↔ IP 地址 相互转换

  • 层级(树状):根域名服务器,顶级域服务器,权威域名服务器(每一层只负责自己的部分)
  • 分布式:没有一台机器存全世界所有域名,每台服务器只负责一小部分,查询时一层层问过去
  • 缓存(cache):查过一次就记住,下次直接返回(极大提高速度,DNS高性能的关键)
  • 网络协议实现:DNS用UDP53端口实现,快,无连接,适合小查询,大型请求会切TCP

什么是负载均衡器

**LB(Load Balancer)**它站在用户和一堆服务器中间,把请求均匀分给多台服务器,不让任何一台忙死、其他闲死。

当搜索东西的请求到达数据中心,第一个遇到的就是负载均衡器,它要看后面哪台服务器最闲然后把你的搜索请求转发给它,等服务器算完结果再传回给你。

理解了这两个概念,你是否已然窥见这个系统的精妙并且惊叹呢。

kubi说:“我也从中感到惊奇。我喜欢系统,并且我认为像这样的一个大系统能够正常运作,实在是太神奇了。”

这份热爱和求知欲感染到了不同时空的我,为之感同身受。

惊叹的同时,他抛出了两个问题。如果你理解了DNS的结构,我想你能回答出。

那么多DNS服务器是如何保持数据一致的
  • 结构稳定:它永远是树形结构,每一层只管自己的,保证了全局一致
  • 动态一致:如果管理员修改DNS记录,首先更新权威服务器,然后通知上级刷新,再逐级穿鼻哦
  • TTL同步:每台服务器其实不是实时同步的,全网一卡DNS就费了。事实上每条 DNS 记录都有一个过期时间。,每条 DNS 记录都有一个过期时间
为什么不可能入侵DNS
  • 物理上:服务器分布在全球,你需要同时攻破全球不同国家、不同运营商的机器,这在物理上几乎不可能
  • 逻辑上:DNS是分层隔离的
  • 技术上:DNS本身有防火墙,DNS 主要用 53 端口,外部攻击很难绕过。

回到之前的问题,什么是操作系统,kubi提到现在还没有一个被普遍解释的定义,但给出了一种理论

**“操作系统有一个叫做内核的部分,通常是计算机上始终运行的唯一程序,它像是操作系统的核心,可能其他的东西要么是随操作系统一起发布的系统程序,要么就是应用程序。”**在后文他会继续讲