版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux操作系統(tǒng)分析操作系統(tǒng)分析主講:陳香蘭助教:賈永泉、毛熠璐3606864-83(西區(qū)電三421)Autumn 2007Linux中的信號(hào)中的信號(hào)xlanchen2007.10.25xlanchen2007.10.25Linux operating systems analysis信號(hào)信號(hào)l信號(hào)在最早的Unix系統(tǒng)中就已經(jīng)被引入了,用于在用戶態(tài)進(jìn)程間通信。l內(nèi)核也用信號(hào)通知進(jìn)程系統(tǒng)所發(fā)生的事情xlanchen2007.10.25Linux operating systems analysis信號(hào)信號(hào)l信號(hào)是很短的消息l標(biāo)準(zhǔn)信號(hào)l標(biāo)準(zhǔn)信號(hào)沒(méi)有給參數(shù)、消息或是其他相隨的信息留有空間l通常使用
2、一個(gè)數(shù)字來(lái)標(biāo)識(shí)一個(gè)信號(hào)l信號(hào)可以被發(fā)送到一個(gè)進(jìn)程或一組進(jìn)程。xlanchen2007.10.25Linux operating systems analysis軟件中斷的概念軟件中斷的概念l信號(hào)的產(chǎn)生和處理方式跟中斷有些相似 l信號(hào)是典型的異步事件(當(dāng)然也有一些事件是同步錯(cuò)誤或異常) l大多數(shù)產(chǎn)生信號(hào)的事件對(duì)進(jìn)程而言是隨機(jī)出現(xiàn) l進(jìn)程不可能做輪詢來(lái)測(cè)試某個(gè)標(biāo)志位或者變量來(lái)判別是否發(fā)生了一個(gè)信號(hào),而是必須告訴內(nèi)核“在某個(gè)信號(hào)發(fā)生時(shí),應(yīng)該執(zhí)行如下操作”,這點(diǎn)跟中斷處理例程相似,所以也不難理解標(biāo)準(zhǔn)信號(hào)不帶參數(shù)或者是其他的信息 l跟硬件中斷一樣,任何動(dòng)作,包括終止進(jìn)程,都只能由接收到信號(hào)的進(jìn)程來(lái)執(zhí)行,
3、也就是在本進(jìn)程的上下文中執(zhí)行 xlanchen2007.10.25Linux operating systems analysis信號(hào)的作用信號(hào)的作用l使用信號(hào)的兩個(gè)主要目的是:l讓進(jìn)程知道已經(jīng)發(fā)生了一個(gè)特定的事件l強(qiáng)迫進(jìn)程執(zhí)行它自己代碼中的信號(hào)處理程序l很多應(yīng)用程序提供自己的信號(hào)處理程序l系統(tǒng)也會(huì)定義一些缺省的信號(hào)處理程序xlanchen2007.10.25Linux operating systems analysis信號(hào)的生成信號(hào)的生成l異常l當(dāng)一個(gè)進(jìn)程出現(xiàn)異常(比如試圖執(zhí)行一個(gè)非法指令,除0,浮點(diǎn)溢出等),內(nèi)核通過(guò)向進(jìn)程發(fā)送一個(gè)信號(hào)來(lái)通知進(jìn)程異常的發(fā)生 l其他進(jìn)程 l一個(gè)進(jìn)程可以通過(guò)k
4、ill或是sigsend系統(tǒng)調(diào)用向另一個(gè)進(jìn)程或一個(gè)進(jìn)出組發(fā)送信號(hào)。一個(gè)進(jìn)程也可以向自身發(fā)送信號(hào)l終端 l某些鍵盤(pán)字符如ctrl+c等會(huì)向終端的前臺(tái)進(jìn)程發(fā)送信號(hào) xlanchen2007.10.25Linux operating systems analysisl作業(yè)控制 l發(fā)送信號(hào)給那些想要讀或?qū)懡K端的后臺(tái)進(jìn)程。比如shell使用信號(hào)來(lái)管理前臺(tái)和后臺(tái)進(jìn)程l配額限制 l當(dāng)一個(gè)進(jìn)程使用超過(guò)分配給它的cpu時(shí)間或是文件大小的限制,內(nèi)核發(fā)送一個(gè)信號(hào)給這個(gè)進(jìn)程 l通知 l一個(gè)進(jìn)程也許要求能被通知某些事件的發(fā)生。比如設(shè)備已經(jīng)就緒等待I/O操作l鬧鐘 l定時(shí)器產(chǎn)生的信號(hào),由內(nèi)核發(fā)送給進(jìn)程xlanchen20
5、07.10.25Linux operating systems analysisLinux/i386中的部分信號(hào)中的部分信號(hào)xlanchen2007.10.25Linux operating systems analysis信號(hào)舉例:信號(hào)舉例: “Ctrl+c”組合鍵組合鍵l假設(shè)用戶在console下按下ctrl+c,這將產(chǎn)生終端中斷l(xiāng)tty驅(qū)動(dòng)程序能識(shí)別出這個(gè)組合鍵,并向自己的前臺(tái)進(jìn)程發(fā)送一個(gè)SIGINT信號(hào)。l當(dāng)對(duì)應(yīng)進(jìn)程被調(diào)度執(zhí)行時(shí),它將在上下文切換返回到用戶態(tài)時(shí)檢查到這個(gè)信號(hào)。l此外,通常前臺(tái)進(jìn)程就是被ctrl+c中斷的current進(jìn)程。當(dāng)進(jìn)程從中斷返回時(shí),也會(huì)檢查到這個(gè)信號(hào)。l檢查到
6、信號(hào)后,系統(tǒng)就會(huì)讓進(jìn)程執(zhí)行相應(yīng)的動(dòng)作。xlanchen2007.10.25Linux operating systems analysis信號(hào)舉例:異常信號(hào)舉例:異常l前面講過(guò),異常也是通過(guò)信號(hào)來(lái)實(shí)現(xiàn)的。l當(dāng)程序發(fā)生除0錯(cuò)誤或是有非法指令時(shí),將引起一個(gè)內(nèi)核態(tài)的trap。l內(nèi)核trap處理程序識(shí)別出這個(gè)異常并發(fā)送合適的信號(hào)到當(dāng)前進(jìn)程。l當(dāng)trap處理程序?qū)⒁祷氐接脩魬B(tài)時(shí),會(huì)檢查并發(fā)現(xiàn)信號(hào),進(jìn)程可能就會(huì)被終止。xlanchen2007.10.25Linux operating systems analysis異常處理程序異常處理程序發(fā)出的信號(hào)xlanchen2007.10.25Linux ope
7、rating systems analysis與信號(hào)相關(guān)的系統(tǒng)調(diào)用與信號(hào)相關(guān)的系統(tǒng)調(diào)用xlanchen2007.10.25Linux operating systems analysis信號(hào)傳遞的兩個(gè)不同階段信號(hào)傳遞的兩個(gè)不同階段l信號(hào)產(chǎn)生l內(nèi)核更新進(jìn)程描述符中跟信號(hào)相關(guān)的數(shù)據(jù)結(jié)構(gòu)來(lái)表示一個(gè)信號(hào)被發(fā)送給了這個(gè)進(jìn)程l信號(hào)傳遞l內(nèi)核強(qiáng)迫目標(biāo)進(jìn)程通過(guò)以下方式對(duì)信號(hào)作出反映:l或改變目標(biāo)進(jìn)程的執(zhí)行狀態(tài),l或開(kāi)始執(zhí)行一個(gè)特定的信號(hào)處理程序,l或者兩者都是xlanchen2007.10.25Linux operating systems analysis掛起信號(hào)掛起信號(hào)l已經(jīng)產(chǎn)生但還沒(méi)有傳遞的信號(hào)稱為掛起
8、信號(hào)。l任何時(shí)候,一個(gè)進(jìn)程僅存在給定類(lèi)型的一個(gè)掛起信號(hào),同一進(jìn)程同種類(lèi)型的其他信號(hào)不被排隊(duì),只被簡(jiǎn)單的丟棄。xlanchen2007.10.25Linux operating systems analysisl信號(hào)的掛起時(shí)間長(zhǎng)度往往不可預(yù)知,原因在于:l信號(hào)通常只被current進(jìn)程傳遞l進(jìn)程可以選擇阻塞某種信號(hào)。這種情況下,在取消阻塞之前進(jìn)程將不接收這個(gè)信號(hào)l當(dāng)進(jìn)程執(zhí)行一個(gè)信號(hào)處理程序函數(shù)時(shí),通常屏蔽相應(yīng)的信號(hào),即自動(dòng)阻塞這個(gè)信號(hào)直到處理程序結(jié)束。因此,所處理的信號(hào)的另一次出現(xiàn)不能中斷信號(hào)處理程序xlanchen2007.10.25Linux operating systems analys
9、is信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)l進(jìn)程以三種方式對(duì)一個(gè)信號(hào)做出應(yīng)答 1,顯式的忽略這個(gè)信號(hào)l多數(shù)信號(hào)都可以使用這種方式進(jìn)行處理。2,執(zhí)行系統(tǒng)默認(rèn)的缺省操作,可以是:lTerminate:進(jìn)程被殺死lDump:進(jìn)程被殺死,且如果可能,創(chuàng)建包含進(jìn)程上下文的可用于調(diào)試的core文件xlanchen2007.10.25Linux operating systems analysislIgnore:簡(jiǎn)單的忽略信號(hào)lStop:進(jìn)程被停止,狀態(tài)置為T(mén)ASK_STOPPEDlContinue:如果進(jìn)程被掛起,則狀態(tài)置為T(mén)ASK_RUNNING。否則忽略該信號(hào)l3,捕獲信號(hào)l為了執(zhí)行用戶希望
10、的對(duì)某個(gè)事件的處理,可以由用戶指定某個(gè)信號(hào)的處理函數(shù)。xlanchen2007.10.25Linux operating systems analysis信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)l注意1:阻塞忽略l阻塞僅僅推遲了傳遞的時(shí)間l忽略的信號(hào)總是被傳遞,但是沒(méi)有進(jìn)一步的操作l注意2:有兩種信號(hào)不可以被顯式的忽略、捕獲或阻塞:SIGKILL和SIGSTOP。因?yàn)樗鼈兿虺?jí)用戶提供一種終止或停止進(jìn)程的可靠的方法xlanchen2007.10.25Linux operating systems analysis信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號(hào)的應(yīng)答方式和響應(yīng)時(shí)機(jī)l內(nèi)核在如下時(shí)機(jī)檢查進(jìn)程的
11、信號(hào)1 ,從系統(tǒng)調(diào)用/中斷返回到用戶態(tài)之前,在ret_from_intr中執(zhí)行這個(gè)檢查l這個(gè)檢查幾乎在每個(gè)定時(shí)中斷時(shí)都發(fā)生(約10ms)l代碼在i386kernelentry.S中 2,進(jìn)程從一個(gè)可中斷的事件醒來(lái)后 xlanchen2007.10.25Linux operating systems analysis中斷返回系統(tǒng)調(diào)用返回如果有信號(hào)要處理Entry.S中部分相關(guān)的代碼中部分相關(guān)的代碼xlanchen2007.10.25Linux operating systems analysisxlanchen2007.10.25Linux operating systems analysis內(nèi)
12、核在處理信號(hào)時(shí)需要注意的地內(nèi)核在處理信號(hào)時(shí)需要注意的地方方l記住每個(gè)進(jìn)程阻塞哪些信號(hào)l當(dāng)從內(nèi)核態(tài)切換到用戶態(tài)時(shí),要檢查是否有信號(hào)到達(dá)進(jìn)程l確定是否可以忽略信號(hào)。這發(fā)生在下列條件都滿足時(shí)l目標(biāo)進(jìn)程沒(méi)有被另一個(gè)進(jìn)程跟蹤l信號(hào)沒(méi)有被阻塞l信號(hào)被目標(biāo)進(jìn)程忽略l處理這樣的信號(hào),即信號(hào)可能在進(jìn)程運(yùn)行期間的任一時(shí)刻請(qǐng)求把進(jìn)程切換到一個(gè)信號(hào)處理函數(shù),并在這個(gè)函數(shù)返回以后恢復(fù)原來(lái)進(jìn)程的執(zhí)行xlanchen2007.10.25Linux operating systems analysis與信號(hào)相關(guān)的數(shù)據(jù)結(jié)構(gòu)與信號(hào)相關(guān)的數(shù)據(jù)結(jié)構(gòu)l在進(jìn)程描述符中與信號(hào)處理相關(guān)的字段有:記錄進(jìn)程想阻塞的信號(hào)22組32位信號(hào),第一組s
13、ig0為32個(gè)標(biāo)準(zhǔn)信號(hào)記錄被掛起的信號(hào)指出掛起的信號(hào)是什么被掛起的信號(hào)的相關(guān)信息組成的隊(duì)列信號(hào)處理描述符指出共享signal_struct結(jié)構(gòu)的進(jìn)程個(gè)數(shù)每個(gè)信號(hào)的處理方法64如果有信號(hào)被掛起,就設(shè)置這個(gè)標(biāo)志,前面的entry.S就根據(jù)這個(gè)快速判斷有無(wú)掛起信號(hào),并根據(jù)這個(gè)標(biāo)志調(diào)用do_signalxlanchen2007.10.25Linux operating systems analysisl在i386體系結(jié)構(gòu)上action數(shù)組中的每一個(gè)信號(hào)的描述符包含下列域:lsa_handler或sa_sigactionl這是一個(gè)聯(lián)合,表示如何處理這個(gè)信號(hào),可能的值包括:1,SIG_DFL,即0,表示執(zhí)
14、行缺省操作2,SIG_IGN,即1,表示忽略這個(gè)信號(hào)3,指向一個(gè)信號(hào)處理程序的指針,表示按照用戶指定的程序處理xlanchen2007.10.25Linux operating systems analysislsa_flags:一個(gè)標(biāo)志集,指明與信號(hào)處理相關(guān)的一些其他信息lsa_mask:指定處理本信號(hào)時(shí),應(yīng)當(dāng)屏蔽的信號(hào)xlanchen2007.10.25Linux operating systems analysisxlanchen2007.10.25Linux operating systems analysis發(fā)送信號(hào)發(fā)送信號(hào)l內(nèi)核通過(guò)調(diào)用send_sig_info()send_sig
15、(),force_sig()force_sig_info()這幾個(gè)函數(shù)發(fā)送信號(hào)。這些函數(shù)只是更新目標(biāo)進(jìn)程的進(jìn)程描述符相關(guān)的域。但在條件滿足的情況下它們可以喚醒進(jìn)程讓目標(biāo)進(jìn)程接收信號(hào)xlanchen2007.10.25Linux operating systems analysis接收信號(hào)接收信號(hào)l內(nèi)核在返回到用戶態(tài)時(shí)調(diào)用do_signal()來(lái)處理非阻塞的掛起信號(hào):參數(shù):struct pt_regs *regs;/pt_regs結(jié)構(gòu),指向當(dāng)前進(jìn) /程內(nèi)核態(tài)堆棧中保存的寄存器sigset_t *oldset; /信號(hào)處理程序執(zhí)行時(shí)要屏蔽的 /信號(hào),實(shí)際上調(diào)用時(shí)為空xlanchen2007.10.
16、25Linux operating systems analysisldo_signal()一位一位的檢查當(dāng)前被掛起的非阻塞信號(hào),對(duì)應(yīng)于上面介紹的action結(jié)構(gòu)中指定的處理方法:l如果是SIG_IGN(忽略信號(hào))不能被忽略的信號(hào)xlanchen2007.10.25Linux operating systems analysisl如果是SIG_DFL(缺省操作)根據(jù)信號(hào)的類(lèi)型,使用switch語(yǔ)句找到對(duì)應(yīng)的缺省處理方式xlanchen2007.10.25Linux operating systems analysisl如果信號(hào)有一個(gè)專門(mén)的處理程序,do_signal就調(diào)用handle_sign
17、al()強(qiáng)迫執(zhí)行該處理程序xlanchen2007.10.25Linux operating systems analysisHandle_signall信號(hào)處理程序是用戶態(tài)進(jìn)程所定義的函數(shù),并且包含在用戶態(tài)的代碼段中l(wèi)Handle_signal運(yùn)行在內(nèi)核態(tài),而信號(hào)處理程序運(yùn)行在用戶態(tài)l問(wèn)題:1,必須返回用戶態(tài)執(zhí)行信號(hào)處理程序2,必須按照原來(lái)進(jìn)入內(nèi)核的方式返回用戶態(tài)3,一旦返回用戶態(tài),內(nèi)核堆棧就被清空,如何保存內(nèi)核堆棧的內(nèi)容xlanchen2007.10.25Linux operating systems analysislLinux采用的解決辦法:l把保存在內(nèi)核態(tài)堆棧中的上下文拷貝到當(dāng)前進(jìn)程
18、的用戶態(tài)堆棧中l(wèi)建立好信號(hào)處理程序所需的堆棧環(huán)境l當(dāng)信號(hào)處理程序運(yùn)行結(jié)束時(shí),調(diào)用sigreturn()系統(tǒng)調(diào)用把上面保存的內(nèi)核堆棧的內(nèi)容再拷貝回內(nèi)核堆棧l然后正常返回xlanchen2007.10.25Linux operating systems analysis與信號(hào)處理相關(guān)的系統(tǒng)調(diào)用與信號(hào)處理相關(guān)的系統(tǒng)調(diào)用lkill(pid, sig)系統(tǒng)調(diào)用l發(fā)送信號(hào),對(duì)應(yīng)于sys_kill()l對(duì)于pid的值1,如果大于0,發(fā)送信號(hào)給指定的進(jìn)程2,如果=0,把信號(hào)發(fā)送給同組的所有進(jìn)程3,如果=-1,把信號(hào)發(fā)送給除0號(hào)、1號(hào)以及current進(jìn)程之外的所有進(jìn)程4,如果小于-1,把信號(hào)發(fā)送給指定的進(jìn)程組中的所有的進(jìn)程xlanchen2007.10.25Linux operating systems analysisls
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025國(guó)際貿(mào)易合同
- 2025開(kāi)關(guān)插座采購(gòu)合同標(biāo)準(zhǔn)版
- 2025年度高科技企業(yè)公司股權(quán)協(xié)議書(shū)模板3篇
- 2025年度智能家居生態(tài)鏈消費(fèi)者協(xié)議3篇
- 2025年度新材料研發(fā)與應(yīng)用公司整體轉(zhuǎn)讓協(xié)議版3篇
- 2025年度醫(yī)療設(shè)備融資租賃服務(wù)合同模板3篇
- 2025年度農(nóng)村宅基地房買(mǎi)賣(mài)合同(農(nóng)村電商服務(wù)站建設(shè))
- 2025年度公租房合同(含租賃合同簽訂及備案費(fèi)用)3篇
- 2025年度環(huán)保處理設(shè)備專業(yè)維修與改造合同3篇
- 2025年度新能源汽車(chē)充電基礎(chǔ)設(shè)施合作項(xiàng)目協(xié)議書(shū)范本3篇
- DB11-T 693-2024 施工現(xiàn)場(chǎng)臨建房屋應(yīng)用技術(shù)標(biāo)準(zhǔn)
- GB/T 45089-20240~3歲嬰幼兒居家照護(hù)服務(wù)規(guī)范
- 統(tǒng)編版2024-2025學(xué)年三年級(jí)上冊(cè)語(yǔ)文期末情景試卷(含答案)
- 2024年01月11344金融風(fēng)險(xiǎn)管理期末試題答案
- 浙江省杭州市八縣區(qū)2024-2025學(xué)年高二數(shù)學(xué)上學(xué)期期末學(xué)業(yè)水平測(cè)試試題
- 民政部主管社團(tuán)管理辦法
- 工地施工臨時(shí)用水及計(jì)算
- 工作計(jì)劃酒店上半年工作總結(jié)及下半年工作計(jì)劃
- 防護(hù)設(shè)備操作手冊(cè)
- 《中小學(xué)教師職業(yè)生涯規(guī)劃與專業(yè)發(fā)展》講座
評(píng)論
0/150
提交評(píng)論