操作系统导论学习笔记(一)

为了让程序运行变得更容易,操作系统出现了。操作系统完成的事情包括,允许多个程序同时运行、让程序共享内存、让程序能够与设备交互等。操作系统负责确保系统既易于使用又正确高效的运行。操作系统通过虚拟化(virtualization)做到这一点,操作系统将物理资源(如 CPU、内存或磁盘)转换为更通用、更强大且更易于使用的虚拟形式。因此,我们有时将操作系统称为虚拟机(virtual machine)

设计和实现操作系统的目标

  1. 提供高性能,尽可能降低操作系统的性能开销 minimize the overhead
  2. 在应用程序之间以及操作系统和应用系统之间提供保护 protection
  3. 让进程间彼此隔离是实现保护的关键 isolation
  4. 保证高可靠性 reliability
  5. 能源效率 energy efficiency, 安全性 security, 移动性 mobility

操作系统的 3 个“简单”部分

  1. 虚拟化 virtualizing
  2. 持久性 persistence
  3. 并行 concurrency

Operating System: three easy pieces

虚拟化 virtualizing

虚拟化又分为虚拟化 CPU 和虚拟化内存。

虚拟化 CPU

在硬件的一些帮助下,操作系统负责提供这种假象(illusion),即系统拥有非常多的虚拟CPU的假象。将单个CPU(或其中一小部分)转换为看似无限数量的CPU,从而让许多程序看似同时运行,这就是所谓的虚拟化CPU(virtualizing the CPU)

虚拟化内存

每个进程访问自己的私有虚拟地址空间(virtual address space)(有时称为地址空间,address space),操作系统以某种方式映射到机器的物理内存上。一个正在运行的程序中的内存引用不会影响其他进程(或操作系统本身)的地址空间。对于正在运行的程序,它完全拥有自己的物理内存。但实际情况是,物理内存是由操作系统管理的共享资源。

持久化 persistence

内存 DRAM 中的数据是易失的,如果断电或系统崩溃,内存中的数据都会丢失。因此我们需要硬件和软件支持来持久地存储数据。

硬件以某种输入/输出设备(Input/Output, I/O)的形式出现。

操作系统中管理磁盘的软件通常称为文件系统(file system)。因此它负责以可靠和高效的方式,将用户创建的任何文件(file)存储在系统的磁盘上。

关键问题:如何持久地存储数据

文件系统是操作系统的一部分,负责管理持久的数据。持久性需要哪些技术才能正确地实现?需要哪些机制和策略才能高性能地实现?面对硬件和软件故障,可靠性如何实现?

并行 concurrency

关键问题:如何构建正确的并发程序

如果同一个内存空间中有很多并发执行的线程,如何构建一个正确工作的程序?操作系统需要什么原语?硬件应该提供哪些机制?我们如何利用它们来解决并发问题?

操作系统的简单历史

  1. 早期操作系统:只是一些库
  2. 引入保护机制:借助硬件的帮助,区分用户模式和内核模式
  3. 多道程序 multiprogram: 提高 CPU 执行效率,避免 I/O 处理拖慢 CPU 执行。出现 Unix
  4. 摩登时代:出现个人计算机,遗憾的是,对于操作系统来说,个人计算机起初代表了一次巨大的倒退,因为早期的系统忘记了(或从未知道)小型机时代的经验教训。幸运的是,经过一段时间的苦难后,小型计算机操作系统的老功能开始进入台式机。