Chinaunix首页 | 论坛 | 博客
  • 博客访问: 954948
  • 博文数量: 109
  • 博客积分: 1751
  • 博客等级: 上尉
  • 技术积分: 1817
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 22:37
文章分类

全部博文(109)

文章存档

2014年(9)

2013年(21)

2012年(48)

2011年(31)

分类: LINUX

2011-09-21 17:34:17

IO操作里经常见到这个词,有翻译成副作用,也有翻译成边际效应。个人觉得后者更好一些,因为side effect不仅仅是副作用,如果没有side effect,很多IO特性就无法实现。如果要说副作用的话,对驱动来说确实存在副作用,因为如果将mmio当作普通内存来读取,由于side effect的存在,就有可能得到和预想不一致的效果。但如果加以注意,则不会有问题。

引用一位网友的话:
side effect 是指:访问I/O寄存器时,不仅仅会像访问普通内存一样影响存储单元的值,更重要的是它可能改变CPUI/O端口电平、输出时序或CPUI/O端口电平的反应等等,从而实现CPU的控制功能。

因为IO访问存在side effect,所以对IO的访问就需要特别注意:
其原因:
1, cache及write buffer的存在。cache效应可能会导致对IO的访问并未真正发生,从而影响side effect。
2,编译器的优化。优化可能会调整指令顺序,从而影响side effect。
3,指令的乱序执行

如何避免:
1,noncache/nonbuffer
2,插入各种memory barrier

阅读(2143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~