计算机如何将像素值传达到屏幕?
处理器的指令集架构中是否有某个命令可以让处理器直接与显示器通信,或者软件是否将图形信息存储在内存中的某个位置,然后处理器会自动拾取该位置并发送到显示器?这是如何工作的?显卡在此过程中发挥什么作用?
答案1
让我们以 DVI 为例。根据文章,红、绿、蓝分别在各自的一对线上传输,每个颜色每个像素 8 位,采用未压缩的光栅化方式。也就是说,最上面的一行被发送,从左到右,逐个像素,然后是下一行,依此类推,由于没有压缩,RGB 值排列整齐。每个数据通道都根据 TMDS 进行编码,TMDS 旨在考虑高频电信号的各种物理现实。您也可以查找 VGA 和 HDMI 以获取类似信息。
但是,操作系统与将数据发送到显示器相距甚远。该操作由视频卡中的专用硬件处理。粗略地说,视频卡驱动程序向视频卡发出绘制图像的命令。(在许多 2D 情况下,它只会向视频卡提供完整的逐像素图像,而在 3D 情况下,视频卡将自己完成大量工作。)无论如何,我有理由相信视频卡最终会将每帧的像素数据放在缓冲区中,然后一小段专用电路会将信号发送到显示器。
一般而言,专用硬件在操作系统的控制下处理 I/O 工作被认为是一种很好的方式。操作系统的大部分 I/O 工作只是告诉专用硬件该做什么,然后该硬件就知道用于外部通信的低级协议。除了从 CPU 卸载工作之外,专用硬件还意味着操作系统的延迟不一定会中断与外围设备的通信。再举个例子,以太网。操作系统告诉网卡将传入的数据包放在哪里,网卡在将数据包放在那里时会向操作系统发出信号,但如果操作系统不立即对第一个数据包执行任何操作,网卡仍然可以接收更多数据包,直到分配给它的传入数据包空间用完为止。
从从操作系统角度来说,计算机显示器如何工作?在 XKCD 论坛上。
答案2
取决于硬件,但常见的方法是使用内存映射 I/O,即将某些内存地址映射到设备(例如视频卡)。
看维基百科上的内存映射 I/O例如。