每个字符设备都对应一个tty_struct数据结构,主要用来保存终端设备当前参数设置、所属的前台进程组ID和字符IO缓冲队列等信息。Linux内核使用了数组tty_table[]来保存系统中每个终端设备的信息。
// tty数据结构。
struct tty_struct {
struct termios termios; // 终端io属性和控制字符数据结构。
int pgrp; // 所属进程组。
int session; // 会话号。
int stopped; // 停止标志。
void (*write)(struct tty_struct * tty); // tty写函数指针。
struct tty_queue *read_q; // tty读队列。
struct tty_queue *write_q; // tty写队列。
struct tty_queue *secondary; // tty辅助队列(存放规范模式字符序列),
}; //可称为规范(熟)模式队列。
// tty字符缓冲队列数据结构。用于tty_struc结构中的读、写和辅助(规范)缓冲队列。
struct tty_queue {
unsigned long data; // 队列缓冲区中含有字符行数值(不是当前字符数)。
// 对于串口终端,则存放串行端口地址。
unsigned long head; // 缓冲区中数据头指针。
unsigned long tail; // 缓冲区中数据尾指针。
struct task_struct * proc_list; //等待本队列的进程列表。
char buf[TTY_BUF_SIZE]; // 队列的缓冲区。
};