终端

终端

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

打字机 (Typewriter)

QWERTY 键盘 (1860s)

  • 为降低打字速度设计的防卡纸方案
    • 毕竟机械结构,每一下都需要足够的力量

center

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

打字机时代的遗产

Shift

  • 使字锤或字模向上移动一段距离,切换字符集

CR & LF

  • \r CR (Carriage Return): 回车,将打印头移回行首
    • print('Hel\rlo')
  • \n LF (Line Feed): 换行,将纸张向上移动一行
    • UNIX 的 \n 同时包含 CR 和 LF

Tab & Backspace

  • 位置移动 (Backspace + 减号 = 错了划掉)
2025 南京大学《操作系统原理》
终端

电传打字机 (Teletypewriter)

为了发电报设计 (收发两端同时打印)

  • Telex (teleprinter exchange): 1920s,早于计算机
    • 使用 Baudot Code (5-bit code)
    • 很自然地也能用在计算机上

center

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

电传打字机 (cont'd)

center

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

VT100: 封神之路

Video Teletypewriter (DEC, 1978)

  • 成为事实上的行业标准
    • 首个完整实现 ANSI Escape Sequence 的终端
    • 80×2480\times 24 字符显示成为标准布局

center

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

计算机终端:原理

作为输出设备

  • 接受 UART 信号并显示 (Escape Sequence 就非常自然了)

作为输入设备

  • 把按键的 ASCII 码输出到 UART (所以有很多控制字符)

center

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

今天:伪终端 (Pseudo Terminal)

一对 “管道” 提供双向通信通道

  • 主设备 (PTY Master): 连接到终端模拟器
  • 从设备 (PTY Slave): 连接到 shell 或其他程序
    • 例如 /dev/pts/0

伪终端经常被创建

  • ssh, tmux new-window, ctrl-alt-t, ...
  • openpty(): 通过 /dev/ptmx 申请一个新终端
    • 返回两个文件描述符 (master/slave)
    • (感受到 “操作系统对象” 的恐怖体量了吧)
2025 南京大学《操作系统原理》
终端

终端模拟器 (Terminal Emulator)

这下你也会实现了

  • openpty + fork
    • 子进程:stdin/stdout/stderr 指向 slave
    • 父进程:从 master 读取输出显示到屏幕; 将键盘输入写入 master

甚至可以扩展 Escape Sequence 来显示图片

  • Kitty: \033[60C\_ 开头,\033\ 结尾
    • 允许控制大小、位置、动画等
    • kitten icat img.png | cat
  • 应该内嵌 WebView 的 😭 期待这个革命性的产品
2025 南京大学《操作系统原理》
终端

终端:更多功能

终端模式

  • Canonical Mode: 按行处理
    • 回车发送数据 (终端提供行编辑功能)
  • Non-canonical Mode: 按字符处理
    • 每个字符立即发送给程序
    • 用于实现交互式程序: vim, ssh sshtron.zachlatta.com

终端属性控制

  • tcgetattr/tcsetattr (terminal control)
  • 可以控制终端的各种行为:回显、信号处理、特殊字符等
    • (你输密码的时候关闭了终端的回显)
2025 南京大学《操作系统原理》