VGA到底是什么,它与视频卡有什么区别?


30

操作系统开发教程通过直接写入VGA或EGA或Super VGA来精确定位屏幕数据,但我没有得到的是在板上写入固定地址以进行显示和直接写入视频卡之间的真正区别是什么或可移动?我只想基本澄清我对此问题的困惑

而且由于卡,连接接口,总线,体系结构,片上系统,嵌入式系统等中的变量并非如此简单,我发现很难找到一种方法来理解这100%背后的想法。固定地址从高端GPU到低端板载GPU是否会有所不同?为什么和为什么不呢?

我的目标之一是托管一个内核并制作一个操作系统,这确实是一个遥不可及的梦想。无法理解术语不仅在某些方面阻碍了我,而且使我在硬件方面显得愚蠢。

额外:这些最新的答案中的一些是关于使用处理器最大16位的最大可寻址内存。问题是其中一些其他出现的问题:

1.卡的内存如何?屏幕数据本身不需要系统RAM。

2.在高位模式下呢?难道您不能不忽略实模式(x86)中的BIOS并仍然通过AL寻址内存吗?

3.在具有大量寄存器且性能等于或高于实际微处理器的GPU上,写入固定地址的概念如何保持不变?


对于一些历史背景,请查看我对一个相关问题的回答:superuser.com/questions/357328/…–
罗素·博罗戈夫

应当注意,除了参考显示卡技术/协议,该术语还用于指定特定的电气标准和显示分辨率。很难猜测被应用其中的含义,甚至你的“情境”看清条款。
Daniel R Hicks

Answers:


65

从技术上讲,VGA代表视频图形阵列Video Graphics Array),这是1987年推出的640x480视频标准。在当时,它是一个相对较高的分辨率,尤其是对于彩色显示器。

引入VGA 之前,我们还有其他一些图形标准,例如Hercules,它显示文本(80行,每行25个字符)或显示相对高清晰度的单色图形(720x348像素)。

当时的其他标准是CGA(彩色图形适配器),它还允许多达16种颜色,分辨率最高为640x200像素。结果将如下所示:

在此处输入图片说明

最终,值得注意的PC标准是增强型图形适配器(EGA),它允许使用64色分辨率高达640×350。

(我忽略了非PC标准,以使其相对较短。如果我开始添加Atari或Amiga标准-当时多达4096种颜色!-那么这将变得很长。)

然后在1987年,IBM推出了PS2计算机。与以前的产品相比,它有几个值得注意的差异,其中包括用于鼠标和键盘的新端口(以前,如果使用鼠标,鼠标使用25针串行端口或9针串行端口)。标准的3½英寸驱动器和新的具有高分辨率和多种颜色的图形适配器。

该图形标准称为视频图形阵列。它使用3行15针连接器将模拟信号传输到监视器。该连接器一直使用到几年前,后来被DVI和显示端口等高级数字标准所取代。

VGA后

VGA标准的进步并没有停止。引入VGA后不久,出现了新标准,例如使用相同接口的800x600 S上层VGA(SVGA)。(Hercules,CGA,EGA等都有各自的连接器。即使试图显示足够低的分辨率,也无法将CGA显示器连接到VGA卡)。

从那时起,我们开始使用分辨率更高的显示器,但是最常用的名称仍然是VGA。即使正确的名称是SVGA,XVGA,UXGA等,

在此处输入图片说明

(图片由维基百科提供)


另一个被称为“ VGA”的东西是与原始VGA卡一起使用的DE15连接器。这种通常为蓝色的连接器不是将模拟“ VGA信号”传输到显示器的唯一方法,但它是最常见的。

左:DB5HD右:备用VGA连接器,通常用于获得更好的质量) 在此处输入图片说明


使用“ VGA”的第三种方式是描述图形卡,即使该卡可能会产生与VGA完全不同的分辨率。使用在技术上是错误的,或者至少应该是“ VGA兼容卡”,但是普通的语音并没有什么区别。


剩下写VGA

这来自IBM XT上的内存划分方式。CPU最多可以访问1MiB(1024KiB)的内存。底部512KiB保留用于RAM,上部512KiB保留用于附加卡,ROM等。

上部区域是VGA卡内存映射到的区域。您可以直接写它,结果将显示在显示屏上。

这不仅用于VGA,还用于同代产品。

  G =图形模式视频RAM
  M =单色文本模式视频RAM
  C =彩色文本模式视频RAM
  V =视频ROM BIOS(在PS / 2中为“ a”)
  a =转接板ROM和专用RAM(可用的UMA空间)
  r =附加PS / 2主板ROM BIOS(非PS / 2系统中的免费UMA)
  R =主板ROM BIOS
  b = IBM Cassette BASIC ROM(在IBM兼容版本中为“ R”)
  如果已加载HIMEM.SYS,则h =高内存区域(HMA)。

常规(基本)内存:   
前512KB(或8个64KiB块)。 

上存储区(UMA):

0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000:RRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

(ASCII映射的来源)。


1
Nit评论:它不是“ DB15”连接器。DB15连接器只有两排引脚(就像DB9和DB25一样)。VGA连接器具有3行引脚,通常称为“ HD15”(与DB相比,HD具有更高的密度)(尽管有些人断言“ HD15”不是官方名称)。
锯末

2
Nit注释2:最初的IBM PC可能以512/512分割发行,但很快就更改为640/384分割(在您的源页面中引用)。图形内存从640K标记(十六进制0A0000)开始。我认为没有人真的以“ 640K边界”最终成为众所周知的方式意识到“ 512K边界”。
Hellion

