Memory 如何';输入/输出';端口是否映射到内存?

Memory 如何';输入/输出';端口是否映射到内存?,memory,io,Memory,Io,我一直在试图理解I/O端口及其与内存和I/O地址空间的映射。我读到了“内存映射I/O”,想知道操作系统/硬件是如何实现的。操作系统/硬件是否使用某种表格将指令中指定的地址映射到相应的端口 实现在许多方面都不同。但其基本思想是,当内存地址发生读或写时,微处理器在其总线上输出地址。硬件(称为“地址解码器”)检测地址是针对特定内存映射I/O设备的,并使该设备成为操作的目标 通常,操作系统不会做任何特殊的事情。在某些平台上,BIOS或操作系统可能必须配置某些参数才能使硬件正常工作 例如,可能必须将范围设

我一直在试图理解I/O端口及其与内存和I/O地址空间的映射。我读到了“内存映射I/O”,想知道操作系统/硬件是如何实现的。操作系统/硬件是否使用某种表格将指令中指定的地址映射到相应的端口

实现在许多方面都不同。但其基本思想是,当内存地址发生读或写时,微处理器在其总线上输出地址。硬件(称为“地址解码器”)检测地址是针对特定内存映射I/O设备的,并使该设备成为操作的目标

通常,操作系统不会做任何特殊的事情。在某些平台上,BIOS或操作系统可能必须配置某些参数才能使硬件正常工作

例如,可能必须将范围设置为不可缓存,以防止缓存逻辑将操作重新排序到关心事情发生顺序的设备。(想象一下,如果一次写入告诉硬件要执行什么操作,而另一次写入告诉硬件要启动。重新排序这些操作可能是灾难性的。)

在某些平台上,操作系统或BIOS可能必须通过添加等待状态将某些内存映射I/O范围设置为“慢速”。这是因为作为操作目标的硬件可能没有系统内存快

某些设备可能允许操作系统选择在内存中映射设备的位置。这是典型的PC平台上较新的即插即用设备


在一些设备中,如微控制器,这一切都是在一个芯片内完成的。对特定地址的写入在硬件中路由到特定端口或寄存器。这可能包括通用I/O寄存器,它与芯片上的管脚接口。

实现在许多方面不同。但其基本思想是,当内存地址发生读或写时,微处理器在其总线上输出地址。硬件(称为“地址解码器”)检测地址是针对特定内存映射I/O设备的,并使该设备成为操作的目标

通常,操作系统不会做任何特殊的事情。在某些平台上,BIOS或操作系统可能必须配置某些参数才能使硬件正常工作

例如,可能必须将范围设置为不可缓存,以防止缓存逻辑将操作重新排序到关心事情发生顺序的设备。(想象一下,如果一次写入告诉硬件要执行什么操作,而另一次写入告诉硬件要启动。重新排序这些操作可能是灾难性的。)

在某些平台上,操作系统或BIOS可能必须通过添加等待状态将某些内存映射I/O范围设置为“慢速”。这是因为作为操作目标的硬件可能没有系统内存快

某些设备可能允许操作系统选择在内存中映射设备的位置。这是典型的PC平台上较新的即插即用设备

在一些设备中,如微控制器,这一切都是在一个芯片内完成的。对特定地址的写入在硬件中路由到特定端口或寄存器。这可以包括通用I/O寄存器,该寄存器与芯片上的管脚接口