计算机如何知道如何在屏幕上显示文本和GUI?


3

这可能是一个愚蠢而奇怪的问题,但是我真的无法入睡,直到找到答案。计算机如何知道如何在屏幕上显示文本和GUI?如果我没有记错的话,x86计算机的启动过程如下所示:

  • BIOS启动CPU和其他硬件,并检查是否一切正常
  • CPU从第一个512开始执行代码?引导分区的字节数,屏幕显示引导加载程序菜单
  • 执行选定的内核
  • 等等

我的问题是:如果启动内核之前没有操作系统,计算机如何知道如何在屏幕上显示文本?BIOS和引导程序可以显示一些文本和基本的GUI。他们怎么做到的?BIOS /引导程序是否告诉CPU(GPU?)必须在位置(0,0)上显示蓝色像素,然后在(1,0)上显示白色像素,等等?

我的第二个理论是BIOS具有基本的显示器驱动程序,该驱动程序具有要在屏幕上打印的某种API。显示器的驱动程序是否提供某种print()函数?

从我看到的结果来看,用于打印文本的汇编功能特定于每个操作系统,因此不能直接通过CPU的指令集使用。

我的问题的第2部分是,桌面环境(如KDE或GNOME)如何工作?假设我想为Linux创建一个全新的桌面环境。我从哪里开始?C / C ++或任何其他高级语言都没有函数来在位置(x,y)上显示n色 prixel。显示dekstop的程序是用什么语言编写的?是否按像素创建桌面?GTK或Qt之类的库如何工作?我知道我只能显示一个只有几个功能的窗口,但是这些功能如何真正起作用?

对不起,如果我的问题不清楚。英语不是我的母语。


我不知道,但是屏幕和它读取的内存之间可能存在相当直接的联系,并且那里不需要GPU。如果您打开Windows cmd提示,然后键入C:\>debug<ENTER>-f b800:0 FA0 21 CE(从该地址填充,即FA0,即4000字节),则提示中会填充一些字符。可能有点像那样。就像将数据写入内存并在屏幕上获取一样,但是我在疯狂猜测。我认为在DOS中也可以使用。
barlop 2014年

您还会问一个伟大的问题,但他们可能不喜欢此网站。正如他们可能说的,这与硬件或软件无关。.您可以尝试arstechnica论坛
barlop

主板上的BIOS芯片包含足够的智能来显示此文本,并且图形适配器能够在不需要驱动程序或软件交互的硬件中以纯文本模式运行。参见此处:en.wikipedia.org/wiki/INT_10Hen.wikipedia.org/wiki/VGA-compatible_text_modeen.wikipedia.org/wiki/VESA_BIOS_Extensions
Frank Thomas

1
PC显示器是处于文本模式或图形模式的子系统。在文本模式下,显示子系统接受ASCII码,然后使用字体位图生成像素。在图形模式下,帧缓冲存储器存储每个可寻址像素的红色,绿色和蓝色值。GPU用于计算像素值,例如用于形状,阴影和运动或编解码器处理。
锯末2014年

1
@ M0rning您可以尝试发布答案。.如果您很幸运,那么您理解中的任何进一步的错误都可以得到纠正。或者,如果您的理解正确,那么您可能会得到一些确认。
barlop 2014年

Answers:


1

基本上,主板上有一个ROM(只读存储器)芯片,可以告诉它如何显示所需的GUI。您认为它没有软件,但是它确实是由制造商预先安装的。实际上,您更可能将其称为“固件”,因为它是硬连接到芯片的软件。

至于图形桌面环境,实际上没有什么特别的。它们在屏幕上的绘制方式与其他所有程序相同。您真正需要画在屏幕上的就是知道您负责处理图形的任何芯片(通常是GPU或IGPU / APU)的地址。我相信,当普通​​程序执行此操作时,他们会要求操作系统提供此信息,因此,如果要编写自己的图形桌面环境,则必须弄清楚将数据发送到的地址。无论您拥有什么G / IG / APU,驱动程序都应提供所需的地址。


0

主要分为两个部分:

  1. 加载MBR后,其代码将加载第二阶段的引导代码,在Linux上称为Windows Boot Manager或GRUB。该引导管理器/加载器具有以代码实现的文本和图形功能,或使用直接BIOS访问来输出文本。

  2. 使用任何编程语言(例如C,C ++,Java,Basic)加载OS(Windows,Linux等)后,您就可以访问在内核和/或库中实现的功能,这些功能允许在屏幕上书写或绘图。如今,每种编程语言都有一些IDE(集成开发环境),可以大大简化用户代码的编写。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.