OS@NJUCS-Lecture01 操作系统概述
为什么要学操作系统?
- 搞明白自己每天在用的东西
- 为了具有编写“一切”程序的能力
什么是操作系统
什么是操作系统
- 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
→.o
→a.out
理解操作系统
本课程讨论狭义的操作系统
- 操作系统:硬件和软件的中间层
- 对单机(多处理器)作出抽象
- 支撑多个程序执行
- 学术界讨论的”操作系统“是更广义的”System“
- e.g.:对多态计算机抽象(分布式系统)
理解操作系统
- 理解硬件(计算机)和软件(程序)的发展历史
- 夹在中间的就是操作系统
发展历史
1940s
第一台计算机ENIAC:1946.2.14
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, 自制迷你操作系统
怎样学操作系统
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rashawn's Blog!