.. Kenneth Lee 版权所有 2016-2020
:Authors: Kenneth Lee :Version: 1.0
名可名
今天和别人讨论一个接口设计的问题,我觉得特别有助于程序员理解名字为什么不可靠, 抄录如下(把“别人”称为Tom,我是Ken):
Tom:Ken,读我们的寄存器A需要加ISB。(注:ISB是ARM平台的指令屏障)
Ken:是每读一次都要加,还是每次读之前都要加?另外,为什么读操作不用DSB,却要用 ISB?
Tom:DSB只能保证Memory Access相关的操作都完成,不控制ALU类的指令
Ken:这不能解释为什么用ISB而不是DSB,另外,“Memory Access相关的操作”如何理解?
Tom:Memory Access,指load, store, cmo这种读写内存操作
Ken:“内存操作”是指整条指令,还是指这条指令流水线stage的其中一个stage?
Tom:整条指令
Ken:好,这个地方明白了,所以为什么这个地方只能用ISB不能用DSB
Tom:好吧,因为A和时间有关,如果A前面有多个非Memory Access指令,使用的时间就可 以发生在这些指令之前
Ken:这个地方也明白了,那么到底连续读两次,是否需要都加上ISB呢?
Tom:不需要,因为两次读同一个寄存器,会产生指令依赖,这个一次即可
Ken:好吧,基本理解了,我会把这个访问要求写一个表述出来,你到时看看这个表述是否 正确。
Tom:好
你看,我们很多工程师都不肯写手册,喜欢“当面跟你说”,一副很配合的样子,但我们已 经看到了,这种简单“介绍”,其实就是把对方当作你的秘书了,不是别有用心,谁有空理 你?……