青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

linux內核V2.6.11學習筆記(5)--異常處理

這里以除0錯誤這個異常來講解異常處理的機制.

1) 注冊異常處理函數
在系統初始化的時候,調用trap_init函數注冊異常處理函數.
這個函數里調用set_trap_gate(0,&divide_error);注冊除0錯誤的異常由divide_error函數處理,而這個錯誤的中斷向量號是0.

2) 當異常被觸發時,調用原先注冊的divide_error函數.
這個函數的實現的Entry.S文件中:
ENTRY(divide_error)
    pushl $
0            # no error code
    pushl $do_divide_error
    ALIGN
error_code:
    pushl 
%ds
    pushl 
%eax
    xorl 
%eax, %eax
    pushl 
%ebp
    pushl 
%edi
    pushl 
%esi
    pushl 
%edx
    decl 
%eax            # eax = -1
    pushl 
%ecx
    pushl 
%ebx
    cld
    movl 
%es, %ecx
    movl ES(
%esp), %edi        # get the function address
    movl ORIG_EAX(
%esp), %edx    # get the error code
    movl 
%eax, ORIG_EAX(%esp)
    movl 
%ecx, ES(%esp)
    movl $(__USER_DS), 
%ecx
    movl 
%ecx, %ds
    movl 
%ecx, %es
    movl 
%esp,%eax            # pt_regs pointer
    call 
*%edi
    jmp ret_from_exception
首先,它將真正的處理函數do_divide_error壓入棧中,其實,對于每個異常而言,真正的處理函數都是名為"do_注冊函數"的函數.
緊跟著,將一些需要保存的寄存器也壓入棧中.
接著,由于處理函數的地址已經在edi寄存器中了,調用call *%edi調用處理函數.
當處理完畢之后,調用函數ret_from_exception從異常處理中返回.

上面是大致的流程,下面詳細看看do_divide_error函數做了什么.
這個函數的實現在文件trap.c中:
#define DO_VM86_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
fastcall 
void do_##name(struct pt_regs * regs, long error_code) \
{ \
    siginfo_t info; \
    info.si_signo 
= signr; \
    info.si_errno 
= 0; \
    info.si_code 
= sicode; \
    info.si_addr 
= (void __user *)siaddr; \
    
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
                        
== NOTIFY_STOP) \
        
return; \
    do_trap(trapnr, signr, str, 
1, regs, error_code, &info); \
}

DO_VM86_ERROR_INFO( 
0, SIGFPE,  "divide error", divide_error, FPE_INTDIV, regs->eip)
可以看到,最終這個函數會走到do_trap函數中,接著看這個函數中的代碼片段:
    trap_signal: {
        
struct task_struct *tsk = current;
        tsk
->thread.error_code = error_code;
        tsk
->thread.trap_no = trapnr;
        
if (info)
            force_sig_info(signr, info, tsk);
        
else
            force_sig(signr, tsk);
        
return;
    }
首先得到當前進程的指針,在進程結構體的thread結構體中保存error_code和trapnr,也就是錯誤號和中斷向量.
接著調用force_sig_info函數,可以跟進這個函數,其實最終要做的就是將該異常以信號量的形式加入到當前進程的信號集合中,也就是給當前進程發送信號,告訴進程有異常被觸發了,需要處理.以除0錯誤來看,這個信號量是SIGFPE.



