Q: console和tty是什么关系?
A: 为了避免名词混乱,我们先默认为,console被当做是物理终端或者单用户模式的终端, tty我们一般叫做虚拟终端,一般是GUI终端内部模拟的终端. console的读写更简洁, TTY和console的流程类似, 不过最终会交给GUI应用程序负责回显.
我们以console为例.
Q: 对console的写操作,内部流程是什么?
A: 调用堆栈如下:
con_write会把write系统调用的buffer送到指定的console缓冲区中,并调用con_putcs把数据输出到显示器.
Q: 对console的读操作,执行流程是什么?
A: 调用堆栈如下:
n_tty_read会调用add_wait_queue把当前线程至于阻塞状态,并等待输入的数据.
Q: 何时会唤醒read_wait等待队列呢?
A: 当按键被按下,键盘终端处理程序会调用tty_insert_flip_char把当前输入的按键信息传递给当前的console, 继而调用到tty接收buffer处理函数n_tty_receive_buf或n_tty_receive_buf2, 最后调用相应的唤醒函数.
比如:
n_tty_receive_char_special 输入换行符:
__receive_buf 当输入读到的数据超过TTY设置的最大数据唤醒长度, 也会唤醒read:
作者: 陈曦 环境: MacOS 10.14.5 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.6.0 Linux 3.16.83 转载请注明出处