[提问]关于linux设备驱动程序3的一个问题

xiayu0912 2009-04-30 09:47:43
我在看linux设备驱动程序3的时候看到作者提了一个"边界效应"的概念,在百度上搜索,全都没有说清楚.

我想问一下什么是"边界效应"?

下面是原文,最后一句话提到了"边界效应":

wait_event(queue, condition)
wait_event_interruptible(queue, condition)
wait_event_timeout(queue, condition, timeout)
wait_event_interruptible_timeout(queue, condition, timeout)

在所有上面的形式中, queue 是要用的等待队列头. 注意它是"通过值"传递的. 条件是一个被这个宏在睡眠前后所求值的任意的布尔表达式; 直到条件求值为真值, 进程继续睡眠. 注意条件可能被任意次地求值, 因此它不应当有任何边界效应.

...全文
241 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfysy 2010-10-15
  • 打赏
  • 举报
回复
有些翻译比较搞笑,好多年前看到一本中文书叫《果壳里的Linux》,百思不得其解,为啥把Linux放在果壳里,什么意思?现在的翻译叫《LINUX技术手册》,其实英文名叫《linux in a nutshell》。in a nutshell是个词组,意思是:“总而言之;简单地;根本上说;简言之”,被俺们翻译成了果壳,搞不懂也是应该的了
dfysy 2010-10-15
  • 打赏
  • 举报
回复
边界效应感觉是数学,翻译的问题
cymx2002 2010-10-15
  • 打赏
  • 举报
回复
mark 一下,受教了
zhjuan 2010-05-27
  • 打赏
  • 举报
回复
我顶!
morris88 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 morris88 的回复:]
哦,原来是 side effect 啊
哎,没看过 《ldd v3》,原来翻译错误,
是说什么叫做“边界效应”哦...
[/Quote]
我记起来了,不是没看,看的是英文原版的
qianyou 2009-05-19
  • 打赏
  • 举报
回复
“边界效应” 好像源于经济学....
morris88 2009-05-19
  • 打赏
  • 举报
回复
哦,原来是 side effect 啊
哎,没看过 《ldd v3》,原来翻译错误,
是说什么叫做“边界效应”哦...
qianyou 2009-05-19
  • 打赏
  • 举报
回复
首先感谢以上两位的解答,以下是我在LDD3读书笔记中找到的一些分析,大家一起参考一下:-)


=======================================
11.2 I/O寄存器和常规内存
在进入这部分学习的时候,首先要理解一个概念:side effect,书中译为边际效应,第二版译为副作用。我觉得不管它是怎么被翻译的,都不可能精准表达原作者的意思,所以我个人认为记住side effect就好。下面来讲讲side effect的含义。我先贴出两个网上已有的两种说法(在这里谢谢两位高人的分享):

第一种说法:

3. side effect(译为边际效应或副作用):是指读取某个地址时可能导致该地址内容发生变化,比如,有些设备的中断状态寄存器只要一读取,便自动清零。I/O寄存器的操作具有side effect,因此,不能对其操作不能使用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在电路中的意义就是实现其side effect 。



I/O寄存器和RAM的主要不同就是I/O寄存器操作有side effect,而内存操作没有。
joyself 2009-05-18
  • 打赏
  • 举报
回复
英文没翻译好, side effect就是 “副作用”的意思了。
zhang_water 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qianyou 的回复:]
还是一头雾水....

Linux设备驱动程序第九章里面的“I/O寄存器和RAM的主要去表就是I/O操作具有边界效应”怎么理解啊?!

请高手解答!
[/Quote]
根据描述,我尝试解释下,不见得正确,供你参考。

对某个外设硬件寄存器的读写操作,寄存器的内容并不是完全由CPU控制的,常见的是标志位或者标志寄存器,由硬件控制,CPU可以通过查询的方式来获取状态变化,这样对于程序来说,这个寄存器的读写就有“边界效应”了。
qianyou 2009-05-17
  • 打赏
  • 举报
回复
还是一头雾水....

Linux设备驱动程序第九章里面的“I/O寄存器和RAM的主要去表就是I/O操作具有边界效应”怎么理解啊?!

请高手解答!
wangkongxinglang 2009-05-15
  • 打赏
  • 举报
回复
当一个进程睡眠, 它这样做以期望某些条件在以后会成真. 如我们之前注意到的, 任何睡眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. Linux 内核中睡眠的最简单方式是一个宏定义, 称为 wait_event(有几个变体); 它结合了处理睡眠的细节和进程在等待的条件的检查. wait_event 的形式是:

wait_event(queue, condition) wait_event_interruptible(queue, condition) wait_event_timeout(queue, condition, timeout) wait_event_interruptible_timeout(queue, condition, timeout)
在所有上面的形式中, queue 是要用的等待队列头. 注意它是"通过值"传递的. 条件是一个被这个宏在睡眠前后所求值的任意的布尔表达式; 直到条件求值为真值, 进程继续睡眠. 注意条件可能被任意次地求值, 因此它不应当有任何边界效应.

如果你使用 wait_event, 你的进程被置为不可中断地睡眠, 如同我们之前已经提到的, 它常常不是你所要的. 首选的选择是 wait_event_interruptible, 它可能被信号中断. 这个版本返回一个你应当检查的整数值; 一个非零值意味着你的睡眠被某些信号打断, 并且你的驱动可能应当返回 -ERESTARTSYS. 最后的版本(wait_event_timeout 和 wait_event_interruptible_timeout)等待一段有限的时间; 在这个时间期间(以嘀哒数表达的, 我们将在第 7 章讨论)超时后, 这个宏返回一个 0 值而不管条件是如何求值的.
边界效应(side effects, 按我的理解就是当外界条件未改变时,每次计算得到的结果应该相同)
morris88 2009-05-01
  • 打赏
  • 举报
回复
不熟,帮顶...

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