中断产生时中断描述符表所在页面缺页,处理机之后是什么动作?{技术}{操作系统}

10 views
Skip to first unread message

Ji Cheng

unread,
Sep 6, 2009, 1:51:17 AM9/6/09
to TopLanguage
如题。
如果第一次中断是INT n,我感觉应该是int n -> page fault-> page fault-> double fault ->
triple fault -> shutdown mode。
但是找不到根据,写程序验证似乎有些困难。在CSDN上问过这个问题,不过没什么结果,故向各位请教。

smzlkimi

unread,
Sep 6, 2009, 3:53:35 AM9/6/09
to pon...@googlegroups.com
我印象中内核空间是不会被换出吧,linux线性地址3G~4G似乎常住内存。不过不确定,忘了。
你可以去linux zh-kernel邮件列表问下

2009/9/6 Ji Cheng <memo...@gmail.com>

Shuo Chen

unread,
Sep 6, 2009, 9:12:01 AM9/6/09
to TopLanguage
什么软硬件平台?

Wenbo Yang

unread,
Sep 6, 2009, 11:03:06 AM9/6/09
to pon...@googlegroups.com
去查 Intel 手册,Vol 3: System Programming Guide,Ch5.15 Exception and interrupt reference,Int 8 and Int 14,我猜你需要的内容在 Int 8 的末尾 Program state change 那一段。

文博

2009/9/6 Ji Cheng <memo...@gmail.com>

--
Wenbo YANG

Homepage ---> http://solrex.cn
Blog | Solrex Shuffling ---> http://blog.solrex.cn

oliver yang

unread,
Sep 6, 2009, 6:02:49 PM9/6/09
to pon...@googlegroups.com
不会出现这种情况的,内核内存不允许换出的,不会有page fault.

2009/9/5 Ji Cheng <memo...@gmail.com>:

--
Cheers,

Oliver Yang

Blog: http://blog.csdn.net/yayong
--------------------------------------------------------------------
An OpenSolaris Developer

季成

unread,
Sep 6, 2009, 5:08:19 AM9/6/09
to TopLanguage
核态空间的内存确实不会被换出,不过现在是在做虚拟机管理器,想截获中断

On 9月6日, 下午3时53分, smzlkimi <smzlk...@gmail.com> wrote:
> 我印象中内核空间是不会被换出吧,linux线性地址3G~4G似乎常住内存。不过不确定,忘了。
> 你可以去linux zh-kernel邮件列表问下
>

> 2009/9/6 Ji Cheng <memol...@gmail.com>

季成

unread,
Sep 6, 2009, 9:17:58 AM9/6/09
to TopLanguage
核态内存确实不会被换出,不过我是想做虚拟机管理器,和具体系统没什么关系....

On 9月6日, 下午3时53分, smzlkimi <smzlk...@gmail.com> wrote:

> 我印象中内核空间是不会被换出吧,linux线性地址3G~4G似乎常住内存。不过不确定,忘了。
> 你可以去linux zh-kernel邮件列表问下
>

> 2009/9/6 Ji Cheng <memol...@gmail.com>

YiBin Liu

unread,
Sep 6, 2009, 9:34:31 AM9/6/09
to pon...@googlegroups.com
如果是在Windows NT以上的话,是这样排的


高:-------------------
    掉电
    处理器间中断
    时钟
    配置文件
    设备N
    ……
    设备1
    DPC/调度
    APC

低:-------------------


2009/9/6 Shuo Chen <gian...@gmail.com>

Ji Cheng

unread,
Sep 6, 2009, 12:48:19 PM9/6/09
to pon...@googlegroups.com
谢谢,我看的就是这里。我感觉它说的#DF是一个中断处理函数中产生了另一个中断,而不是在这个中断周期中产生了中断。如果int n在寻找中断向量时发生了#PF,那这个处理这个#PF时CPU压栈的是int n的EIP呢还是IDT的地址?这相当于一条int n指令产生了两个中断,这有点诡异啊....

季成

2009/9/6 Wenbo Yang <sol...@gmail.com>

oliver yang

unread,
Sep 6, 2009, 6:11:38 PM9/6/09
to pon...@googlegroups.com
2009/9/6 季成 <memo...@gmail.com>:
> 核态空间的内存确实不会被换出,不过现在是在做虚拟机管理器,想截获中断

