Linux操作系統(tǒng)分析PPT課件_第1頁
Linux操作系統(tǒng)分析PPT課件_第2頁
Linux操作系統(tǒng)分析PPT課件_第3頁
Linux操作系統(tǒng)分析PPT課件_第4頁
Linux操作系統(tǒng)分析PPT課件_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Linux操作系統(tǒng)分析操作系統(tǒng)分析主講:陳香蘭助教:賈永泉、毛熠璐3606864-83(西區(qū)電三421)Autumn 2007Linux中的信號中的信號xlanchen2007.10.25xlanchen2007.10.25Linux operating systems analysis信號信號l信號在最早的Unix系統(tǒng)中就已經(jīng)被引入了,用于在用戶態(tài)進(jìn)程間通信。l內(nèi)核也用信號通知進(jìn)程系統(tǒng)所發(fā)生的事情xlanchen2007.10.25Linux operating systems analysis信號信號l信號是很短的消息l標(biāo)準(zhǔn)信號l標(biāo)準(zhǔn)信號沒有給參數(shù)、消息或是其他相隨的信息留有空間l通常使用

2、一個(gè)數(shù)字來標(biāo)識一個(gè)信號l信號可以被發(fā)送到一個(gè)進(jìn)程或一組進(jìn)程。xlanchen2007.10.25Linux operating systems analysis軟件中斷的概念軟件中斷的概念l信號的產(chǎn)生和處理方式跟中斷有些相似 l信號是典型的異步事件(當(dāng)然也有一些事件是同步錯(cuò)誤或異常) l大多數(shù)產(chǎn)生信號的事件對進(jìn)程而言是隨機(jī)出現(xiàn) l進(jìn)程不可能做輪詢來測試某個(gè)標(biāo)志位或者變量來判別是否發(fā)生了一個(gè)信號,而是必須告訴內(nèi)核“在某個(gè)信號發(fā)生時(shí),應(yīng)該執(zhí)行如下操作”,這點(diǎn)跟中斷處理例程相似,所以也不難理解標(biāo)準(zhǔn)信號不帶參數(shù)或者是其他的信息 l跟硬件中斷一樣,任何動(dòng)作,包括終止進(jìn)程,都只能由接收到信號的進(jìn)程來執(zhí)行,

3、也就是在本進(jìn)程的上下文中執(zhí)行 xlanchen2007.10.25Linux operating systems analysis信號的作用信號的作用l使用信號的兩個(gè)主要目的是:l讓進(jìn)程知道已經(jīng)發(fā)生了一個(gè)特定的事件l強(qiáng)迫進(jìn)程執(zhí)行它自己代碼中的信號處理程序l很多應(yīng)用程序提供自己的信號處理程序l系統(tǒng)也會定義一些缺省的信號處理程序xlanchen2007.10.25Linux operating systems analysis信號的生成信號的生成l異常l當(dāng)一個(gè)進(jìn)程出現(xiàn)異常(比如試圖執(zhí)行一個(gè)非法指令,除0,浮點(diǎn)溢出等),內(nèi)核通過向進(jìn)程發(fā)送一個(gè)信號來通知進(jìn)程異常的發(fā)生 l其他進(jìn)程 l一個(gè)進(jìn)程可以通過k

4、ill或是sigsend系統(tǒng)調(diào)用向另一個(gè)進(jìn)程或一個(gè)進(jìn)出組發(fā)送信號。一個(gè)進(jìn)程也可以向自身發(fā)送信號l終端 l某些鍵盤字符如ctrl+c等會向終端的前臺進(jìn)程發(fā)送信號 xlanchen2007.10.25Linux operating systems analysisl作業(yè)控制 l發(fā)送信號給那些想要讀或?qū)懡K端的后臺進(jìn)程。比如shell使用信號來管理前臺和后臺進(jìn)程l配額限制 l當(dāng)一個(gè)進(jìn)程使用超過分配給它的cpu時(shí)間或是文件大小的限制,內(nèi)核發(fā)送一個(gè)信號給這個(gè)進(jìn)程 l通知 l一個(gè)進(jìn)程也許要求能被通知某些事件的發(fā)生。比如設(shè)備已經(jīng)就緒等待I/O操作l鬧鐘 l定時(shí)器產(chǎn)生的信號,由內(nèi)核發(fā)送給進(jìn)程xlanchen20

