【论文阅读笔记】--SOSP2025--Proto: A Guided Journey through Modern OS Construction

Proto: A Guided Journey through Modern OS Construction

先简单讲一下我为什么会关注这篇文章,因为大部分计算机本科生都会上一门操作系统/CSAPP的课,在这门课上都会写一个操作系统的程序,而我看到这篇文章很惊讶于为什么这个文章能发表在SOSP上,以及什么叫做modern OS construction,它和过去我们的作业究竟有什么区别,以及对我们能带来什么启发,下面的笔记由AI参与辅助生成。

一、论文背景与研究动机

传统教学型操作系统(如 xv6、Pintos、Nachos)主要面向概念教学,通常是"无头(headless)"系统,只支持 shell、简单文件系统和有限的用户程序。这类系统在传授 OS 核心抽象方面非常成功,但存在明显局限:

  • 应用简单,缺乏交互性与吸引力
  • 多运行在模拟器中,难以体现真实硬件问题
  • 与现代操作系统在结构和使用方式上差距较大

Proto 的目标并不是替代这些系统,而是回答一个不同的问题:

能否在可控复杂度内,让学生完整构建一个
可运行、可展示、可玩、且贴近现代操作系统的问题空间的 OS?

二、核心设计理念(Principles)

论文提出并贯彻了四条设计原则(P1--P4):

P1:以"有吸引力的应用"驱动 OS 机制

  • 应用包括 3D 动画、游戏(Mario、DOOM)、音乐播放器、视频播放器等
  • OS 机制的引入必须直接服务于应用需求
    • 没有 cache flush → 屏幕渲染错误
    • 没有线程 → 音频播放中断

P2:可演示性(Demonstrability)

  • OS 必须运行在真实硬件(Raspberry Pi 3, ARMv8)
  • 系统可携带、可展示,具有长期可用性

P3:渐进式原型(Incremental Prototyping)

  • 完整 Proto 被拆分为 5 个可运行原型
  • 每个原型都是一个功能闭环系统
  • 避免"一次性实现"的复杂度爆炸

P4:最小可行实现(Minimum Viable OS)

  • 每一项 OS 功能必须有明确用途
  • 拒绝"为了完整而完整"的机制设计

三、Proto 的整体架构概览

1. 执行模型

  • 单体内核(monolithic kernel)
  • ARMv8:
    • EL1:内核
    • EL0:用户程序
  • 支持:
    • 用户进程
    • 用户线程 / 内核线程
    • 多核并行执行(4 核 Cortex-A53)

2. 内存管理

  • 每个应用独立地址空间
  • 用户空间:0x0 起始
  • 内核空间:0xffff... 前缀
  • 页粒度:
    • 内核:1MB block mapping
    • 用户:4KB pages
  • 支持 page fault 与 demand paging(用户栈)

3. 系统调用

  • 共 28 个 syscall,分三类:
    • 任务管理(fork, exec, sleep)
    • 文件系统(open, read, write)
    • 线程与同步(clone, semaphore)

四、Proto 为什么是"现代操作系统"

1. 真实的用户态 / 内核态分离

  • ELF 装载、exec 路径完整
  • page fault、非法访问真实触发异常
  • 用户态承载复杂应用(SDL、DOOM)

→ 用户态不是"教学示意层",而是第一等执行环境

2. 现代并发模型:线程优先

  • 实现 clone(CLONE_VM),语义对齐 Linux
  • 线程共享 mm_struct
  • 支持:
    • semaphore syscall
    • 用户态 mutex / condvar / spinlock
  • 音频解码与播放真正并行

→ 从"进程并发"过渡到"线程并发"

3. 现代 I/O 设计

  • USB 键盘(中断驱动)
  • DMA 音频输出
  • ring buffer + 非阻塞 I/O
  • 设备文件(/dev/fb, /dev/events, /dev/surface)

→ I/O 是异步、并发、事件驱动的

4. 面向真实存储生态

  • 双文件系统设计:
    • ramdisk(系统)
    • FAT32(用户数据)
  • 可与 PC / 手机直接交换文件
  • 视频、音乐、游戏资源为真实资产

→ 文件系统服务真实使用场景,而非课堂样例

5. 多核与 SMP 支持

  • 启动并管理多个 CPU 核心
  • 每核独立 runqueue 与异常向量
  • cache coherence 配置
  • 多实例 Mario、区块链矿工接近线性扩展

→ 进入真实多核 OS 问题域

6. 图形系统是一等公民

  • framebuffer 为核心外设
  • 内核态窗口管理器(~800 SLoC)
  • 支持:
    • 多窗口
    • z-order
    • dirty region
    • 半透明窗口
    • 输入焦点管理

→ OS 是交互平台,而非"黑箱内核"

7. 直面真实硬件复杂性

  • cache flush 才能正确渲染
  • 多核非确定性 bug
  • USB 枚举与中断问题
  • 提供:
    • 自宿主调试器
    • trace buffer
    • panic button(FIQ)

→ 学习真实系统工程,而非理想模型

五、渐进式原型设计(Prototype 1--5)

原型 新增能力 代表应用
P1 framebuffer / UART donut
P2 多任务 多 donut
P3 VM + 用户态 Mario
P4 文件系统 + USB + DMA MusicPlayer
P5 多核 + 线程 + WM DOOM / Desktop

每个原型都:

  • 可独立运行
  • 有明确应用目标
  • 为下一个原型提供稳定基线

六、论文的主要贡献

  1. 提出应用驱动、可展示的教学 OS 设计范式
  2. 实现一个真实、现代、可控复杂度的操作系统
  3. 展示现代 OS 机制的"最小可行实现"方式
  4. 通过性能、能耗、扩展性与用户研究完成实证闭环
  5. 提供可复用、可扩展的开源系统平台

七、为什么可以发表在 SOSP

  • 提出清晰的 OS 设计原则(不是课程总结)
  • 覆盖现代 OS 的关键问题空间
  • 真实系统 + 真实硬件 + 真实评估
  • 对"教学 OS 如何进入系统研究领域"给出完整答案

八、个人总结

Proto 不是在"简化操作系统",

而是在约束复杂度的前提下,尽可能逼近现代操作系统的真实形态

它展示了一种可能性:

一个操作系统,既可以是研究系统,

也可以是教学系统,

同时还是一个真正可用的系统。

相关推荐
LinXunFeng3 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
闪闪发亮的小星星8 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq8 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
凌晨一点的秃头猪8 天前
论文阅读 GTI(Graph-based Tree Index): 面向高维空间最近邻搜索的动态图-树混合索引结构
论文阅读
阿米亚波8 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.8 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
有Li8 天前
PTCMIL:基于提示 token 聚类的全切片图像多实例学习分析文献速递/多模态医学影像最新进展
论文阅读·学习·数据挖掘·聚类·文献·医学生
.千余8 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.8 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
大模型最新论文速读8 天前
06-16 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理