(What) 什么是操作系统?

(What) 什么是操作系统?

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

什么是操作系统?

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)

诸多疑点

  • “Programs” 就完了?刚才提到了虚拟机、游戏外挂……
    • 那么多复杂的程序,它们都一样吗?
  • “Shared memory, interact with devices, ...”?
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

什么是操作系统? (cont'd)

“管理软/硬件资源、为程序提供服务” 的程序?

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

理解操作系统

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

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

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

  • 操作系统如何从一开始变成现在这样的?
  • 三个重要的线索
    • 硬件 (计算机)、软件 (程序)、操作系统 (管理硬件和软件的软件)
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

复习:理解计算机硬件 (电路)

Quiz: 《数字逻辑电路》课学了个什么?

  • 一个极简的公理系统 (导线、时钟、逻辑门、触发器)
  • 能支撑非常复杂的数字系统设计 (例如,高性能计算机)

center

(复习:山寨 logisim)
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

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

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

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

命令行是一个非常有趣的设计

  • 在自然语言和编程语言之间达到了平衡
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

复习:理解计算机软件 (程序)

前导课程:C 程序设计/计算机系统基础

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

center

(复习:mini-rv32ima)
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

理解操作系统

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

  • 操作系统:硬件和软件的中间层
    • 对单机 (多处理器) 作出抽象
    • 支撑多个程序执行
  • 这个概念可以推广到 “Systems”
    • 对多台计算机抽象 (分布式系统)、对存储设备的抽象 (存储系统)、……

理解操作系统

  • 理解硬件 (计算机) 和软件 (程序) 的发展历史
  • 夹在中间的就是操作系统
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

一个新时代的诞生:ENIAC (1946.2.14)

“图灵机” 的数字电路实现

  • 执行完一条指令后,可以根据结果跳转到任意一条指令
    • 用物理线路 “hard-wire”
  • 重编程需要重新接线:Programming the ENIAC

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1940s 的计算机硬件

电子计算机的实现

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

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1940s 的计算机软件

打印平方数、素数表、计算弹道……

  • 解释了《程序设计》教课书上经典习题的来源
    • (是时候改一改了)
  • 大家还在和真正的 “bugs” 战斗

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1940s 的操作系统

没有操作系统

连编程语言都没有

  • 大家还在画流程图、写机制代码、戳纸带

能把程序跑起来就很了不起了

  • 程序直接用指令操作硬件
  • 不需要画蛇添足的程序来管理它
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1950s-1960s 的计算机硬件

硬件改进了,逻辑门-存储-I/O 的基本格局没有变

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

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1950s-1960s 的计算机软件

更复杂的通用的数值计算

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

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1950s-1960s 的计算机软件 (cont'd)

Fortran 已经 “足够好用”

  • 迎来了自然科学、工程机械、军事……对计算机的需求暴涨
C---- THIS PROGRAM READS INPUT FROM THE CARD READER,
C---- 3 INTEGERS IN EACH CARD, CALCULATE AND OUTPUT
C---- THE SUM OF THEM.
  100 READ(5,10) I1, I2, I3
   10 FORMAT(3I5)
      IF (I1.EQ.0 .AND. I2.EQ.0 .AND. I3.EQ.0) GOTO 200
      ISUM = I1 + I2 + I3
      WRITE(6,20) I1, I2, I3, ISUM
   20 FORMAT(7HSUM OF , I5, 2H, , I5, 5H AND , I5,
     *   4H IS , I6)
      GOTO 100
  200 STOP
      END
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1950s-1960s 的操作系统

库函数 + 管理程序排队运行的调度代码

  • 写程序 (戳纸带)、跑程序都是非常费事的
  • 计算机非常贵
    • $50,000$1,000,000\$50,000-\$1,000,000
    • 通常一个学校只有一台

算力成为服务,操作系统概念形成

  • 多用户轮流共享计算机,operator 负责操作程序切换
  • Operating systems (操作系统/作業系統)
    • (今天算力又成为服务了)
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1950s-1960s 的操作系统

CTSS (Compatible Time-Sharing System)

  • 操作系统中出现了各类对象:设备、文件、任务……
  • CTSS Subroutines:
RDFLXA: Read an input line from console
WRFLX: Write an output line to console
DEAD: Put the user into dead status, with no program in memory
DORMNT: Put the user into dormant status, with program in memory
GETMEM: Get the size of the memory allocation
SETMEM: Set the size of the memory allocation
TSSFIL: Get access to the CTSS system files on the disk
USRFIL: Change back to user's own directory
GETBRK: Get the instruction location counter at quit
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1960s-1970s 的计算机硬件

集成电路、总线出现

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

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1960s-1970s 的计算机软件

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

  • COBOL (1960), APL (1962), BASIC (1965), PASCAL (1970), C (1972)
  • 计算机科学家们在今天难以想象的计算力下开发惊奇的程序

center

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

个人电脑登上历史舞台

2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1960s-1970s 的操作系统

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

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

操作系统中自然地增加进程管理 API

  • 既然可以在程序之间切换,为什么不让它们定时切换呢?
  • Multics (MIT, 1965):现代分时操作系统诞生
2024 南京大学《操作系统:设计与实现》
(What) 什么是操作系统?

1970s+ 的操作系统

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

  • 1973: 信号 API、管道 (对象)、grep (应用程序)
  • 1983: BSD socket (对象)
  • 1984: procfs (对象)……
  • UNIX 衍生出的大家族
    • 1BSD (1977), GNU (1983), MacOS (1984), AIX (1986), Minix (1987), Windows (1985), Linux 0.01 (1991), Windows NT (1993), Debian (1996), Windows XP (2002), Ubuntu (2004), iOS (2007), Android (2008), Windows 10 (2015), ……
2024 南京大学《操作系统:设计与实现》