5、07.10.25Linux operating systems analysisLinux/i386中的部分信號中的部分信號xlanchen2007.10.25Linux operating systems analysis信號舉例:信號舉例: “Ctrl+c”組合鍵組合鍵l假設(shè)用戶在console下按下ctrl+c,這將產(chǎn)生終端中斷l(xiāng)tty驅(qū)動(dòng)程序能識別出這個(gè)組合鍵,并向自己的前臺進(jìn)程發(fā)送一個(gè)SIGINT信號。l當(dāng)對應(yīng)進(jìn)程被調(diào)度執(zhí)行時(shí),它將在上下文切換返回到用戶態(tài)時(shí)檢查到這個(gè)信號。l此外,通常前臺進(jìn)程就是被ctrl+c中斷的current進(jìn)程。當(dāng)進(jìn)程從中斷返回時(shí),也會檢查到這個(gè)信號。l檢查到

6、信號后,系統(tǒng)就會讓進(jìn)程執(zhí)行相應(yīng)的動(dòng)作。xlanchen2007.10.25Linux operating systems analysis信號舉例:異常信號舉例:異常l前面講過,異常也是通過信號來實(shí)現(xiàn)的。l當(dāng)程序發(fā)生除0錯(cuò)誤或是有非法指令時(shí),將引起一個(gè)內(nèi)核態(tài)的trap。l內(nèi)核trap處理程序識別出這個(gè)異常并發(fā)送合適的信號到當(dāng)前進(jìn)程。l當(dāng)trap處理程序?qū)⒁祷氐接脩魬B(tài)時(shí),會檢查并發(fā)現(xiàn)信號,進(jìn)程可能就會被終止。xlanchen2007.10.25Linux operating systems analysis異常處理程序異常處理程序發(fā)出的信號xlanchen2007.10.25Linux ope

7、rating systems analysis與信號相關(guān)的系統(tǒng)調(diào)用與信號相關(guān)的系統(tǒng)調(diào)用xlanchen2007.10.25Linux operating systems analysis信號傳遞的兩個(gè)不同階段信號傳遞的兩個(gè)不同階段l信號產(chǎn)生l內(nèi)核更新進(jìn)程描述符中跟信號相關(guān)的數(shù)據(jù)結(jié)構(gòu)來表示一個(gè)信號被發(fā)送給了這個(gè)進(jìn)程l信號傳遞l內(nèi)核強(qiáng)迫目標(biāo)進(jìn)程通過以下方式對信號作出反映:l或改變目標(biāo)進(jìn)程的執(zhí)行狀態(tài),l或開始執(zhí)行一個(gè)特定的信號處理程序,l或者兩者都是xlanchen2007.10.25Linux operating systems analysis掛起信號掛起信號l已經(jīng)產(chǎn)生但還沒有傳遞的信號稱為掛起

8、信號。l任何時(shí)候,一個(gè)進(jìn)程僅存在給定類型的一個(gè)掛起信號,同一進(jìn)程同種類型的其他信號不被排隊(duì),只被簡單的丟棄。xlanchen2007.10.25Linux operating systems analysisl信號的掛起時(shí)間長度往往不可預(yù)知,原因在于:l信號通常只被current進(jìn)程傳遞l進(jìn)程可以選擇阻塞某種信號。這種情況下,在取消阻塞之前進(jìn)程將不接收這個(gè)信號l當(dāng)進(jìn)程執(zhí)行一個(gè)信號處理程序函數(shù)時(shí),通常屏蔽相應(yīng)的信號,即自動(dòng)阻塞這個(gè)信號直到處理程序結(jié)束。因此,所處理的信號的另一次出現(xiàn)不能中斷信號處理程序xlanchen2007.10.25Linux operating systems analys

