免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: epegasus
打印 上一主题 下一主题

int 80 和中断的一点疑问. [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-11-13 00:38 |只看该作者
学习下.

PS: 看来不只是我看不懂"穿越"这个词啊. LZ是不是穿越小说看太多了.

其实我觉得很多东西在书上都写了,仔细看书都可以找到答案

论坛徽章:
0
12 [报告]
发表于 2009-11-13 19:33 |只看该作者

回复 #9 mik 的帖子

谢谢.学了不少知识.
不过对于第2问,还是有点不清楚,我的意思是问:

假设一个IDT表项是一个中断门,里面存放的段选择符, 但并不能阻止人为的把这个选择符对应一个数据段段描述符, 当中断发生时(仅假设是MMI), 假设处理器通过中断门找到了这个段描述符,这个时候会发生什么?

-------

回楼上的:
情景分析叫穿过,我记不大清,所以叫穿越了,不过意思大致差不多.
定义为:一个外部中断发生时,或者一个int 指令发生时,到执行内存中的下一个指令前,所有处理器的行为.因为这中间处理器使用了一次IDT表项,所以叫"穿"...

[ 本帖最后由 epegasus 于 2009-11-13 19:47 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-11-13 20:17 |只看该作者
原帖由 epegasus 于 2009-11-13 19:33 发表
谢谢.学了不少知识.
不过对于第2问,还是有点不清楚,我的意思是问:

假设一个IDT表项是一个中断门,里面存放的段选择符, 但并不能阻止人为的把这个选择符对应一个数据段段描述符, 当中断发生时(仅假设是MMI), 假设处理器通过中断门找到了这个段描述符,这个时候会发生什么?

-------

回楼上的:
情景分析叫穿过,我记不大清,所以叫穿越了,不过意思大致差不多.
定义为:一个外部中断发生时,或者一个int 指令发生时,到执行内存中的下一个指令前,所有处理器的行为.因为这中间处理器使用了一次IDT表项,所以叫"穿"......


OK,我继续给你讲下去!


(1)当 interrupt 发生时,processor 在 IDT 寻找到 gate descriptor,从而找到 code segment selector(interrupt services routine 的 code segment)。

(2)processor 会加载 code segment descriptor 进入 CS 寄存器

(3) 第 3 点是你想要知道的重点:
      processor 在加载 code segment descriptor 进入 CS 寄存器之前,processor 会做一些工作,包括:

1、 descriptor 的 type check(类型检查)
2、 segment limit check(长度检查)
3、 descriptor & segment privilege check (权限检查)

只有通过它们的检查后,processor 才会转去执行 interrupt services routine
--------------------------------------------------------------------------------------------
第1点就是你想要的“segment descriptor 类型检查”,如果是  data segment descriptor 而不是 code segment descriptor 的话,就会产生 #GP 异常(通用保护异常)

产生 #GP 异常后,processor 就会转去处理 #GP 异常处理程序,如果问题没有得到解决的话,

最终会产生 #REST 机器不断重启





BTW: 我个人从来都不认为毛德操写的是好书!反而会误别人

        劝各位不要沉迷于他的“linux情景分析”,实在不值得一看!!

评分

参与人数 1可用积分 +30 收起 理由
godbach + 30 多谢mik兄分享

查看全部评分

论坛徽章:
0
14 [报告]
发表于 2009-11-13 20:29 |只看该作者

回复 #13 mik 的帖子

谢谢讲解.
毛的书讲了些这部分知识,当然如果像我这样的看了后仍然问题多多,
这些知识除了毛的书外,好象只能啃intel文档了,纯英文,要花不少时间才得要领...

貌似前面的一句话:

关于 current stack:是指向 processor 会切换到 0 级的 stack(内核栈),这个 kernel stack 就变成 current stack

内核栈ss是不是存在TSS里?

[ 本帖最后由 epegasus 于 2009-11-13 20:35 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-11-13 22:55 |只看该作者
原帖由 epegasus 于 2009-11-13 20:29 发表
谢谢讲解.
毛的书讲了些这部分知识,当然如果像我这样的看了后仍然问题多多,
这些知识除了毛的书外,好象只能啃intel文档了,纯英文,要花不少时间才得要领...

貌似前面的一句话:

关于 current stack:是指 ...


kernel 的 ss 和 esp 都放在 TSS 里

论坛徽章:
0
16 [报告]
发表于 2009-11-14 13:34 |只看该作者
以前ULK第3,4章看不懂,现在看得轻松多了.感谢mik.
ULK和情景分析虽然提到些,但是没能给我鲜明的印象,再翻翻,其实他们都讲到了些...

tr ,TSS具体用法还没来得及细看,不过现在终于看懂这贴了:
http://linux.chinaunix.net/bbs/thread-902033-1-1.html

与此相关的帖子还很多:
http://linux.chinaunix.net/bbs/v ... p;extra=&page=1
http://linux.chinaunix.net/bbs/viewthread.php?tid=1133099
http://linux.chinaunix.net/bbs/viewthread.php?tid=1097632
http://linux.chinaunix.net/bbs/viewthread.php?tid=1016895
http://linux.chinaunix.net/bbs/viewthread.php?tid=1129407

[ 本帖最后由 epegasus 于 2009-11-14 16:12 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP