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

那誰的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

linux內(nèi)核V2.6.11學(xué)習(xí)筆記(5)--異常處理

這里以除0錯(cuò)誤這個(gè)異常來講解異常處理的機(jī)制.

1) 注冊異常處理函數(shù)
在系統(tǒng)初始化的時(shí)候,調(diào)用trap_init函數(shù)注冊異常處理函數(shù).
這個(gè)函數(shù)里調(diào)用set_trap_gate(0,&divide_error);注冊除0錯(cuò)誤的異常由divide_error函數(shù)處理,而這個(gè)錯(cuò)誤的中斷向量號是0.

2) 當(dāng)異常被觸發(fā)時(shí),調(diào)用原先注冊的divide_error函數(shù).
這個(gè)函數(shù)的實(shí)現(xiàn)的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
首先,它將真正的處理函數(shù)do_divide_error壓入棧中,其實(shí),對于每個(gè)異常而言,真正的處理函數(shù)都是名為"do_注冊函數(shù)"的函數(shù).
緊跟著,將一些需要保存的寄存器也壓入棧中.
接著,由于處理函數(shù)的地址已經(jīng)在edi寄存器中了,調(diào)用call *%edi調(diào)用處理函數(shù).
當(dāng)處理完畢之后,調(diào)用函數(shù)ret_from_exception從異常處理中返回.

上面是大致的流程,下面詳細(xì)看看do_divide_error函數(shù)做了什么.
這個(gè)函數(shù)的實(shí)現(xiàn)在文件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)
可以看到,最終這個(gè)函數(shù)會走到do_trap函數(shù)中,接著看這個(gè)函數(shù)中的代碼片段:
    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;
    }
首先得到當(dāng)前進(jìn)程的指針,在進(jìn)程結(jié)構(gòu)體的thread結(jié)構(gòu)體中保存error_code和trapnr,也就是錯(cuò)誤號和中斷向量.
接著調(diào)用force_sig_info函數(shù),可以跟進(jìn)這個(gè)函數(shù),其實(shí)最終要做的就是將該異常以信號量的形式加入到當(dāng)前進(jìn)程的信號集合中,也就是給當(dāng)前進(jìn)程發(fā)送信號,告訴進(jìn)程有異常被觸發(fā)了,需要處理.以除0錯(cuò)誤來看,這個(gè)信號量是SIGFPE.