9、is信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)l進(jìn)程以三種方式對一個(gè)信號做出應(yīng)答 1,顯式的忽略這個(gè)信號l多數(shù)信號都可以使用這種方式進(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:簡單的忽略信號lStop:進(jìn)程被停止,狀態(tài)置為TASK_STOPPEDlContinue:如果進(jìn)程被掛起,則狀態(tài)置為TASK_RUNNING。否則忽略該信號l3,捕獲信號l為了執(zhí)行用戶希望

10、的對某個(gè)事件的處理,可以由用戶指定某個(gè)信號的處理函數(shù)。xlanchen2007.10.25Linux operating systems analysis信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)l注意1:阻塞忽略l阻塞僅僅推遲了傳遞的時(shí)間l忽略的信號總是被傳遞,但是沒有進(jìn)一步的操作l注意2:有兩種信號不可以被顯式的忽略、捕獲或阻塞:SIGKILL和SIGSTOP。因?yàn)樗鼈兿虺売脩籼峁┮环N終止或停止進(jìn)程的可靠的方法xlanchen2007.10.25Linux operating systems analysis信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)信號的應(yīng)答方式和響應(yīng)時(shí)機(jī)l內(nèi)核在如下時(shí)機(jī)檢查進(jìn)程的

11、信號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è)可中斷的事件醒來后 xlanchen2007.10.25Linux operating systems analysis中斷返回系統(tǒng)調(diào)用返回如果有信號要處理Entry.S中部分相關(guān)的代碼中部分相關(guān)的代碼xlanchen2007.10.25Linux operating systems analysisxlanchen2007.10.25Linux operating systems analysis內(nèi)

12、核在處理信號時(shí)需要注意的地內(nèi)核在處理信號時(shí)需要注意的地方方l記住每個(gè)進(jìn)程阻塞哪些信號l當(dāng)從內(nèi)核態(tài)切換到用戶態(tài)時(shí),要檢查是否有信號到達(dá)進(jìn)程l確定是否可以忽略信號。這發(fā)生在下列條件都滿足時(shí)l目標(biāo)進(jìn)程沒有被另一個(gè)進(jìn)程跟蹤l信號沒有被阻塞l信號被目標(biāo)進(jìn)程忽略l處理這樣的信號,即信號可能在進(jìn)程運(yùn)行期間的任一時(shí)刻請求把進(jìn)程切換到一個(gè)信號處理函數(shù),并在這個(gè)函數(shù)返回以后恢復(fù)原來進(jìn)程的執(zhí)行xlanchen2007.10.25Linux operating systems analysis與信號相關(guān)的數(shù)據(jù)結(jié)構(gòu)與信號相關(guān)的數(shù)據(jù)結(jié)構(gòu)l在進(jìn)程描述符中與信號處理相關(guān)的字段有:記錄進(jìn)程想阻塞的信號22組32位信號,第一組s

13、ig0為32個(gè)標(biāo)準(zhǔn)信號記錄被掛起的信號指出掛起的信號是什么被掛起的信號的相關(guān)信息組成的隊(duì)列信號處理描述符指出共享signal_struct結(jié)構(gòu)的進(jìn)程個(gè)數(shù)每個(gè)信號的處理方法64如果有信號被掛起,就設(shè)置這個(gè)標(biāo)志,前面的entry.S就根據(jù)這個(gè)快速判斷有無掛起信號,并根據(jù)這個(gè)標(biāo)志調(diào)用do_signalxlanchen2007.10.25Linux operating systems analysisl在i386體系結(jié)構(gòu)上action數(shù)組中的每一個(gè)信號的描述符包含下列域:lsa_handler或sa_sigactionl這是一個(gè)聯(lián)合,表示如何處理這個(gè)信號,可能的值包括:1,SIG_DFL,即0,表示執(zhí)

