【论文阅读笔记】--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 不是在"简化操作系统",

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

它展示了一种可能性:

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

也可以是教学系统,

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

相关推荐
深蓝海拓15 小时前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
中屹指纹浏览器15 小时前
中屹指纹浏览器多场景技术适配与接口封装实践
经验分享·笔记
BugShare17 小时前
Obsidian 使用指南:从零开始搭建你的个人知识库
笔记·obsidian
深蓝海拓18 小时前
PySide6从0开始学习的笔记(二十五) Qt窗口对象的生命周期和及时销毁
笔记·python·qt·学习·pyqt
跃渊Yuey18 小时前
【Linux】线程同步与互斥
linux·笔记
AI视觉网奇18 小时前
FBX AnimSequence] 动画长度13与导入帧率30 fps(子帧0.94)不兼容。动画必须与帧边界对齐。
笔记·学习·ue5
科技林总18 小时前
使用Miniconda安装Jupyter
笔记
woodykissme19 小时前
倒圆角问题解决思路分享
笔记·学习·工艺
laplace012319 小时前
Clawdbot 部署到飞书(飞连)使用教程(完整版)
人工智能·笔记·agent·rag·clawdbot
凉、介20 小时前
ACRN Hypervisor 简介
笔记·学习·虚拟化