2
@sawdust:HD15绝对不是官方名称(但如今已经足够了)。在Dx-nn连接器系列中,x是外壳的大小,nn是引脚的数量。Shell B与并行端口(或旧的,完全实现的25针串行端口)大小相同。Shell E与串行端口的大小相同。因此从技术上讲,VGA 15针连接器将是DE-15,但这绝不是连接器原始产品系列的一部分。在IBM在PS / 2 MCGA,VGA和8514 / a上使用之前,它甚至从未存在过。维基百科有一个很好的解释:en.wikipedia.org/wiki/D-subminiature
Alexios

3
我喜欢最高级的决议:超宽,超扩展,超四倍图形阵列。您不能将其称为高清,因为有一天不会!
艾丹,2013年

2
@LackingConfidence如果您想要显卡可以提供的性能,则需要使用它们各自的专有接口。如果您不关心性能,可以使用VGA BIOS为您设置VESA帧缓冲器。有关详细信息,请查看Linux的vesafb.txt(当然,在Linux中也包括源代码)。
derobert

10

写“固定地址” 本质上写的视频卡直接。所有这些视频ISA视频卡(CGA,EGA,VGA)实际上都具有一些RAM(和寄存器),它们直接映射到CPU的内存和I / O空间。

因此,当您将字节写入某个内存位置时,该字符(以文本模式)会立即出现在屏幕上,因为您实际上已写入了视频卡上的内存,而视频卡仅使用了该内存。

这一切在今天看起来都非常令人困惑,特别是考虑到当今的视频卡有时被称为VGA(它们与1990年代的“真正的” VGA卡具有相似之处)。但是,即使是现代卡也可以模拟这些较旧设计的某些功能(您可以在大多数现代PC上引导DOS,并使用直接写入视频内存的DOS程序)。当然,如今,它们全都在视频卡的固件中进行了仿真。


那么,使用板载视频卡有什么意义呢?如果卡不是VGA所规定的,我仍然不知道VGA如何成为人们的首选。

1
即使您集成了视频卡,它仍然通过某种总线连接到系统的其余部分:PCIe,PCI,AGP,ISA等。这些总线可以将外部组件连接到主板,也可以连接内部组件。芯片组内部(SATA,视频等)
2014年

1
但是,公交车如何知道如何处理地址?这在PCI和板载卡,甚至GPU或集成图形微处理器之间将有所不同。

1
无论是将电线布线到PCI连接器,还是所有连接都在北桥内部,都没有任何区别。en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg 2013年

3

并没有真正的区别:如果您要写入视频内存的地址,则硬件会将其路由到视频卡。

如果您正在编写自己的操作系统,则可能需要做大量工作才能使图形卡映射到所需的内存,首先需要扫描PCI总线以找到该卡。


我的图形卡在北桥的板上,未与PCI连接。我认为这是英特尔GMA。

3
您的图形处理器可能不会占用PCI 插槽,但肯定位于系统的总线之一上……即使它在主板上,即使直接集成为片上系统的一部分,也非常麻烦。如果您使用足够准系统的PCI总线,则应该以与主板SATA控制器或USB控制器相同的方式,或...,您应该会看到列出的板载GPU(以及SATA,USB等控制器)及其PCI ID。您的操作系统的检查工具。在Linux下,它只是命令行上的“ lspci”。对于Windows,我更喜欢Gabriel Topala的“ SIW”。Mac ...可能还会有“ lspci”?
2013年

在这种情况下,操作系统无关紧要,因为重要的是硬件架构和平台。该操作系统只是在此之上构建的,它是与内核支持服务的所有硬件进行交互的主要切入点。您正在与体系结构andnits规范进行交互。要确定硬件,只需在线查找主板。这是一个容易的开始。

+1从扫描PCI总线开始以找到该卡。
n611x007 2013年

2

到目前为止,答案已经解释了旧的视频卡是通过将视频内存映射到处理器的地址空间来工作的。这是卡自己的记忆。北桥知道将对此映射内存的请求重定向到VGA设备。

最重要的是,有许多扩展和VGA兼容卡的新模式。这导致创建VESA BIOS扩展(VBE),并通过进行操作int 10h。它支持基本的2D加速(BitBlt),硬件光标,双/三重缓冲等。这是在任何受支持的分辨率(包括高分辨率)下进行全彩色显示的基本方法。这也是卡内部通常使用的内存,北桥像经典VGA一样执行重定向。这是利用全彩色/全分辨率图形的最简单方法。

接下来,我们提供了一种无需使用BIOS即可访问GPU的直接方法,该方法可提供与VBE相同的功能以及可能的其他功能。我的理解很模糊。我认为该接口是特定于设备的,但我对此不确定。

然后是可以支持3D融合/ GP-GPU计算等的GPU接口。这绝对需要制造商提供的驱动程序或规格才能充分使用,并且即使在同一制造商的设备之间,也经常存在实质性差异。


devce驱动程序仅在操作系统上是必需的。可以直接在架构上访问所有硬件。

1
当然,直接访问3D部分的问题是某些主要GPU制造商将协议的实质部分视为商业秘密,因此,除非经过反向工程或签署保密协议,否则该驱动程序已包含说的知识是必要的。
凯文·卡斯卡特

取决于卡。如果是nVidia或AMD,它将是专有的。板载Intel GMA比nVidia GEForce容易得多。

1
我已经将有关的行更新为reqad“潜水员或规格”。可以买到规格就足够了,对于许多近期的Intel图形解决方案来说确实如此。
凯文·卡斯卡特

1
值得一提的是,所有现代的Intel和大多数AMD显卡都发布了大量的编程规范。Nvidia对此问题仍然保持沉默,但是Nouveau开源图形驱动程序包含许多有关对Nvidia图形卡进行编程的文档(以源代码的形式)。如今,Intel / AMD / Nvidia比专有的ARM ASIC开放。嵌入式/移动芯片是最秘密的。
allquixotic
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.