posted on 2009-04-29 21:45 那誰 閱讀(3262) 評論(0)  編輯 收藏 引用 所屬分類: linux kernel

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精彩视频| 亚洲经典视频在线观看| 亚洲自拍16p| 国产麻豆视频精品| 欧美在线日韩| 久久久久久伊人| 亚洲国产精品第一区二区| 亚洲国产91| 国产精品成人一区二区网站软件 | 久久中文久久字幕| 久久嫩草精品久久久精品一| 91久久精品一区| 一区二区三区国产盗摄| 国产日韩一级二级三级| 亚洲高清视频在线观看| 国产精品成人播放| 久久这里有精品视频| 欧美激情偷拍| 久久久不卡网国产精品一区| 欧美第十八页| 久久av一区| 欧美激情1区| 久久精品在线播放| 亚洲一区日韩| 国产精品美女久久福利网站| 亚洲尤物在线| 亚洲欧美日韩精品| 精品99一区二区| 国产精品高潮久久| 久久一二三四| 久久电影一区| 欧美日韩国产亚洲一区| 久久午夜av| 国产精品久久久久毛片大屁完整版| 久久精品九九| 亚洲影院污污.| 亚洲美女精品成人在线视频| 欧美综合国产| 亚洲在线视频免费观看| 男人的天堂亚洲| 久久精品99国产精品日本| 欧美精品一区二区视频| 亚洲女同同性videoxma| 激情六月综合| 亚洲一区二区三区在线观看视频| 亚洲国产精品一区制服丝袜| 性欧美大战久久久久久久久| 亚洲综合三区| 欧美午夜剧场| 亚洲日本国产| 亚洲精品中文字| 久久亚洲色图| 开元免费观看欧美电视剧网站| 国产精品一区免费视频| av成人手机在线| 中文精品视频| 欧美日韩精品福利| 亚洲精品麻豆| 在线视频欧美精品| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲清纯自拍| 一本色道久久综合亚洲精品不卡| 欧美v日韩v国产v| 欧美激情a∨在线视频播放| 国内外成人在线| 久久国产精品亚洲77777| 久久久久久免费| 一色屋精品视频免费看| 久久久九九九九| 欧美激情二区三区| 亚洲精品视频中文字幕| 欧美精品一区二区三区在线播放| 91久久在线视频| 亚洲欧美日韩国产成人精品影院| 在线天堂一区av电影| 欧美极品aⅴ影院| 一区二区精品国产| 午夜亚洲性色视频| 国产一区二区三区高清播放| 久久久人成影片一区二区三区| 免费日韩精品中文字幕视频在线| 亚洲国产欧美一区二区三区丁香婷| 欧美不卡在线视频| 99在线精品观看| 久久国产毛片| 亚洲国产日本| 欧美天天综合网| 亚洲欧美在线观看| 你懂的视频欧美| 欧美日韩不卡合集视频| 一区二区三区视频免费在线观看| 欧美在线啊v| 性欧美18~19sex高清播放| 亚洲永久视频| 国产自产在线视频一区| 欧美99久久| 亚洲免费在线看| 欧美护士18xxxxhd| 亚洲一区日韩| 亚洲电影自拍| 国产精品一卡二| 欧美精品aa| 欧美一区二区三区在线播放| 亚洲国产高清一区| 欧美一区二区三区免费视| 亚洲国产欧美久久| 国产精品系列在线播放| 欧美成黄导航| 久久精品视频播放| 99精品视频免费在线观看| 久久亚洲精品中文字幕冲田杏梨| 亚洲午夜视频在线| 亚洲国产天堂久久综合网| 国产精品视频免费观看www| 亚洲视频在线一区| 欧美sm视频| 久久爱www| 亚洲影院色在线观看免费| 亚洲日本一区二区三区| 国产视频久久久久久久| 欧美日韩亚洲高清| 欧美 日韩 国产在线| 欧美在线视频免费| 亚洲一区二区三区四区五区午夜| 亚洲福利小视频| 欧美福利视频一区| 老司机aⅴ在线精品导航| 欧美一级大片在线免费观看| 在线视频一区观看| 日韩亚洲国产精品| 亚洲人在线视频| 亚洲激情电影中文字幕| 黄色小说综合网站| 国产在线不卡| 国模吧视频一区| 国产一区二区久久| 国产日韩成人精品| 国产日产精品一区二区三区四区的观看方式| 免费人成精品欧美精品| 久久影视精品| 免费成人性网站| 国产精品一区二区三区成人| 久久综合久久综合久久| 久久久欧美精品| 久久青草久久| 另类欧美日韩国产在线| 蜜桃av一区| 欧美精品亚洲二区| 欧美色欧美亚洲另类七区| 欧美亚州韩日在线看免费版国语版| 欧美日韩精品福利| 国产精品久久777777毛茸茸| 国产精品中文在线| 国内视频一区| 亚洲日本国产| 亚洲专区一二三| 久久国产欧美| 欧美成人精品在线播放| 亚洲风情亚aⅴ在线发布| 99精品热6080yy久久| 亚洲毛片av| 亚洲综合欧美| 久久精品国产亚洲一区二区三区| 久久久久国产一区二区| 欧美大片网址| 国产精品久久夜| 国产专区综合网| 91久久精品www人人做人人爽| 日韩一二三在线视频播| 亚洲在线视频观看| 久久在精品线影院精品国产| 亚洲国产欧美一区二区三区同亚洲| 亚洲啪啪91| 欧美在线中文字幕| 欧美大片免费观看| 国产欧美日韩不卡免费| 91久久线看在观草草青青| 亚洲一区图片| 美女视频一区免费观看| 一本色道久久88亚洲综合88| 久久九九国产精品怡红院| 欧美日韩精品是欧美日韩精品| 欧美一级成年大片在线观看| 亚洲精品国精品久久99热一| 一区二区三区久久久| 久久精品国产精品亚洲综合| 91久久国产自产拍夜夜嗨| 亚洲在线1234| 欧美日韩国产成人在线免费| 国产综合视频| 亚洲欧美日本国产专区一区| 欧美激情1区2区3区| 欧美一区二区三区的| 欧美日韩亚洲综合一区| 在线观看亚洲一区| 久久精品国产一区二区三| 日韩视频在线一区二区三区| 久久综合一区| 国产综合久久久久影院| 午夜一级久久|