课程来源:b站-绿导师原谅你了“操作系统:设计与实现”(蒋炎岩)

教材

1. 为什么要学操作系统

1.1 为什么要学xxx

  • 理解这门学科为了解决什么样的问题
  • 重走一遍前人的发现历程
  • 最终为了做到应用、创新、革命
  • 了解到这门学科能做什么,不能做什么,知道这门技术的边界在哪里

2. 什么是操作系统

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)

2.1 什么是操作系统

简单的说,操作系统就是管理软/硬件资源、为程序提供服务的程序。

os-1-1

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

2.2前导知识

  • 高级语言代码 → 指令序列 → 二进制文件 → 处理器执行
    • 前导课程目标:能将需求实现;掌握工具使用;阅读汇编指令

3.3 理解操作系统

  • 操作系统他是在计算机硬件软件发展历史之间出现的一个产物。

1940s

  • 在没有操作系统、甚至连编程语言都没有的时候,人们还在画流程图、写机制代码、戳纸袋,这个阶段,能把程序跑起来就很了不起了。

1950s-1960s

  • 这个阶段,硬件改进了,逻辑门-存储-I/O 的基本格局没有变。

    • 晶体管、磁芯内存、丰富的 I/O 设备
    • I/O 设备的速度严重低于处理器的速度,中断机制出现 (1953)
  • 更复杂的通用的数值计算

    • 高级语言和 API 诞生 (Fortran, 1957):一行代码,一张卡片80 行的规范沿用至今

os-1-2

  • Fortran 已经 “足够好用”

    • 迎来了自然科学、工程机械、军事……对计算机的需求暴涨
  • 库函数 + 管理程序排队运行的调度代码

    • 写程序 (戳纸带)、跑程序都是非常费事的
    • 计算机非常贵
      • $50,000−$1,000,000
      • 通常一个学校只有一台
  • 算力成为服务,操作系统概念形成

    • 多用户轮流共享计算机,operator 负责操作程序切换
    • Operating systems (操作系统/作業系統)
      • (今天算力又成为服务了-人工智能)
  • CTSS (Compatible Time-Sharing System)

1960s-1970s

  • 集成电路、总线出现

  • 更多的高级语言和编译器出现

  • 个人电脑登上历史舞台

  • 能载入多个程序到内存且调度它们的管理程序

    • 为防止程序之间形成干扰,操作系统自然地将共享资源 (如设备) 以 API 形式管理起来
      • 有了进程 (process) 的概念
      • 进程在执行 I/O 时,可以将 CPU 让给另一个进程
        • 在多个地址空间隔离的程序之间切换
        • 虚拟存储使一个程序出 bug 不会 crash 整个系统
  • 操作系统中自然地增加进程管理 API

1970s+

  • 分时系统走向成熟,UNIX 诞生并走向完善,奠定了现代操作系统的形态

3. 如何学操作系统

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

是一个合格的操作系统用户

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

操作系统是软件和硬件之间的桥梁;因此我们 “找到” 一些合适的软件、一些相对简单的硬件,理解操作系统就会变得容易。