我注意到某些系统上并不总是存在帧缓冲区。在这些情况下,bash 如何打印到屏幕上(假设它曾经使用过 fb 设备)?由于没有帧缓冲设备,这是否意味着 bash 知道每个显卡的工作原理并可以直接写入它们的寄存器,或者它是否使用其他一些 API?
答案1
Shell 是命令行实用程序 - 它们读取输入并写入输出。通常,交互式 shell 在终端设备上打开 - 通常是内核缓冲的串行模式字符设备 - 类似于|
管道,但具有调制解调器控制和 I/O 解释模式等额外内容。其他一些程序读取并解释写入终端设备的数据以供显示,并将其标准输入写入 shell 读取的终端设备的末尾。
这是一个终端仿真器。至少 - 这是典型的配置。终端可能是实际的终端——就像一个巨大的、嗡嗡作响的、发光的硬件,里面装满了你脑袋大小的真空管,或者它可能是一个房间大小的打印机,你应该特别注意你把手放在哪里,以免丢失它们。
但通常终端仿真器是一种程序,它或多或少理解文本配置的标准协议,并且可以将 shell 的 I/O 转换为可以绘制到屏幕上的内容。 Linux 内核附带了内核虚拟控制台——它们是内置的显示端口,并连接到其内置的终端仿真器。xterm
是另一种终端仿真器 - 通过协议绘制帧缓冲区的终端仿真器X11
。
然而,无论如何,shell 已经从进程中移除了很多。
答案2
首先,它bash
不会直接打印到屏幕或帧缓冲区设备。它只是将其输出写入一个简单的文件描述符。
其次,linux既支持图形模式控制台,也支持文本模式控制台。因此,当您的配置不使用帧缓冲区驱动程序时,文本模式控制台将被激活。有一个好的文章在维基百科上有关该主题的内容。