输入输出设备

输入输出设备

2025 南京大学《操作系统原理》
输入输出设备

Everything is a File

文件:有 “名字” 的数据对象

  • 字节流 (终端,random)
  • 字节序列 (普通文件)

文件描述符

  • 指向操作系统对象的 “指针”
    • Everything is a file
    • 通过指针可以访问 “一切”
  • 对象的访问都需要指针
    • open, close, read/write (解引用), lseek (指针内赋值/运算), dup (指针间赋值)
2025 南京大学《操作系统原理》
输入输出设备

没那么简单!

让我们插个优盘试试……

  • 优盘的文件系统会自动 “出现”
  • 但你是专业人士
    • 看看 /dev/ 是不是发生了一些什么变化

水面下的冰山

  • /dev/ 下的对象不会凭空创建
    • udev - /lib/udev/rules.d 💩🏔️
    • udisks2 - 这才是真正执行 mount 的程序
2025 南京大学《操作系统原理》
输入输出设备

今天的主角:输入输出设备

你实际上 “看到” 的计算机

center

2025 南京大学《操作系统原理》
输入输出设备

“计算” 和 “物理世界” 之间的桥梁

I/O 设备 = 一个能与 CPU 交换数据的接口/控制器

  • 就是 “几组约定好功能的线” (寄存器)
    • 通过握手信号从线上读出/写入数据
  • 给寄存器 “赋予” 一个内存地址 (Address Decoder)
    • CPU 可以直接使用指令 (in/out/MMIO) 和设备交换数据
    • 是的,就这么简单

center

2025 南京大学《操作系统原理》
输入输出设备

实现输入/输出

例子:发射核弹

  • 使计算机能感知外部状态 (眼睛、耳朵)、对外实施动作 (手)
2025 南京大学《操作系统原理》
输入输出设备

答案:一根线、一条指令 (树莓派上就有)

GPIO (General Purpose Input/Output)

  • 极简的模型:Memory-mapped I/O 直接读取/写入电平信号

center

2025 南京大学《操作系统原理》
输入输出设备

GPIO: 一根可以读写数据的线

center

led = LED(2)
led.on(); time.sleep(0.03); led.off()
  • 真正的核弹发射器也是类似的原理……
2025 南京大学《操作系统原理》