IO操作里经常见到这个词,有翻译成副作用,也有翻译成边际效应。个人觉得后者更好一些,因为side effect不仅仅是副作用,如果没有side effect,很多IO特性就无法实现。如果要说副作用的话,对驱动来说确实存在副作用,因为如果将mmio当作普通内存来读取,由于side effect的存在,就有可能得到和预想不一致的效果。但如果加以注意,则不会有问题。
引用一位网友的话:
side effect 是指:访问I/O寄存器时,不仅仅会像访问普通内存一样影响存储单元的值,更重要的是它可能改变CPU的I/O端口电平、输出时序或CPU对I/O端口电平的反应等等,从而实现CPU的控制功能。
因为IO访问存在side effect,所以对IO的访问就需要特别注意:
其原因:
1, cache及write buffer的存在。cache效应可能会导致对IO的访问并未真正发生,从而影响side effect。
2,编译器的优化。优化可能会调整指令顺序,从而影响side effect。
3,指令的乱序执行
如何避免:
1,noncache/nonbuffer
2,插入各种memory barrier
阅读(2216) | 评论(0) | 转发(0) |