在现代台式机或移动计算机中,您拥有CPU,RAM,GPU和它自己的视频RAM。当现代操作系统将图像渲染到屏幕上时,该屏幕的实际图像数据在哪里? (讨论默认的HDMI输出端口)

它是否在RAM中的OS内核的内存中,在准备下一帧时从GPU获取屏幕窗口的渲染图像?

是否在GPU VRAM内,由低级CPU指令访问和操纵?

是否在GPU VRAM中,通过DMA映射到CPU地址空间? />另外,在哪里可以阅读有关为定制的书面科学项目OS实现这些基本访问模式的信息?我的一个朋友设法使SVGA模式在组装中运行,但是我想可以做得更多。

#1 楼

对于现代GPU,它通常存储在VRAM中,而对于离散GPU,它与CPU内存分开。通常,这意味着要让CPU访问它会带来损失,因为通常必须通过某些总线复制数据。移动设备倾向于将共享RAM用于GPU和CPU。

评论


$ \ begingroup $
但是,当您插入HDMI端口时,操作系统如何要求GPU写入要写入的内存。操作系统在执行“幼稚”绘制操作时是否管理自己的帧缓冲区,并将1920 * 1080像素大帧缓冲区以可以实现的任意通用标准发送给GPU,或者一种驱动程序需要每种GPU类型以便发送通过HDMI发送一条简单的短信? tty或xserver如何通过HDMI将其内容发送到屏幕?
$ \ endgroup $
–萨尔贝拉
16年4月13日在10:06

$ \ begingroup $
PC中的视频卡将处理将VRAM编码为视频信号的过程,CPU永远不会参与。对于未加速的OS,他们将保留基于系统内存的帧缓冲区,并使用CPU对其进行绘制,然后通过PCIE总线将其区域发送到卡(通常是“脏”区域或仅需要更新的屏幕区域) ,因此需要某些GPU驱动程序/主板驱动程序。
$ \ endgroup $
–PaulHK
16-4-13在10:19



$ \ begingroup $
那么,使用开放的已知标准实际上不可能在我自己的OS中实现此功能吗?
$ \ endgroup $
–萨尔贝拉
16年4月13日在10:34

$ \ begingroup $
您可以在这里查看更多详细信息:wiki.osdev.org/VGA_Hardware
$ \ endgroup $
–PaulHK
16年4月15日在6:26