Everything is a File ... ?

Everything is a File ... ?

2025 南京大学《操作系统原理》
Everything is a File ... ?

一切皆文件的好处

一套 API 访问所有对象

  • 一切都可以 | grep
    • Introducing ag -g

同时,UNIX Shell 的语法广受诟病

  • 稍大一些的项目就应该用更好的语言 (Python, Rust!)
  • 但是:We all love quick & dirty!
ls -l /proc/*/fd/* 2>/dev/null | awk '{print $(NF-2), $(NF-1), $NF}'
grep -s VmRSS /proc/*[0-9]/status | awk '{sum += $2} END {print sum " kB"}'
2025 南京大学《操作系统原理》
Everything is a File ... ?

文件描述符适合什么?

字节流

  • 顺序读/顺序写
    • 没有数据时等待
    • 典型代表:管道

字节序列

  • 其实就有一点点不方便了
    • 需要到处 lseek 再 read/write
      • mmap 不香吗?指针指哪打哪
      • madvise, msync 提供了更精细的控制
2025 南京大学《操作系统原理》
Everything is a File ... ?

反思 Everything is a File

优点

  • 优雅,文本接口,就是好用

缺点

  • 和各种 API 紧密耦合
  • 对高速设备不够友好
    • 额外的延迟和内存拷贝
    • 单线程 I/O
2025 南京大学《操作系统原理》
Everything is a File ... ?

出路:API + 封装

Any problem in computer science can be solved with another level of indirection. (Butler Lampson)

  • Windows NT: Win32 API → POSIX 子系统
    • Windows Subsystem for Linux (WSL)
  • macOS: Cocoa API → BSD 子系统
  • Fuchsia: Zircon 微内核 → POSIX 兼容层

兼容当然没法做到 100%

  • sysfs, procfs 就是没法兼容
  • 优雅的 WSL1 已经暴毙 😂
    • “Windows Subsystem for Linux”
    • “Linux Subsystem for Windows” (wine)
2025 南京大学《操作系统原理》
Everything is a File ... ?

还有 OpenHarmony 呢!

2025 南京大学《操作系统原理》