版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、信號量,中斷和時間.doc - - 52 第 6 章 信號量,中斷和時間 信號量,中斷和時間 信號量(Signal)是進程間通訊(IPC)的一種形式——是一個進程給另一個進程發(fā)送信息的方法。 但是信息不可能很多——一個信號量不可能攜帶詳細的信息, 即使是傳送者的身份也不能被傳遞; 唯一能夠確定的事實是信號量的確被發(fā)送了。 (然而和經(jīng)典信號量不同,POSIX 實時信號量允許傳送稍微多一點的信息。 )實際上,信號量對于雙向通
2、訊是沒有用處的。還有,根據(jù)某些限定,信號量的接受者不必以任何方式作出響應(yīng),甚至可以直接忽略大部分信號量。 雖然有這么多的限制,然而信號量仍然是一種功能強大的十分有用的機制——勿庸置疑,這是 Unix IPC 中使用最頻繁的機制。每當(dāng)進程退出或者廢棄一個空指針時,每當(dāng)使用Ctrl+C 鍵終止程序運行時,都要傳遞信號量。 第 9 章會更詳細的討論 IPC 機制。對于本章的討論來說,信號量的內(nèi)容就足夠討論了。正如在 Linux 內(nèi)核本身的代碼
3、注釋中所說明的一樣,中斷(Interrupt)對于內(nèi)核來說和信號量是類似的。 中斷一般都是從磁盤之類的硬件設(shè)備送往內(nèi)核, 用以提示內(nèi)核該設(shè)備需要加以注意。一個重要的硬件中斷源就是定時器設(shè)備,它周期性地通知內(nèi)核已經(jīng)通過的時間。如同第 5 章中闡述的一樣,中斷也可以由用戶進程通過軟件產(chǎn)生。 在本章中,我們首先討論一下 Linux 中信號量和中斷的實現(xiàn),最后再瀏覽一下 Linux 的時間處理方式。 雖然內(nèi)核對代碼的要求標(biāo)準(zhǔn)非常嚴(yán)格, 本章所涉
4、及的代碼仍然特別清晰明白。 本章使用的一般方法是首先介紹相關(guān)的數(shù)據(jù)結(jié)構(gòu)和它們之間的關(guān)系, 接下來討論操縱和查詢它們的函數(shù)。 鎖的概述 鎖的概述 鎖的基本思想是限制對共享資源的訪問——共享資源包括共享的文件,共享的內(nèi)存片,以及在一次只能由一個 CPU 執(zhí)行的代碼段。概括的說,在單處理器上運行的 Linux 內(nèi)核并不需要鎖,這是因為在編寫 Linux 內(nèi)核時就已經(jīng)注意到要盡量避免各種可能需要鎖的情況了。但是,在多處理器機器上,一個處理器有時
5、需要防止其它處理器對它的有害的介入。 include/asm-i386/spinlock.h 文件(從 12582 行開始)并不使用難看的#ifdef 把所有對鎖函數(shù)的調(diào)用封裝起來,它包含一系列對單處理器平臺(UP)基本為空的宏,然而在多處理器平臺(SMP)上這些宏將展開成為實際代碼。因而內(nèi)核的其它代碼對 UP 和 SMP(當(dāng)涉及到這種特性時)都是相同的,但是它們兩個的效果卻是迥然不同的。 第 10 章中涉及 SMP 的部分會對鎖做深入
6、的介紹。 但是, 由于你在代碼中將到處都能夠看到對鎖宏的調(diào)用, 特別是在本章所討論到的代碼中這一點尤為明顯, 所以你應(yīng)該首先對宏的用途有初步了解——以及為什么現(xiàn)在在大多數(shù)情況下我們都可以安全地將其忽略 (我們將在討論的過程中對其中的異常情況進行說明) 。 信號量 信號量 Linux 內(nèi)核將信號量分為兩類: ? 非實時的 (Nonrealtime) ——大部分是些傳統(tǒng)的信號量, 例如 SIGSEGV, SIGHUP信號量,中斷和時間.d
7、oc - - 54 12167:sa_flags 進一步調(diào)整信號量處理代碼所完成的工作??赡艿臉?biāo)志集合從 12108 行開始定義。這些標(biāo)志允許用戶代碼在信號量實例發(fā)送以后(或者保留用戶定制的操作時)請求恢復(fù)缺省操作,等等。這一點在宏定義塊前面的標(biāo)簽注釋中已經(jīng)說明了。 12168:sa_restorer 是本書中所沒有涉及的一些信號量處理代碼細節(jié)所使用的。 12169:sa_mask 是一系列其它信號量的集合,進程在處理這
8、些信號量的過程中可能需要進行鎖定。例如,如果一個進程在處理 SIGCHLD 的時候希望鎖定 SIGHUP 和SIGINT,進程的第 SIGCHLD 個 sa_mask 就會對與 SIGHUP 和 SIGINT 相關(guān)的位進行置位。 siginfo_t 11851:struct siginfo(也稱為 siginfo_t)是伴隨著信號量,特別是在實時信號量,所傳遞的額外信息。 11852:勿庸置疑,si_signo 是信號量的數(shù)目。 118
9、53:si_errno 應(yīng)該是信號量傳遞時傳送者的 errno 的值,這樣接收者就可以對它進行檢測。內(nèi)核本身并不關(guān)心這個值;當(dāng)在某些情況下需要設(shè)置這個值時,內(nèi)核將其設(shè)置為 0。我推測如果這樣,即使調(diào)用者沒有設(shè)置這個值,它們?nèi)匀粫l(fā)現(xiàn) si_error 的值被設(shè)為已知狀態(tài)。 11854:si_code 記錄了信號量的來源(不是發(fā)送者的進程 ID 號,也就是 PID——它在別處記錄) 。有效的信號量來源在 11915 行及其隨后部分使用宏進
10、行了定義。 11856:該結(jié)構(gòu)的最后一部分是 union 類型的;該 union 類型依賴于 si_code 的值。 11857:union 的第一部分是_pad,它將 siginfo_t 的長度擴展填充為 128*sizeof(int)字節(jié)(在 x86 平臺上一共是 512 個字節(jié)) 。留意一下這個數(shù)組的大小,也就是SI_PAD_SIZE (11849 行) , 代表了該結(jié)構(gòu)的前三個成員——如果增加了更多的成員,SI_PAD_SIZE
11、 就需要進行相應(yīng)修改。 struct signal_queue 17132:struct signal_queue 結(jié)構(gòu)用來確保所有的實時信號量都被正確傳送了,如果可能,每一個都包含著額外信息(siginfo_t) 。如同后面你將會看到的一樣,內(nèi)核會為每個進程都設(shè)置一個隊列,用來存放該進程的掛起的實時信號量。這個隊列類型本身很小,僅僅由一個指向下一個節(jié)點的指針和 siginfo_t 本身組成。 應(yīng)用函數(shù) 應(yīng)用函數(shù) 有關(guān)信號量的一個最重要
12、的數(shù)據(jù)結(jié)構(gòu)是 sigset_t,它是由一系列在 include/linux/signal.h文件中定義的簡單函數(shù)所操縱的, 這些函數(shù)的定義從 17123 行開始。 在 x86 平臺上, 這些相同的函數(shù)可以——而且已經(jīng)——使用匯編語言更加有效的實現(xiàn)了;這些更高效的版本從12204 行開始。 (m68k 端口是唯一一個例外的端口,它使用體系結(jié)構(gòu)特有的代碼實現(xiàn)。 )由于平臺無關(guān)的版本和 x86 特有的版本都很重要,我們會對兩者都加以介紹。 平
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信號量的實現(xiàn)和應(yīng)用
- 信號量實驗報告
- 操作系統(tǒng)課程設(shè)計---信號量的操作
- 基于信號量特征的模擬電路故障字典法研究.pdf
- 操作系統(tǒng)課程設(shè)計--基于linux的實現(xiàn)進程的信號量互斥申請
- 基于linux的實現(xiàn)進程的信號量互斥申請操作系統(tǒng)課程設(shè)計
- 基于linux的實現(xiàn)進程的信號量互斥申請操作系統(tǒng)課程設(shè)計1
- 離散時間信號和離散時間系統(tǒng)..
- 實時嵌入式操作系統(tǒng)中信號量管理的硬件化設(shè)計與實現(xiàn).pdf
- 第八章中斷和信號機制
- 基于信號量化的系統(tǒng)參數(shù)辨識方法研究.pdf
- 基于linux的實現(xiàn)進程的信號量互斥申請操作系統(tǒng)課程設(shè)計說明書2
- 基于信號量化和Delta算子模型的系統(tǒng)分析與優(yōu)化.pdf
- bios和dos中斷
- 《操作系統(tǒng)》課程設(shè)計--基于信號量與pv操作同步機制的讀者寫者問題的設(shè)計與實現(xiàn)
- dos和bios中斷
- 利用信號量,pv,管程等解決生產(chǎn)者消費者問題——操作系統(tǒng)原理課程設(shè)計提優(yōu)論文
- 輪速信號中斷處理流程圖.DWG
- bios和dos中斷84543
- 輪速信號中斷處理流程圖.DWG
評論
0/150
提交評論