我一直在努力了解I / O端口及其与内存和放大器的映射。 I / O地址空间。我读到了“内存映射I / O”,并想知道OS /硬件是如何实现的。 OS /硬件是否使用某种表将指令中指定的地址映射到相应的端口?
答案 0 :(得分:1)
实施方式在很多方面有所不同。但基本思想是当对存储器地址进行读或写时,微处理器在其总线上输出地址。硬件(称为“地址解码器”)检测到该地址是针对特定的内存映射I / O设备,并将该设备作为操作的目标。
通常,操作系统不做任何特殊操作。在某些平台上,BIOS或操作系统可能必须配置某些参数才能使硬件正常工作。
例如,可能必须将范围设置为不可缓存,以防止缓存逻辑将操作重新排序到关心事件发生顺序的设备。 (想象一下,如果一个写操作告诉硬件要执行什么操作,另一个写操作告诉硬件启动。重新排序可能是灾难性的。)
在某些平台上,操作系统或BIOS可能必须通过添加等待状态将某些内存映射的I / O范围设置为“慢”。这是因为作为操作目标的硬件可能没有系统内存那么快。
某些设备可能允许操作系统选择内存中的映射设备的位置。这是PC平台上较新的即插即用设备的典型特征。
在某些设备中,例如微控制器,这些都完全在单个芯片内完成。对特定地址的写入在硬件中路由到特定端口或寄存器。这可以包括与芯片引脚接口的通用I / O寄存器。