计算机如何在最低级别将任何内容绘制到屏幕上(与 X11 等外部库无关)?是否应该有执行此操作的汇编命令?CPU 究竟如何控制屏幕上显示的内容?
3 回答
它从根本上与从硬盘读取的方式相同,或者播放声音效果。
通过将某些数据写入特定的内存地址,这些地址由内存控制器映射到相关的外部硬件(在这些情况下是硬盘驱动器、GPU 或声卡)。当硬件接收到这些写入时,它会将写入的数据解释为有关做什么的指令。
CPU 确实与系统的其他部分隔离。它真正知道的只是内存总线。它可以在那条总线上读写数据,基本上就是这样。其中一些读/写进入内存,而另一些可以映射到各种硬件的控制寄存器,或者映射到设备的内存(如果存在),从而允许 CPU 与其他设备进行通信。
现代 GPU 有自己的专用 RAM,它可以将数据加载到其中。因此 CPU 向 GPU 发送指令,指定它可以在主存储器中的什么位置找到用于生成屏幕内容的数据以及如何处理这些数据。然后,GPU 将主内存中的数据加载到自己的 RAM 中,在其中执行必要的转换和计算,然后再将其写入帧缓冲区,监视器会不断地读取帧缓冲区。
通常,视频卡中有一个称为帧缓冲区的内存区域。在那里写入一个值意味着建立一个像素的颜色值。
您可以考虑像 2D 数组这样的帧缓冲区,其中每个位代表屏幕上的一个像素。为了表示颜色,使用了不同级别的缓冲区。今天,一个通用的帧缓冲区有 24 级(每个 RGB 颜色分量 8 级)并允许定义 2^24 种可能的颜色。
如今,由于性能问题,通常通过 GPU 访问帧缓冲区:即使 CPU 可以执行此任务,它也非常昂贵。
在某处有专门用于视频屏幕的内存。屏幕上的每个像素都有一定的内存。避免像调色板和黑白这样的历史解决方案,通常有一定数量的红色比特,一些蓝色比特和一些绿色比特。添加这些颜色后,您可以获得包括白色在内的所有颜色(例如,我知道它们不是用于油漆的原色,不用担心它会起作用)。通常你会发现 24 位颜色,因为它很容易管理 8 位、一个字节、红色、一个绿色字节和一个蓝色字节,以及连接内存等。
视频硬件不断读取此内存并使用任何技术向显示器发送信号,从本质上告诉它特定像素点亮的红色、绿色和蓝色量,不断扫描屏幕并提供最新信息。
使用此内存的一些常见技术是使用称为双端口的东西,其中两个实体能够读取/写入内存。或者拥有两个记忆并交换它们。在任何一种情况下,都有另一个实体,一个处理器,要么是 CPU 本身,要么是现在视频卡/芯片中的许多小型图形处理器。在任何一种情况下,都会运行一些软件,这些软件会计算所有像素的位置和颜色,并将它们写入视频内存,这取决于所使用的机制,内存的视频/监视器端会在有意义时进行更改。你不想让你输入的字母的一些像素出现在屏幕上的一个通道上,然后让其余的出现在下一个通道上,可能会出现用户注意到的闪烁。
视频内存通常像系统内存一样映射,处理器可能会使用与访问非视频、系统、内存相同的指令。gpu当然可以,但是cpu通常没有外设专用指令,uart,gpio,video,usb,storage等。外设通常映射为cpu内存空间中的某些地址,并使用普通的内存读/写指令.
由于特殊类型的算法,更重要的是视频游戏所需的大量计算,视频卡使用了许多专门的、简单的图形处理器,这些可能在昨天、今天或明天具有视频内存特定指令出于性能或尺寸或功率或其他原因。可能不会改变的是具有帧缓冲存储器的模型,该存储器保存一个屏幕的像素,视频硬件使用这些像素来创建发送到监视器的信号,以便它可以绘制屏幕。