Memory I/O映射I/O—端口地址是RAM的一部分吗

Memory I/O映射I/O—端口地址是RAM的一部分吗,memory,io,operating-system,port,memory-address,Memory,Io,Operating System,Port,Memory Address,在I/O映射I/O(与内存映射I/O相反)中,I/O设备的特定地址集是固定的。这些地址是RAM的一部分吗?因此,大量的物理地址空间无法使用?它是否与所附图片中的“硬件保留”内存相对应 如果是,如何决定地址的哪些位将用于寻址I/O设备(因为I/O地址空间将比实际内存小得多。我读到这有助于减少解码电路使用的管脚/位的数量) 如果试图在程序集中访问属于此地址空间的任何地址,会发生什么情况 I/O映射I/O与内存映射I/O使用的地址空间不同。内存映射I/O使用的是RAM通常使用的部分地址空间,因此,“窃

在I/O映射I/O(与内存映射I/O相反)中,I/O设备的特定地址集是固定的。这些地址是RAM的一部分吗?因此,大量的物理地址空间无法使用?它是否与所附图片中的“硬件保留”内存相对应

如果是,如何决定地址的哪些位将用于寻址I/O设备(因为I/O地址空间将比实际内存小得多。我读到这有助于减少解码电路使用的管脚/位的数量)

如果试图在程序集中访问属于此地址空间的任何地址,会发生什么情况


I/O映射I/O与内存映射I/O使用的地址空间不同。内存映射I/O使用的是RAM通常使用的部分地址空间,因此,“窃取”不再属于RAM内存的地址

不同内存映射I/O使用的一组地址范围就是您所看到的“硬件保留”

关于如何决定如何寻址内存映射设备,这在很大程度上由PnP子系统涵盖,无论是在BIOS中,还是在SO中。除少数例外,内存映射设备都是PnP设备,这意味着对于每个设备,其基址都可以更改(对于PCI设备,内存映射寄存器的基址(如果有)包含在条形-基址寄存器-中,这是PCI配置空间的一部分)

在早期的8位系统上为解码设备节省引脚(延迟解码),以节省解码器和降低成本。它与内存映射/IO映射设备无关。在这两种情况下都可以使用延迟解码。例如,设计者可以决定将16位地址范围
c00-FFFF
保留给内存映射设备。要决定是否启用某些内存芯片或设备,只需查看
A15
A14
的值即可。如果两条地址线都为高电平,则块地址为
C000-FFFF
,这意味着将取消对内存芯片启用的评估。另一方面,设计者可以决定将8位IO端口
254
分配给一个设备,并且要对该地址进行解码,它只查看
A0
的状态,不需要解码器来找出端口地址(例如,ZX频谱用于寻址ULA)

如果一个程序(以允许您访问和写入任意内存位置的任何语言编写)试图访问为设备保留的内存地址,并且假设分页和保护机制允许这种访问,那么发生的情况将完全取决于访问该地址时设备的操作。PC机中一个众所周知的内存映射设备是帧缓冲区。如果图形卡配置为使用默认基址显示彩色文本模式,则对
B8000
B8F9F
之间的偶数物理地址执行的任何8位写入操作将导致ASCII码为写入值的字符显示在屏幕上,显示位置取决于所选地址

I/O映射设备不会与内存发生冲突,因为它们使用不同的地址空间,使用不同的指令读取和写入地址(端口)的值。无法使用以内存为目标的机器代码指令对这些设备进行寻址

内存映射设备与RAM共享地址空间。根据系统配置,内存映射寄存器可以始终存在,使用一些地址,从而防止系统将其用于RAM,或者内存映射设备有时可能会“隐藏”内存,因此,允许程序更改I/O配置,以选择某个内存区域是否将被解码为由设备使用,或由常规RAM使用(例如,Commodore 64通过临时禁用对“后面”RAM的访问,允许用户拥有64KB的RAM,但允许其访问设备寄存器当前正在同一地址访问的设备)

在硬件层面上,出现的是两种不同的信号:MREQ和IOREQ。第一个在每个内存指令上断言,第二个在每个I/O指令上断言。所以这个代码

MOV DX,1234h
MOV AL,[DX]    ;reads memory address 1234h (memory address space)
IN AL,DX       ;reads I/O port 1234h (I/O address space)
两者都将值
1234h
放在CPU地址总线上,并且都断言
RD
引脚以指示读取,但第一个将断言
MREQ
以指示地址属于内存地址空间,第二个将断言
IOREQ
,以指示它属于
I/O
地址空间。端口
1234h
处的
I/O
设备连接到系统总线,以便仅当地址为
1234h
RD
被断言且
IOREQ
被断言时,它才被启用。这样,它就不会与寻址在
1234h
的RAM芯片发生冲突,因为后者只有在断言
MREQ
时才会启用(
CPU
确保
IOREQ
MREQ
不能同时断言)


这两个地址空间并不存在于所有CPU中。事实上,它们中的大多数都没有这个功能,因此,它们必须对其所有设备进行内存映射。

不,它们不是内存的一部分,而是地址空间的一部分。硬件将以不同的方式处理这些地址范围,并在读取/写入这些地址时使用IN/OUT。我已编辑了我的问题。请看这一点,你能补充一些细节并作为答案发布吗?我不知道“硬件保留”是什么意思。这正是您的工具所认为的。它还可以包括bios/视频缓冲区的内存,甚至是DMA(它们都是以某种方式保留的,不能分配给进程),所以它与端口地址无关?另外,既然你提到了BIOS(阅读了关于我