14、行缺省操作2,SIG_IGN,即1,表示忽略這個(gè)信號3,指向一個(gè)信號處理程序的指針,表示按照用戶指定的程序處理xlanchen2007.10.25Linux operating systems analysislsa_flags:一個(gè)標(biāo)志集,指明與信號處理相關(guān)的一些其他信息lsa_mask:指定處理本信號時(shí),應(yīng)當(dāng)屏蔽的信號xlanchen2007.10.25Linux operating systems analysisxlanchen2007.10.25Linux operating systems analysis發(fā)送信號發(fā)送信號l內(nèi)核通過調(diào)用send_sig_info()send_sig

15、(),force_sig()force_sig_info()這幾個(gè)函數(shù)發(fā)送信號。這些函數(shù)只是更新目標(biāo)進(jìn)程的進(jìn)程描述符相關(guān)的域。但在條件滿足的情況下它們可以喚醒進(jìn)程讓目標(biāo)進(jìn)程接收信號xlanchen2007.10.25Linux operating systems analysis接收信號接收信號l內(nèi)核在返回到用戶態(tài)時(shí)調(diào)用do_signal()來處理非阻塞的掛起信號:參數(shù):struct pt_regs *regs;/pt_regs結(jié)構(gòu),指向當(dāng)前進(jìn) /程內(nèi)核態(tài)堆棧中保存的寄存器sigset_t *oldset; /信號處理程序執(zhí)行時(shí)要屏蔽的 /信號,實(shí)際上調(diào)用時(shí)為空xlanchen2007.10.

16、25Linux operating systems analysisldo_signal()一位一位的檢查當(dāng)前被掛起的非阻塞信號,對應(yīng)于上面介紹的action結(jié)構(gòu)中指定的處理方法:l如果是SIG_IGN(忽略信號)不能被忽略的信號xlanchen2007.10.25Linux operating systems analysisl如果是SIG_DFL(缺省操作)根據(jù)信號的類型,使用switch語句找到對應(yīng)的缺省處理方式xlanchen2007.10.25Linux operating systems analysisl如果信號有一個(gè)專門的處理程序,do_signal就調(diào)用handle_sign

17、al()強(qiáng)迫執(zhí)行該處理程序xlanchen2007.10.25Linux operating systems analysisHandle_signall信號處理程序是用戶態(tài)進(jìn)程所定義的函數(shù),并且包含在用戶態(tài)的代碼段中l(wèi)Handle_signal運(yùn)行在內(nèi)核態(tài),而信號處理程序運(yùn)行在用戶態(tài)l問題:1,必須返回用戶態(tài)執(zhí)行信號處理程序2,必須按照原來進(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)建立好信號處理程序所需的堆棧環(huán)境l當(dāng)信號處理程序運(yùn)行結(jié)束時(shí),調(diào)用sigreturn()系統(tǒng)調(diào)用把上面保存的內(nèi)核堆棧的內(nèi)容再拷貝回內(nèi)核堆棧l然后正常返回xlanchen2007.10.25Linux operating systems analysis與信號處理相關(guān)的系統(tǒng)調(diào)用與信號處理相關(guān)的系統(tǒng)調(diào)用lkill(pid, sig)系統(tǒng)調(diào)用l發(fā)送信號,對應(yīng)于sys_kill()l對于pid的值1,如果大于0,發(fā)送信號給指定的進(jìn)程2,如果=0,把信號發(fā)送給同組的所有進(jìn)程3,如果=-1,把信號發(fā)送給除0號、1號以及current進(jìn)程之外的所有進(jìn)程4,如果小于-1,把信號發(fā)送給指定的進(jìn)程組中的所有的進(jìn)程xlanchen2007.10.25Linux operating systems analysisls

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論