为什么要学操作系统?

  • 搞明白自己每天在用的东西
  • 为了具有编写“一切”程序的能力

什么是操作系统

什么是操作系统

  • 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)

理解操作系统

“精确”的教科书定义毫无意义

操作系统“全部的overview

  • 三个重要的线索
    • 硬件(计算机)
    • 软件(程序)
    • 操作系统(管理硬件和软件的软件)

      理解计算机硬件(电路)

  • 一个极简的公理系统(导线、时钟、逻辑门、触发器)
  • 建立在公理体系上的数字系统设计(包括计算机)

    UNIX philosophy:

    • Make each program do one thing well
    • Expect the output of every program to become the input to another

理解计算机软件(程序)

  • 高级语言代码 → 指令序列 → 二进制文件 → 处理器执行
  • .c.s.oa.out

理解操作系统

本课程讨论狭义的操作系统

  • 操作系统:硬件和软件的中间层
    • 对单机(多处理器)作出抽象
    • 支撑多个程序执行
  • 学术界讨论的”操作系统“是更广义的”System“
    • e.g.:对多态计算机抽象(分布式系统)

理解操作系统

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

发展历史

1940s

第一台计算机ENIAC:1946.2.14

1940s 的计算机硬件

电子计算机的实现

  • 逻辑门:真空电子管
  • 存储器:延迟线
  • 输入/输出:打孔纸带/指示灯

    1940s 的计算机软件

    打印平方数、素数表……

    原来现在程设课的例题都是历史遗物

1940s 的操作系统

Null

  • 程序直接用指令操作硬件
  • 不需要其他程序进行管理

1950s

1950s 的计算机硬件

更快更小的逻辑门 (晶体管)、更大的内存 (磁芯)、丰富的 I/O 设备

  • I/O 设备的速度已经严重低于处理器的速度,中断机制出现 (1953)

1950s 的计算机软件

更复杂的通用的数值计算

  • 高级语言和 API 诞生 (Fortran, 1957):一行代码,一张卡片
    ke
    Fortran 已经 “足够好用”
  • 自然科学、工程机械、军事……对计算机的需求暴涨

1950s 的操作系统

库函数 + 管理程序排队运行的调度代码
写程序(戳纸带)、跑程序都非常费事

  • 计算机太贵,一个学校只有一台
  • 算力成为一种服务:多用户轮流共享计算机,operator负责调度
    操作系统的概念开始形成
  • 操作 (operate) 任务 (jobs) 的系统 (system)
    • “批处理系统” = 程序的自动切换 (换卡) + 库函数 API
    • Disk Operating Systems (DOS)
      • 操作系统中开始出现 “设备”、“文件”、“任务” 等对象和 API

1960s

1960s 的计算机硬件

集成电路、总线出现

  • 更快的处理器
  • 更快、更大的内存;虚拟存储出现
    • 可以同时载入多个程序而不用 “换卡” 了
  • 更丰富的 I/O 设备;完善的中断/异常机制

1960s 的计算机软件

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

  • COBOL (1960), APL (1962), BASIC (1965)
    • Bill Gates 和 Paul Allen 在 1975 年实现了 Altair 8800 上的 BASIC 解释器

计算机科学家们已经在今天难以想象的计算力下开发惊奇的程序

1960s 的操作系统

能载入多个程序到内存且调度它们的管理程序
为防止程序之间形成干扰,操作系统自然地将共享资源 (如设备) 以 API 形式管理起来

  • 有了进程 (process) 的概念
  • 进程在执行 I/O 时,可以将 CPU 让给另一个进程
    • 在多个地址空间隔离的程序之间切换
    • 虚拟存储使一个程序出 bug 不会 crash 整个系统
      操作系统中自然地增加进程管理 API
  • 既然可以在程序之间切换,为什么不让它们定时切换呢?
  • Multics (MIT, 1965):现代分时操作系统诞生

1970s+

1970s+ 的计算机硬件

集成电路空前发展,个人电脑兴起,“计算机” 已与今日无大异

  • CISC 指令集;中断、I/O、异常、MMU、网络
  • 个人计算机 (PC 机)、超级计算机……

1970s+ 的计算机软件

PASCAL (1970), C (1972), …

  • 今天能办到的,那个时代已经都能办到了——上天入地、图像声音视频、人工智能……
  • 个人开发者 (Geek Network) 走上舞台

1970s 的操作系统

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

今天的操作系统

通过 “虚拟化” 硬件资源为程序运行提供服务的软件
空前复杂的系统之一

  • 更复杂的处理器和内存
  • 更多的设备和资源
  • 复杂的应用需求和应用环境

课程内容概述

操作系统:软件硬件之间的桥梁

  • 本课程中的软件:多线程 Linux 应用程序
  • 本课程中的硬件:现代多处理器系统
    (设计/应用视角) 操作系统为应用提供什么服务?
  • 操作系统 = 对象 + API
  • 课程涉及:POSIX + 部分 Linux 特性
    (实现/硬件视角) 如何实现操作系统提供的服务?
  • 操作系统 = C 程序
    • 完成初始化后就成为 interrupt/trap/fault handler
  • 课程涉及:xv6, 自制迷你操作系统

怎样学操作系统