hypervisor直接对IOAPIC和CPU的Local APIC
进行管理,所以不论是INTx/MSI/MSI-X都是hypervisor先截获到的,然后注入一个虚拟的中断到Guest OS.

--

oliver yang

unread,
Sep 6, 2009, 6:14:57 PM9/6/09
to pon...@googlegroups.com
2009/9/6 季成 <memo...@gmail.com>:
> 核态内存确实不会被换出,不过我是想做虚拟机管理器,和具体系统没什么关系....


即便是做hypervisor,保证中断和异常不会引起令一次page fault是非常必要的。不然就有很难解决的问题或者使得实现不够高效。

例如,page fault本身就是个异常,它引起另一个page fault不就死锁了吗?

--

oliver yang

unread,
Sep 6, 2009, 6:16:40 PM9/6/09
to pon...@googlegroups.com
2009/9/6 Ji Cheng <memo...@gmail.com>:

> 谢谢,我看的就是这里。我感觉它说的#DF是一个中断处理函数中产生了另一个中断,而不是在这个中断周期中产生了中断。如果int
> n在寻找中断向量时发生了#PF,那这个处理这个#PF时CPU压栈的是int n的EIP呢还是IDT的地址?这相当于一条int
> n指令产生了两个中断,这有点诡异啊....


Double Fault一般在各种OS上被用来处理真正的错误。发生Double Fault的通常结果是panic.


>
> 2009/9/6 Wenbo Yang <sol...@gmail.com>
>>
>> 去查 Intel 手册,Vol 3: System Programming Guide,Ch5.15 Exception and interrupt
>> reference,Int 8 and Int 14,我猜你需要的内容在 Int 8 的末尾 Program state change 那一段。
>>
>> 文博
>>
>> 2009/9/6 Ji Cheng <memo...@gmail.com>
>>>
>>> 如题。
>>> 如果第一次中断是INT n,我感觉应该是int n -> page fault-> page fault-> double fault ->
>>> triple fault -> shutdown mode。
>>> 但是找不到根据,写程序验证似乎有些困难。在CSDN上问过这个问题,不过没什么结果,故向各位请教。
>>
>> --
>> Wenbo YANG
>>
>> Homepage ---> http://solrex.cn
>> Blog | Solrex Shuffling ---> http://blog.solrex.cn
>>
>>
>
>

--

Wenbo Yang

unread,
Sep 6, 2009, 8:08:19 PM9/6/09
to Ji Cheng, pon...@googlegroups.com
我也发现了这个问题,回复本帖子之后消息没有马上在列表页面上出现。难道现在每个消息都要被审核才能出现在列表中吗?还是 Google Group 目前做了某些限制(比如对敏感时期的反应)?

文博

2009/9/7 Ji Cheng <memo...@gmail.com>

p.s.你好,能再问你一个问题吗?我第一次在Group里发言,不知道怎么回事为什么我点回复之后显示发帖成功,但在页面上却没有我的回复呢?上面几个人的回复我都回复了,可他们的回复我邮箱里没有,只能在网页上看到,只有你的回复到了我的邮箱里。我晕死了,弄得我跟提了问就消失了一样.....

Wenbo Yang

unread,
Sep 6, 2009, 8:03:06 PM9/6/09
to pon...@googlegroups.com

2009/9/7 Ji Cheng <memo...@gmail.com>

谢谢,我看的就是这里。我感觉它说的#DF是一个中断处理函数中产生了另一个中断,而不是在这个中断周期中产生了中断。如果int n在寻找中断向量时发生了#PF,那这个处理这个#PF时CPU压栈的是int n的EIP呢还是IDT的地址?这相当于一条int n指令产生了两个中断,这有点诡异啊....

您的意思是担心在寻找 IDT entry 的时候发生 #PF?我没有什么经验,但是我认为处理器应该保证不会让此类事件发生,比如让 IDT 的几个页面常驻内存或者处理器自动换进这些页面,不应该出现 #PF。否则处理机会陷入死循环,出现 #PF,寻找中断向量时再 #PF,继续下去就无法结束了。当然,这只是我认为的 the right way to do things,事实如何我也不了解。
 

p.s.你好,能再问你一个问题吗?
我第一次在Group里发言,不知道怎么回事为什么我点回复之后显示发帖成功,但在页面上却没有我的回复呢?上面几个人的回复我都回复了,可他们的回复我邮箱里没有,只能在网页上看到,只有你的回复到了我的邮箱里。我晕死了,弄得我跟提了问就消失了一样.....