posted on 2009-04-29 21:45 那誰 閱讀(3268) 評論(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>
            一本久久精品一区二区| 午夜精品免费视频| 欧美精品自拍偷拍动漫精品| 久久亚洲精品网站| 久久久久久**毛片大全| 久久一区免费| 欧美顶级艳妇交换群宴| 欧美国产极速在线| 国产精品久久久91| 国产视频观看一区| **欧美日韩vr在线| aa国产精品| 亚洲欧美文学| 美日韩在线观看| 欧美激情一区二区三区成人| 亚洲伦伦在线| 欧美一区二区视频97| 久久五月天婷婷| 欧美日韩亚洲一区二区| 国产亚洲美州欧州综合国| 亚洲国产精品久久精品怡红院| 久久综合给合| 亚洲高清网站| 亚洲国产成人在线视频| 日韩亚洲精品视频| 欧美在线免费视屏| 欧美日韩成人| 狠狠色丁香婷综合久久| 这里只有精品电影| 久久频这里精品99香蕉| 99国产精品视频免费观看| 欧美在线亚洲在线| 欧美午夜一区二区福利视频| 一区三区视频| 欧美一区二区在线看| 亚洲欧洲精品一区二区| 欧美一级播放| 欧美日韩性生活视频| 在线观看av一区| 欧美一二区视频| 亚洲精品美女在线观看| 久久国产夜色精品鲁鲁99| 欧美午夜电影一区| 亚洲精品在线三区| 卡一卡二国产精品| 亚洲在线免费| 国产精品a久久久久| 亚洲精品黄色| 男女激情视频一区| 久久精品免费| 国语精品一区| 久久国产婷婷国产香蕉| 日韩亚洲国产精品| 一本色道久久综合亚洲精品高清 | 久久精品夜色噜噜亚洲a∨| 亚洲永久免费精品| 久久久久久国产精品一区| 国产精品久久久999| 亚洲久色影视| 亚洲成人在线网| 亚洲美女精品久久| 欧美激情精品久久久久久免费印度| 一区二区高清视频| 欧美国产日韩二区| 亚洲经典在线看| 麻豆精品精华液| 性欧美8khd高清极品| 国产精品制服诱惑| 久久国产88| 欧美中在线观看| 国产日韩在线播放| 久久精品三级| 久久成人一区| 亚洲国产成人午夜在线一区| 老司机免费视频一区二区| 久久久最新网址| 亚洲黄色一区| 日韩视频精品在线| 欧美精品高清视频| 日韩视频永久免费| 一本久道综合久久精品| 国产精品一国产精品k频道56| 国产精品亚洲不卡a| 亚洲男女自偷自拍图片另类| 亚洲免费在线视频一区 二区| 久久爱www.| 国产亚洲欧美一区在线观看| 欧美一区二区视频在线| 正在播放日韩| 国产亚洲精品自拍| 欧美国产先锋| 欧美午夜a级限制福利片| 亚洲一区二区三区久久| 欧美亚洲免费电影| 亚洲日本欧美| 亚洲欧美日韩精品久久久久| 一区二区三区在线视频播放| 亚洲美女在线一区| 国产又爽又黄的激情精品视频| 国产一区二区黄色| 久久免费偷拍视频| 亚洲午夜一二三区视频| 激情久久久久久久久久久久久久久久| 国产麻豆成人精品| 久久久久久久波多野高潮日日| 欧美黄色免费| 欧美天天在线| 欧美成人四级电影| 国产精品爽爽爽| 亚洲电影成人| 国产日韩欧美高清| 日韩一级大片在线| 亚洲电影网站| 亚洲欧美高清| 一区二区三区日韩| 久久蜜桃资源一区二区老牛| 亚洲永久精品国产| 欧美sm视频| 另类欧美日韩国产在线| 国产精品欧美一区二区三区奶水| 一区二区日韩精品| 欧美中文日韩| 欧美一区二区三区免费在线看| 一本色道久久综合亚洲精品小说 | 久久精品一区二区| 亚洲精品美女久久7777777| 亚洲欧美日韩在线综合| 一区二区三区波多野结衣在线观看| 亚洲精品欧美一区二区三区| 国产真实乱子伦精品视频| 亚洲视频精品| 亚洲欧美日本日韩| 欧美日韩国产精品自在自线| 欧美成人一区二区三区在线观看 | 欧美影院视频| 亚洲欧美电影在线观看| 欧美区一区二区三区| 亚洲国产成人精品久久| 伊人成人在线视频| 久久国产一区二区三区| 欧美资源在线| 国产视频一区在线| 午夜视频精品| 久久色在线观看| 国语自产在线不卡| 久久精品中文| 欧美激情一二三区| 亚洲美女黄网| 欧美日韩亚洲一区二区三区| 亚洲精品在线视频| 亚洲男人天堂2024| 国产麻豆综合| 久久香蕉国产线看观看av| 欧美v日韩v国产v| 亚洲人成7777| 欧美日韩一卡二卡| 亚洲视频碰碰| 久久午夜精品一区二区| 亚洲高清不卡| 欧美日韩亚洲在线| 午夜影院日韩| 亚洲第一页在线| 亚洲欧美一区二区精品久久久| 国产在线视频欧美| 久久精品伊人| 国内自拍视频一区二区三区| 欧美影片第一页| 亚洲第一区中文99精品| 亚洲婷婷免费| 亚洲欧美激情视频| 国产精品美女一区二区在线观看 | 亚洲精品护士| 久久网站热最新地址| 亚洲精品国产系列| 宅男噜噜噜66国产日韩在线观看| 亚洲每日更新| 国产亚洲毛片在线| 毛片av中文字幕一区二区| 欧美电影在线观看| 久久精品国产99| 欧美日韩精品久久久| 亚洲欧美制服中文字幕| 久久人人97超碰人人澡爱香蕉| 久久色在线观看| 日韩天天综合| 亚洲性图久久| 国产伦精品一区二区三区免费迷 | 欧美粗暴jizz性欧美20| 亚洲国产精品成人久久综合一区| 亚洲一区二区影院| 麻豆freexxxx性91精品| 日韩系列欧美系列| 一区精品在线| 国产美女精品人人做人人爽| 欧美成人精品福利| 久久久国产成人精品| 亚洲尤物视频网| 一本一道久久综合狠狠老精东影业 | 亚洲图片欧美日产| 韩国av一区二区三区四区|