关于边界效应(转载)
11.2 I/O寄存器和常规内存
在进入这部分学习的时候,首先要理解一个概念:sideeffect,书中译为边际效应,第二版译为副作用。我觉得不管它是怎么被翻译的,都不可能精准表达原作者的意思,所以我个人认为记住sideeffect就好。下面来讲讲side effect的含义。我先贴出两个网上已有的两种说法(在这里谢谢两位高人的分享):
第一种说法:
3. sideeffect(译为边际效应或副作用):是指读取某个地址时可能导致该地址内容发生变化,比如,有些设备的中断状态寄存器只要一读取,便自动清零。I/O寄存器的操作具有sideeffect,因此,不能对其操作不能使用cpu缓存。
原文网址:http://qinbh.blog.sohu.com/62733495.html
第二种说法:
说一下我的理解:I/O端口与实际外部设备相关联,通过访问I/O端口控制外部设备,“边际效应”是指控制设备(读取或写入)生效,访问I/O口的主要目的就是边际效应,不像访问普通的内存,只是在一个位置存储或读取一个数值,没有别的含义了。我是基于ARM平台理解的,在《linux设备驱动程序》第二版中的说法是“副作用”,不是“边际效应”。
原文网址:http://linux.chinaunix.net/bbs/viewthread.php?tid=890636&page=1#pid6312646
结合以上两种说法和自己看《Linux设备驱动程序(第3版)》的理解,我个人认为可以这样解释:
side effect是指 :访问I/O寄存器时,不仅仅会像访问普通内存一样影响存储单元的值,更重要的是它可能改变CPU的I/O端口电平、输出时序或CPU对I/O端口电平的反应等等,从而实现CPU的控制功能。CPU在电路中的意义就是实现其sideeffect 。