内存映射视频意味着什么?例如,在x8086 Intel上,它有一个20位的地址行。这个内存映射是否意味着一些x8086地址线是硬连接到视频适配器卡上的?
发布于 2018-01-20 23:08:39
例如,在x8086 Intel上,它有一个20位的地址行。
一些背景第一
(与大多数其他CPU不同) x86 CPU有两个地址范围:
mov al, [ds:di]
“访问)
此内存范围用于内存。in
和out
指令访问的I/O地址范围
此“内存”范围用于I/O。8086实际上有21条地址线: A19-A0和"M/nIO“。A19-A0行包含实际地址,"M/nIO“行包含访问”常规“内存或I/O范围的信息。
在内存区(M/nIO = 1)的x86 PC (*)地址0x00021中是RAM,而I/O范围内的地址0x0021 (M/nIO = 0)是中断控制器。
内存映射视频意味着什么?
“内存映射I/O”是指某些设备使用“内存”地址空间而不是使用"I/O“地址空间进行寻址:
视频适配器是通过读写内存地址0xA0000-0xBFFF(取决于视频模式)来寻址的,而不是使用in
和out
指令。
(对于CPU完全没有两个地址范围的概念-类似ARM -有时还会说CPU使用内存映射的I/O,这意味着所有I/O设备的寻址都像内存一样,没有关于I/O寻址的特殊指令。)
在视频中,这个词可能有一个更特殊的含义:
在有些系统中,必须使用多个I/O访问来访问视频内存:
如果您想使用TMS9918视频芯片(1980年代流行)将数据写入视频存储器,那么首先必须编写一个值,指定视频RAM中的地址,然后编写实际数据。CPU总是必须将两个值(视频RAM地址和数据)写入相同的地址--独立于应该写入的视频RAM中的地址。
如果有人说视频是而不是内存映射的,我就会理解系统有这种行为。
在x86 PC (*)上,情况并非如此:视频RAM中的某个地址对应于某个CPU地址。因此,如果您想在视频RAM中写入10个不同的地址,CPU只需将数据写入10个不同的地址。
(*)我不编写x86“系统”,因为x86 CPU也用于移动设备和嵌入式设备。在这样的系统中,存储器布局(取决于CPU外部的电路)可能有所不同。
发布于 2018-01-21 03:19:01
不完全是硬连线从CPU或主板侧,但所有的内存访问是可见的扩展总线。任何声称拥有地址范围的板都会回复来自处理器的读或写请求。
在扩展总线上有专门的RAM板并不少见,因为许多早期的主板不能容纳整个640 K。因此,没有魔术与一些扩展RAM位于一个视频板。
此外,由于早期的PC机在视频板上没有专用的图形处理器,主CPU无论如何都必须完成所有的渲染,因此出于性能原因,需要直接访问图形缓冲区。
https://stackoverflow.com/questions/48362618
复制相似问题