在Linux上,X服务器如何与特定的tty(例如tty7)建立关系,以便仅当该tty位于前台时X服务器才能接收输入并在屏幕上绘制?这是如何执行的?
(我之前在 Stack Overflow 上以下面所示的形式发布了这个问题,该问题已被关闭。)
我有几个问题,当有人说“X 服务器在 /dev/tty7 上运行”时,这意味着什么。我对其工作原理做了一些猜测,我希望有人能告诉我以下陈述是真是假。
- /dev/tty7 通常是 Xorg 的控制终端。
- 尽管 tty7 是 Xorg 的控制终端,但它并不以任何有意义的方式“控制”Xorg。
- Xorg 通过轮询 /dev/input/... 或类似的方式直接接收键盘和鼠标输入,而不是通过读取 /dev/tty7。尽管如此,/dev/tty7 也会接收击键,您可以通过在终端仿真器中运行“xxd -p /dev/tty7”来看到(例如)。
- Xorg 使用某些特定于硬件的接口(例如驱动程序创建的某些设备文件或内存的 I/O 映射区域)在屏幕上绘图,而不是通过写入 /dev/tty7。
- 当 Xorg 设置视频模式时,tty 驱动程序会自动停止在屏幕上绘制。这就是为什么当您按下某个键或将字符串回显到 /dev/tty7 时,您看不到它出现在屏幕上。
- 即使 tty7 在后台,Xorg 也会通过 /dev/events 接收键盘和鼠标输入,但除非 tty7 在前台,否则它会忽略它。
- 无论 Xorg 在屏幕上绘制什么,只有当 tty7 位于前台时才在监视器上可见。
- Xorg初始化视频时(设置视频模式等),是因为tty7在前台,所以设置只在tty7上生效,其他终端不生效。
例如,如果您关闭一个管道或套接字,该管道或套接字的写入缓冲区中仍有尚未被另一端进程读取的数据,那么 close() 是否会阻塞,直到读取数据或其他进程死亡?
显然,mmap受到最大可用虚拟地址空间块的大小的限制。但假设我们有一个 64 位系统,对于大多数用途来说这几乎是无限的。我们还假设没有配置交换分区。
在匿名映射的情况下,大小必须限制为可用物理内存的总量。
但是,在文件支持的映射的情况下,我想知道是否存在基于物理内存量的限制,例如映射的大小最多可以是物理内存量的X倍?或者mmap只要不达到虚拟地址空间限制,就允许我将任意大的文件映射为单个块?例如,如果我有 32 GiB 的 RAM,我可以成功创建mmap1 TiB 的磁盘文件吗?
特别询问有关 Linux 的问题,以防万一。(我尝试使用 64 GiB 文件,它似乎可以工作。不幸的是,我没有比这更多的可用磁盘空间。)