这其实是个和硬件有关的概念。
有些register是2层的,第一层是供CPU访问,第二层供Hw访问。
CPU访问 |
Hw访问 |
其中Hw访问的这层register称之为Shadow Register。
CPU在写Register的时候,会先写在上层的Shadow Register,随后硬件update之后才会在下层供Hw访问的Register开始执行。
这是同一个Register,不是2个Register,只不过分了2层。形象的讲上层是下层的Shadow。
因为真正生效的执行Hw动作的是下面这层,而上面这层只是将CPU(也就是将软件)的信息获取到,等下个硬件周期才会执行。
那么这有什么用呢?哪里用到了这点呢?
这样做可以加快程序的相应和信息的处理。
其中ARM的FIQ有用到,也就是fast interrupt,快速中断的意思。
因为FIQ是有Shadow Register的,所以你在使用它或者是设置它的时候,指令可以先存在Shadow Register里面,等到下一个硬件周期就会立即执行。
而没有Shadow Register的IRQ(interrupt),就要等Register里面的数据执行完毕后才能写入,那样就稍慢一些。
这也就是FIQ比IRQ快的一个原因。