Skip to content

绪论

笔记混合 jyy 和大班操作系统知识点

五个简答题,覆盖基本概念、进程、线程与地址空间、编译、链接和加载、并发编程和文件系统。 - 操作系统:“管理软/硬件资源、为应用程序提供服务” 的程序,硬件和软件的中间层 - 操作系统作为系统资源管理者 - 处理机管理 - 存储器管理 - 文件管理 - 设备管理 - 作为用户与计算机硬件之间的接口 - 命令接口:联机命令接口(交互接口),脱机命令接口(批处理接口) - 程序接口:系统调用 - 操作系统发展历程、 - 手工阶段:独占计算机资源,人工操作,资源利用率低 - 单道批处理:自动顺序执行,效率较高 - 多道批处理:(并发)宏观并行,微观串行 - 分时操作系统:交互性强 - 实时操作系统:及时可靠

操作系统的功能

  • 虚拟化:操作系统将物理资源(如处理器、内存或磁盘)转换为更通用、更强大且更易于使用的虚拟形式。操作系统扮演的主要角色就是操理这些资源,以做到高效或公平

    • 虚拟化 cpu:一运行多个程序的能力
    • 虚拟化内存:每个进程访问自己的私有虚拟地址空间,操作系统以某种方式映射到机器的物理内存上。进程之间不会相互影响
  • 并发

    • 并发是两个或多个事件在同一时间间隔内发生
    • 并行是系统同事进行多个工作
  • 持久性

    • 硬件和软件来持久地存储数据,避免由于断电或系统崩溃造成的数据丢失
    • 文件系统管理
  • 操作系统管理状态机:通过一系列 API 如 fork,execve 等

  • 操作系统提供了对象和 API:文件描述符、open、read 等系统调用

设计目标:

  • 抽象,让系统方便和易于使用
  • 提供高性能,最小化操作系统的开销
  • 在应用程序之间以及应用程序与 OS 之间提供保护(隔离)
  • 操作系统需要不间断运行

应用程序视角下的操作系统

  • 处理器就是执行指令的状态机,不断取指令执行指令循环往复
  • 指令集并不是万能的:比如指令集中没有关闭计算机的指令,这就需要通过系统调用依赖于操作系统实现
  • 任何程序都是状态机:
    • 从被操作系统加载开始,经历状态机执行(计算+系统调用)最终调用_exit 退出
    • 应用程序=计算+操作系统 API(syscall)
  • 操作系统的职责:提供令应用程序舒适的抽象 (对象 + API)
  • 窗口管理器
    • 能直接管理屏幕设备
    • 能够和其他进程通信
  • 任务管理器
    • 能访问操作系统提供的进程对象
  • 杀毒软件
    • 文件静态扫描 (read)、主动防御 (ptrace)

高级语言程序

  • 函数调用时会保留上一个栈针执行到的为止,即返回地址。因此可以说每个栈针有自己的 PC 指针
  • 非递归的汉诺塔实现
    typedef struct {
      int pc, n;
      char from, to, via;
    } Frame;
    #define call(...) ({ *(++top) = (Frame) { .pc = 0, __VA_ARGS__ }; })
    #define ret()     ({ top--; })
    #define goto(loc) ({ f->pc = (loc) - 1; })
    void hanoi(int n, char from, char to, char via) {
      Frame stk[64], *top = stk - 1;
      call(n, from, to, via);
      for (Frame *f; (f = top) >= stk; f->pc++) {
        n = f->n; from = f->from; to = f->to; via = f->via;
        switch (f->pc) {
          case 0: if (n == 1) { printf("%c -> %c\n", from, to); goto(4); } break;
          case 1: call(n - 1, from, via, to);   break;
          case 2: call(    1, from, to,  via);  break;
          case 3: call(n - 1, via,  to,  from); break;
          case 4: ret();                        break;
          default: assert(0);
        }
      }
    }
    

硬件视角下的操作系统

  • 计算机启动过程:

    • 激活 CPU,载入并执行 BIOS
    • 硬件自检
    • 加载有操作系统的硬盘
    • 加载主引导记录 MBR:确定去哪个磁盘哪个分区寻找操作系统
    • 扫描磁盘分区,加载活动分区
    • 加载分区引导记录 PBR
    • 加载启动管理器
    • 加载操作系统
  • 计算机系统状态机模型:

    • 状态:内存、寄存器数值
    • 初始状态:由系统设计者制定 CPU Reset
    • 状态迁移:从 PC 取指令执行
  • firmware 固件

    • 进行运行程序前的计算机系统配置
    • 是一个小的操作系统,在 CPU Reset 后初始化硬件;对接操作系统 Boot Loader
  • Legacy BIOS (Basic I/O System)
    • 最早的固件类型之一,用于个人计算机,它在计算机启动时初始化硬件
    • IBM PC 所有设备/BIOS 中断是有 specification 的 ,16-bit DOS 时代 BIOS 常驻内存,提供 I/O 等功能
  • UEFI (Unified Extensible Firmware Interface)

    • UEFI是设计来替代Legacy BIOS的一种现代固件标准。它提供了更加丰富的界面和更高的灵活性,支持从大容量硬盘启动系统、快速启动、安全启动等功能。
    • 提供更丰富的支持 (例如设备驱动程序):指纹锁、山寨网卡上的 PXE 网络启动、USB 蓝牙转接器连接的蓝牙键盘……
  • Firmware (BIOS) 会加载磁盘的前 512 字节到 0x7c00 (如果这 512 字节最后是 0x55, 0xAA)

    • CPU Reset 的时候,0x7c00 应该是啥也没有的,Firmware 的代码扫描了磁盘、加载了它
  • Grub 的例子
    • Stage 1: 扫描磁盘,找到附近的 ELF 文件头,加载到内存
    • Stage 2: 这个 ELF 文件是 Grub; 弹出熟悉的选择系统窗口
    • Stage 3: 加载 Linux Kernel

数学视角的操作系统

  • 应用视角下:操作系统=对象+API(系统调用)
  • 机器视角:操作系统就是计算机硬件上的一个普通程序
  • 程序正确性的证明方法:

    • 暴力枚举
    • 写出证明
  • 操作系统是一个状态机,应用程序也是状态机是运行在操作系统上的状态机

  • 操作系统控制不同应用程序状态机的运行(调度、切换),以及负责执行系统调用
  • mini 操作系统