Io 什么是';处理器将I/O指令执行与外部总线活动同步';意思是

Io 什么是';处理器将I/O指令执行与外部总线活动同步';意思是,io,x86,assembly,Io,X86,Assembly,以下摘录自《英特尔64和IA-32体系结构软件开发人员手册》第1卷:基本体系结构(第432页) 当使用I/O地址空间而不是内存映射I/O时,情况是 在两个方面有所不同: •处理器从不缓冲I/O写入。因此,严格的I/O顺序 操作由处理器强制执行。(与内存映射I/O一样,它是 芯片可能设置为在某些I/O范围内进行写操作。) •处理器将I/O指令执行与外部总线活动同步 (见表14-1) 表14-1。I/O指令序列化 ------------------+-----------------------

以下摘录自《英特尔64和IA-32体系结构软件开发人员手册》第1卷:基本体系结构(第432页)


当使用I/O地址空间而不是内存映射I/O时,情况是 在两个方面有所不同:

•处理器从不缓冲I/O写入。因此,严格的I/O顺序 操作由处理器强制执行。(与内存映射I/O一样,它是 芯片可能设置为在某些I/O范围内进行写操作。)

•处理器将I/O指令执行与外部总线活动同步 (见表14-1)

表14-1。I/O指令序列化

------------------+----------------------------------+---------------------------------- | Processor Delays Execution of … | Until Completion of … +---------------+------------------+-----------------+---------------- Instruction Being | Current | Next | | Executed | Instruction? | Instruction? | Pending Stores? | Current Store? ------------------+---------------+------------------+-----------------+---------------- IN | Yes | | Yes | INS | Yes | | Yes | REP INS | Yes | | Yes | OUT | | Yes | Yes | Yes OUTS | | Yes | Yes | Yes REP OUTS | | Yes | Yes | Yes ------------------+---------------+------------------+-----------------+---------------- ------------------+----------------------------------+---------------------------------- |处理器延迟执行…|直到完成… +---------------+------------------+-----------------+---------------- 指令为“当前”下一个| 执行|指令|指导?|待处理物料现在的商店? ------------------+---------------+------------------+-----------------+---------------- 在|是| |是| 是的| 代表|是| |是| 出去| |是|是|是 出局| |是|是|是 重复| |是|是|是 ------------------+---------------+------------------+-----------------+----------------

谁能解释一下这张桌子是什么意思吗?特别是,我不知道“挂起存储”或“当前存储”是什么意思。

处理器有一个写入队列,因此当将某些内容存储到内存中时,数据只会进入队列。一旦数据进入队列,指令即被视为完成——您可以开始执行下一条指令,而无需等待数据从队列进入目标内存

不过,I/O空间并不相同。如果您正在从I/O空间读取数据,那么在此时内存写入队列中的所有数据都写入内存之前,您的读取甚至不会开始。如果正在写入I/O空间,则该指令将立即开始执行,但在写入队列中的所有数据都已写入并且当前指令正在写入的数据已写入之前,下一条指令无法执行

原因很简单:当您处理内存时,处理器知道所有地址映射,因此如果(例如)您将某些内容写入内存,并且(几乎)立即将其读回,处理器可以/将检测到数据实际上在写入队列中,并确保您的读取得到当前数据

然而,对于I/O空间,处理器不知道从特定地址读/写到特定地址与内存空间中以前的读/写之间的关系。例如,您可能正在向内存发送一些数据,然后告诉图形卡将这些数据用作纹理。您可能不这样认为,但CPU没有真正的方法来判断,因此它必须做出悲观的假设,并等待您写入内存的数据实际到达那里(或至少离开CPU),然后再告诉图形卡使用该数据