发帖成功,可能要重刷一下页面才能看到。您订阅的时候应该选择最多的那个 “Email” 选项,这样每封回复的邮件都会送到您的邮箱里(您可能需要一个过滤器),而不是每日摘要。自己发的邮件或者回复好像是不会进自己信箱的。他们的邮件我应该都看到了。其实发言和回复都完全可以在邮箱里进行。
 

2009/9/6 Wenbo Yang <sol...@gmail.com>

去查 Intel 手册,Vol 3: System Programming Guide,Ch5.15 Exception and interrupt reference,Int 8 and Int 14,我猜你需要的内容在 Int 8 的末尾 Program state change 那一段。

文博

2009/9/6 Ji Cheng <memo...@gmail.com>

如题。
如果第一次中断是INT n,我感觉应该是int n -> page fault-> page fault-> double fault ->
triple fault -> shutdown mode。
但是找不到根据,写程序验证似乎有些困难。在CSDN上问过这个问题,不过没什么结果,故向各位请教。


文博

oliver yang

unread,
Sep 6, 2009, 8:45:32 PM9/6/09
to pon...@googlegroups.com
2009/9/6 Wenbo Yang <sol...@gmail.com>:

>
> 2009/9/7 Ji Cheng <memo...@gmail.com>
>>
>> 谢谢,我看的就是这里。我感觉它说的#DF是一个中断处理函数中产生了另一个中断,而不是在这个中断周期中产生了中断。如果int
>> n在寻找中断向量时发生了#PF,那这个处理这个#PF时CPU压栈的是int n的EIP呢还是IDT的地址?这相当于一条int
>> n指令产生了两个中断,这有点诡异啊....
>
> 您的意思是担心在寻找 IDT entry 的时候发生 #PF?我没有什么经验,但是我认为处理器应该保证不会让此类事件发生,比如让 IDT
> 的几个页面常驻内存或者处理器自动换进这些页面,不应该出现 #PF。否则处理机会陷入死循环,出现 #PF,寻找中断向量时再
> #PF,继续下去就无法结束了。当然,这只是我认为的 the right way to do things,事实如何我也不了解。
>

这个应该不是处理器保证的。IDT的内存分配时应该是在页表里设置成不能换出的内存。

我想不论是OS还是hypervisor都不希望中断处理还会引起#PF,正如我前面所说,设计上这样会简单。不然就出现你说的例子。

#DF是一般都是用来做错误处理,没有人用来处理多次#PF。

XingChao Wang

unread,
Sep 6, 2009, 8:23:16 PM9/6/09
to pon...@googlegroups.com
2009/9/7 oliver yang <yango...@gmail.com>

>
> 2009/9/6 季成 <memo...@gmail.com>:
> > 核态内存确实不会被换出,不过我是想做虚拟机管理器,和具体系统没什么关系....
>
>
> 即便是做hypervisor,保证中断和异常不会引起令一次page fault是非常必要的。不然就有很难解决的问题或者使得实现不够高效。
>
> 例如,page fault本身就是个异常,它引起另一个page fault不就死锁了吗?
>
>
kernel里肯定不会有这种情况.在hypervisor中难道没有进程上下文环境么? kernel的pf不会引起2次pf吧.

oliver yang

unread,
Sep 6, 2009, 11:07:32 PM9/6/09
to pon...@googlegroups.com
2009/9/6 XingChao Wang <wxc...@gmail.com>:

> 2009/9/7 oliver yang <yango...@gmail.com>
>>
>> 2009/9/6 季成 <memo...@gmail.com>:
>> > 核态内存确实不会被换出,不过我是想做虚拟机管理器,和具体系统没什么关系....
>>
>>
>> 即便是做hypervisor,保证中断和异常不会引起令一次page fault是非常必要的。不然就有很难解决的问题或者使得实现不够高效。
>>
>> 例如,page fault本身就是个异常,它引起另一个page fault不就死锁了吗?
>>
>>
> kernel里肯定不会有这种情况.在hypervisor中难道没有进程上下文环境么? kernel的pf不会引起2次pf吧.


Hypervisor都在ring 0上工作, 很多hypervisor把内存映射到了虚拟地址空间的高段,应该是不会换出的。

Reply all
Reply to author
Forward
0 new messages