终端(Terminal)

  • UNIX/Linux是多用户系统
    • 主机连接多台字符终端
    • 字符终端作为交互式输入输出设备
  • 终端的构成
    • 键盘
    • 显示器
    • RS232串行通信接口
  • 字符终端的历史
    • 英文打字机 typewriter
    • 电传打字机 teletypewriter(前缀tele-),简写tty
    • 字符终端,以屏幕代替卷纸打印机(仍称做tty设备)

主机与终端的连接

主机中的串口卡(硬件)引出多个RS232串口,每个RS232接口通过电缆(3芯或更多芯)连接一台终端(同时可以有很多终端同时进入系统)。RS232电缆的长度限制:早期要求小于10米,现在可达百米。

终端与主机的功能分工

终端:主机的输入和输出设备。终端通过电缆把用户的按键信息送到主机,把主机发来的信息在屏幕上显示。

主机:程序和数据的存储及处理。数据及程序存放在主机的硬盘上,程序的运行也都由主机内的CPU占用主机内存来完成。

image.png

行律与驱动程序

  • 驱动程序
    • 不同的硬件需要不同的驱动程序
    • 与行律模块的接口:上行和下行字符流
  • 行律的作用
    • 一行内字符的缓冲、回显与编辑,直到按下回车键
    • 数据加工,如:将\n(换行符)转化为\r\n(回车换行符)
    • 将Ctrl-C字符转化为中止进程运行的信号(signal)

例:主机与终端之间的通信过程

主机与终端之间的通信过程

其中,行律起到了回显、数据加工(如\b转换为\b \b以实现退格效果,\r\n转换为\r\n以回车换行)的作用。

  • 行律功能的调整
    • 必要性(行律的功能有时是不方便的)
      • 在输入口令时不希望回显
      • 不希望行律缓冲信息,而是尽快交给程序
    • 调整方法
      • 程序中通过编程的方法
      • 相关命令stty
      1
      2
      3
      $ stty erase ^H # 不支持编辑功能的终端设置Ctrl-H擦去一个字符
      # Ctrl-H对应ASCII值为8,即为backspace
      $ stty -a # 打印行律所有控制信息状态

终端转义序列

转义字符Esc:ASCII码1B(十进制27,八进制033)

主机发往终端方向数据中的转义序列的功能

  • 控制光标位置、字符颜色、字符大小等等
  • 选择终端的字符集
  • 控制终端上的打印机、刷卡机、磁条器、密码键盘

例如:

  • Esc[2J 由主机发送到终端的四字节序列1B 5B 32 4A 功能:清除屏幕
  • Esc[8A 四字节序列,光标上移8行
  • Esc[16;8H 七字节序列,光标移到16行8列
  • Esc[1;31m 七字节序列,红色字符

终端类型:定义一组转义序列以及相对应的操作。例如:ansi,vt100, vt220等等。

主机和终端之间的类型匹配:主机根据终端类型,实现相应功能时发送对应的控制码;当终端类型设置不对,可能一些全屏幕操作的软件运行失败。

仿真终端和虚拟终端

  • 仿真终端:PC机RS232串口,运行终端仿真软件来仿一个真正的终端设备的功能
    • 例如: 早期DOS操作系统下的CrossTalk; Windows中的“超级终端”
    • 仿真的内容包括实现终端的转义码序列功能
  • 虚拟终端 (利用网络)
    • 主机和终端之间的通信实际上就是一些字节流在两个方向上进行传输。
    • 终端与主机之间的通信由串口线替代为一个TCP连接,双向传递字节流
    • 虚拟终端的字节流:虚拟终端的字节流
    • 主机与PC通过网络相连,客户端运行telnet,服务器端telnetd,成为Linux的基于TCP通信的虚拟终端(早期的使用方式,不安全)
    • 安全终端,在TCP连接上加密和压缩数据,如:Windows客户端软件SecureCRT或者putty