Plan 9 System (Bell Lab)

硬件设备

  • 目标环境: 便宜的小型机(办公室个人使用)+ 集中管理的大型服务器(file server, cpu server)

  • 分布式环境设计, 强调网络互联和资源共享

  • UTF-8

  • /proc

  • rfork

硬件存储抽象
软件文件系统抽象

包括网络的分布式一致性
创新点

设计目标

  • maintainence: 分布式的个人 pc 进行 administer 一个系统的开销太大太困难了

    • 也就是通过 centralized administration 来实现集中管理
  • 统一接口: 一切皆文件, 通过 9P 协议访问

  • 每个进程拥有独立的命名空间, 可通过 bindmount 重新组合

  • 支持透明分布式: 远程资源与本地资源无差别

  • 简洁内核, 核心任务是 9P 消息的 multiplex/demultiplex

File System

  • 层次化文件系统 (hierarchical file system): 所有资源挂入统一目录树
  • 9P 协议: 核心协议, 提供 attach/walk/open/read/write/clunk/stat 等操作
  • 统一命名空间: 本地, 远程, 服务的文件树合并成一个 namespace
  • per-process namespace: 每个进程可以定义自己的视图, 实现隔离与灵活性

P9 local name space

  • 将网络上的服务映射进本地命名空间 → 使用上无差别
  • 例如: /net/tcp 代表网络栈, /srv 可用来挂载用户态文件服务器
  • 通过 bind (覆盖/合并目录) 与 mount (挂载远程服务) 灵活组合

窗口系统 (8½)

  • 每个窗口对应一个独立的文件系统, 提供输入输出接口
  • 用户通过读写文件即可与窗口交互, 无需特殊 API
  • “每个窗口有自己的命名空间”, 实现隔离和灵活的配置

进程与线程

  • 内核不直接提供多线程库, 用户态通过 Alef 等语言实现并发
  • 强调轻量级进程和消息传递模型

内核与 9P 的关系

  • 内核作为 9P multiplexer: 接收进程发出的 9P 请求, 分发到本地驱动或远程服务
  • 使用 channel 和 mount table 管理路径解析与 fid 映射
  • 内核功能精简, 核心就是消息转发与资源复用

dump/备份机制

  • 文件系统提供快照式 dump: 只保存发生改变的块, 形成增量镜像
  • 类似现代文件系统的快照/写时复制思想

创新与意义

  • 命名空间: 支持 per-process namespace, 远远领先当时其他系统
  • 协议统一: 所有资源通过 9P 文件协议操作, 简化 API
  • 用户态扩展: 用户可实现文件服务器并挂载到系统中
  • 分布式透明性: 用户无需区分本地/远程