跳转至

01 操作系统概述 (操作系统的历史、学习操作系统的方法)

课程主页

感到一件事很困难通常是因为没有找到正确的方法。在互联网/搜索引擎/大语言模型普及的时代,只要掌握基本概念、思路和 “提出问题” 的能力,就能极快地提升自己。

为什么学操作系统?

重走从无到有的发现历程!

  • 理解学科中的基本动机、基本方法、里程碑、走过的弯路
  • 最终目的:应用、创新、革命
    • 做题得分不是目的而是手段
      • 如果只是记得几个结论,ChatGPT 已经做得很好了
    • 一大部分人使用:知道能做什么、能做多好
    • 一小部分人颠覆:探索未知的边界

例子:为什么要学微积分

换个视角理解数学和解析现象(导数:求速率;积分:求和;极限:不断逼近)

学习 X 的目的

  • 理解 X 中的基本动机、基本方法、里程碑、走过的弯路
  • 最终目的:应用、创新、革命

操作系统的历史要短得多

  • 操作系统的历史就是计算机软硬件发展的历史
    • 基本动机:更快更好地服务更多应用
    • 基本方法:“Building Abstractions”
    • 里程碑:UNIX, Linux, ...
  • 历程中藏着一个问题的答案
    • 什么是今天计算机世界万丈高楼工程奇迹的地基

学习操作系统能得到什么?

觉醒体内的 “编程力量”

  • 奇怪的问题能搞明白了
    • 为什么能创建窗口?
    • 为什么 Ctrl-C 有时不能退出程序
      • StackOverflow (2017.5): Helping one million developers exit Vim (今天:不会再发生了)
    • 为什么有的程序能把组里服务器的 128 个 CPU 用满?
  • 每天都在用的东西,能实现出来了
    • 浏览器、编译器、IDE、游戏/外挂、杀毒软件、病毒……

什么是操作系统?

Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)

理解操作系统

我们不需要 “精准” 的教科书定义

定义只是概括,否则教科书这么厚毫无道理。

  • 定义是 “全部” 的一个极简表达
    • 用于两个理解 “全部” 的人之间沟通方便
  • 对新手是个有意义的参考,但不要细究
    • 想学习操作系统,就必须理解 “全部”

理解操作系统的 “全部”:理解它发展的历史

  • 操作系统如何从一开始变成现在这样的?
  • 三个重要的线索
    • 硬件 (计算机)、软件 (程序)、操作系统 (管理硬件和软件的软件)

会编程,你就拥有全世界!

Computer is not magic.

Logisim 是本次课程的第一个彩蛋

  • 同样的方式可以模拟任何数字系统 (包括计算机系统)
  • 同时还体验了 UNIX 哲学
    • Make each program do one thing well
    • Expect the output of every program to become the input to another

理解操作系统

  • 理解硬件 (计算机) 和软件 (程序) 的发展历史
  • 夹在中间的就是操作系统

1940s 的计算机软件

打印平方数、素数表、计算弹道……(教科书习题来源)

怎样学操作系统?

高考给了大家站在这里的机会,但也让大家学会:

  • 在短期有益、长期无益的小事上付出大量时间
  • 本能拒绝高风险、高回报的事物

“Just for Fun”

《操作系统》课希望我们成为的人

试着去成为一个有 CS 梦想的人

  1. 是一个合格的操作系统用户
    • 会 STFW/RTFM/ATFAI 自己动手解决问题
    • 进而,不怕使用任何命令行工具
      • vim, tmux, grep, gcc, binutils, ...
  2. 不怕 (或者爱上) 写代码
    • 能管理一定规模 (数千行) 的代码
    • 在出 bug 时默念 “机器永远是对的、我肯定能调出来的”
      • 然后开始用正确的工具/方法调试

“学渣” 们:不要 “架空学习”,先回头练习核心素质

“架空”在这里指的是忽略、回避或不重视。

0. 学术诚信 (Academic Integrity)

Academic integrity 不是底线,而是 “自发的要求”

  • 对 “不应该做的事情” 有清楚的认识
    • 不将代码上传到互联网
    • 主动不参考别人完成的实验代码
    • 不使用他人测试用例 (depends)
  • 因为你有梦想,所以才会挑战自己
    • 高风险、高回报
    • Academic misconduct: 低风险、得到分数、失去训练

1. 成为 Power User

感到 Linux/PowerShell/... 很难用?

  1. 没有建立信心、没有理解基本逻辑 → 系统性自学
  2. 没有找对材料 → 多问 “能不能再做点什么”
  3. 没有用对工具 → 请教别人 (包括人工智能)

2. 开始写代码

命令行 + 浏览器就是全世界

  • 不需要讲语言特性、设计模式……编程中自然而然会有体会