5.Plan9_9P
Plan 9 System (Bell Lab)
硬件设备
-
目标环境: 便宜的小型机(办公室个人使用)+ 集中管理的大型服务器(file server, cpu server)
-
分布式环境设计, 强调网络互联和资源共享
-
UTF-8
-
/proc -
rfork
硬件存储抽象
软件文件系统抽象包括网络的分布式一致性
创新点
设计目标
-
maintainence: 分布式的个人 pc 进行 administer 一个系统的开销太大太困难了
- 也就是通过 centralized administration 来实现集中管理
-
统一接口: 一切皆文件, 通过 9P 协议访问
-
每个进程拥有独立的命名空间, 可通过
bind和mount重新组合 -
支持透明分布式: 远程资源与本地资源无差别
-
简洁内核, 核心任务是 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
- 用户态扩展: 用户可实现文件服务器并挂载到系统中
- 分布式透明性: 用户无需区分本地/远程
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
