免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3964 | 回复: 17
打印 上一主题 下一主题

单处理器下,异常处理程序和内核态的进程之间需要锁么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-14 18:17 |只看该作者 |倒序浏览
在ULK2的1.6.5.1节中,看到下面这段话:

Therefore, on a uniprocessor system, all kernel data structures that are not updated by interrupts or exception handlers are safe for the kernel to access.

这里为什么要说"or exception handler"? 我觉得不需要吧?


bow!

论坛徽章:
0
2 [报告]
发表于 2008-08-14 21:07 |只看该作者
看得真仔细,ulk3的话
我也觉得是纯属多余的,可能作者就是想说别的路径
中断和异常除了异步性很相似,经常放在一起说,不过只听说在访问都会访问数据时要禁止中断,但没有说禁止异常的说法

论坛徽章:
0
3 [报告]
发表于 2008-08-15 09:26 |只看该作者
这句话不多余啊。
当你的程序在临界区执行的时候,要访问一个关键数据。而在临界区执行时发生一个异常,且异常的处理函数也要访问这个关键数据,当然就是不安全的了。
当然异常无法关闭,但这种风险理论上是存在的。虽然我觉得目前内核中没有这种内核路径要访问并且会在引起异常,且异常也要访问的数据结构,但书中提出来这种风险也是对写代码的人一种警示。

论坛徽章:
0
4 [报告]
发表于 2008-08-15 09:50 |只看该作者
原帖由 zx_wing 于 2008-8-15 09:26 发表
这句话不多余啊。
当你的程序在临界区执行的时候,要访问一个关键数据。而在临界区执行时发生一个异常,且异常的处理函数也要访问这个关键数据,当然就是不安全的了。
当然异常无法关闭,但这种风险理论上是存 ...

我更相信作者是随意在中断后接了个异常
因为对于中断,我们会说如果临界区和中断共享数据,要禁止中断,但是没有要和异常共享然后禁止异常
比如问: 如果和异常共享数据怎么办?

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
5 [报告]
发表于 2008-08-15 09:54 |只看该作者
不多余,中断表示处理器外部异常,异常表示处理器内部异常。你可以拒绝别人的想法(关中断),但是没法阻止自己的想法(内部异常)。

all kernel data structures that are not updated by interrupts or exception handlers are safe for the kernel to access.

这句话的另一个意思是,all other kernel data structures that updated by interrupts or exception handlers are NOT safe for the kernel to access. 意思是三楼zx_wing 的话“当你的程序在临界区执行的时候,要访问一个关键数据。而在临界区执行时发生一个异常,且异常的处理函数也要访问这个关键数据,当然就是不安全的了。”

[ 本帖最后由 gvim 于 2008-8-15 09:56 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
6 [报告]
发表于 2008-08-15 09:55 |只看该作者
原帖由 flw2 于 2008-8-15 09:50 发表

但是没有要和异常共享然后禁止异常
比如问: 如果和异常共享数据怎么办?


没错,所以作者告诉你,面对你思考的情形,是unsafe的。

论坛徽章:
0
7 [报告]
发表于 2008-08-15 10:00 |只看该作者
原帖由 flw2 于 2008-8-15 09:50 发表

我更相信作者是随意在中断后接了个异常
因为对于中断,我们会说如果临界区和中断共享数据,要禁止中断,但是没有要和异常共享然后禁止异常
比如问: 如果和异常共享数据怎么办?

我还是觉得这个是作者向读者提出这个风险。

>> 如果和异常共享数据怎么办?
我认为没有办法,特别是在单处理器上。但我觉得和异常共享数据是种错误的程序设计方法。并不是所有情况都可以处理掉,例如异常引起异常是double fault,double fault再引起异常是triple fault,CPU就重启了。就是认为这种情况处理不掉。我认为“和异常共享数据”也是一种处理不掉的情况。

论坛徽章:
0
8 [报告]
发表于 2008-08-15 10:02 |只看该作者
原帖由 gvim 于 2008-8-15 09:54 发表
不多余,中断表示处理器外部异常,异常表示处理器内部异常。你可以拒绝别人的想法(关中断),但是没法阻止自己的想法(内部异常)。

all kernel data structures that are not updated by interrupts or except ...

刚才看第一次回复是说三楼,回了帖子一看变成zx_wing了。
是不是怕出现昨天xpl兄弟说楼上某人的情况?
我昨天那是个失误,回帖的时候忘了谁说的,又懒得去翻了,确实很失礼啊

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
9 [报告]
发表于 2008-08-15 10:12 |只看该作者
异常一定会有一个修改全局状态(包括但不限于内存变量或处理器状态机)的步骤,否则0输入0输出的程序没有任何意义,大不了处理不了的就重启嘛-_-;
作者只是告诉你,异常修改的东西,接着访问是不安全的。如果无聊到在内核里弄一个全局的 int testifexceptionarise_ofcauseitistrival = 0,那么你永远可以安全的访问这个东西。

to: zx_wing ,我是觉得技术牛人是应该被我尊敬的,虽然我不知道你的名字,可是知道你的id。简单的用“三楼”来指代,是不尊敬的表现,呵呵。

论坛徽章:
0
10 [报告]
发表于 2008-08-15 10:24 |只看该作者
原帖由 gvim 于 2008-8-15 09:55 发表


没错,所以作者告诉你,面对你思考的情形,是unsafe的。

那意思就是说要不就不共享,要不就在访问的时候保证别产生该异常吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP