2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、信號(hào)量,中斷和時(shí)間.doc - - 52 第 6 章 信號(hào)量,中斷和時(shí)間 信號(hào)量,中斷和時(shí)間 信號(hào)量(Signal)是進(jìn)程間通訊(IPC)的一種形式——是一個(gè)進(jìn)程給另一個(gè)進(jìn)程發(fā)送信息的方法。 但是信息不可能很多——一個(gè)信號(hào)量不可能攜帶詳細(xì)的信息, 即使是傳送者的身份也不能被傳遞; 唯一能夠確定的事實(shí)是信號(hào)量的確被發(fā)送了。 (然而和經(jīng)典信號(hào)量不同,POSIX 實(shí)時(shí)信號(hào)量允許傳送稍微多一點(diǎn)的信息。 )實(shí)際上,信號(hào)量對(duì)于雙向通

2、訊是沒有用處的。還有,根據(jù)某些限定,信號(hào)量的接受者不必以任何方式作出響應(yīng),甚至可以直接忽略大部分信號(hào)量。 雖然有這么多的限制,然而信號(hào)量仍然是一種功能強(qiáng)大的十分有用的機(jī)制——勿庸置疑,這是 Unix IPC 中使用最頻繁的機(jī)制。每當(dāng)進(jìn)程退出或者廢棄一個(gè)空指針時(shí),每當(dāng)使用Ctrl+C 鍵終止程序運(yùn)行時(shí),都要傳遞信號(hào)量。 第 9 章會(huì)更詳細(xì)的討論 IPC 機(jī)制。對(duì)于本章的討論來說,信號(hào)量的內(nèi)容就足夠討論了。正如在 Linux 內(nèi)核本身的代碼

3、注釋中所說明的一樣,中斷(Interrupt)對(duì)于內(nèi)核來說和信號(hào)量是類似的。 中斷一般都是從磁盤之類的硬件設(shè)備送往內(nèi)核, 用以提示內(nèi)核該設(shè)備需要加以注意。一個(gè)重要的硬件中斷源就是定時(shí)器設(shè)備,它周期性地通知內(nèi)核已經(jīng)通過的時(shí)間。如同第 5 章中闡述的一樣,中斷也可以由用戶進(jìn)程通過軟件產(chǎn)生。 在本章中,我們首先討論一下 Linux 中信號(hào)量和中斷的實(shí)現(xiàn),最后再瀏覽一下 Linux 的時(shí)間處理方式。 雖然內(nèi)核對(duì)代碼的要求標(biāo)準(zhǔn)非常嚴(yán)格, 本章所涉

4、及的代碼仍然特別清晰明白。 本章使用的一般方法是首先介紹相關(guān)的數(shù)據(jù)結(jié)構(gòu)和它們之間的關(guān)系, 接下來討論操縱和查詢它們的函數(shù)。 鎖的概述 鎖的概述 鎖的基本思想是限制對(duì)共享資源的訪問——共享資源包括共享的文件,共享的內(nèi)存片,以及在一次只能由一個(gè) CPU 執(zhí)行的代碼段。概括的說,在單處理器上運(yùn)行的 Linux 內(nèi)核并不需要鎖,這是因?yàn)樵诰帉?Linux 內(nèi)核時(shí)就已經(jīng)注意到要盡量避免各種可能需要鎖的情況了。但是,在多處理器機(jī)器上,一個(gè)處理器有時(shí)

5、需要防止其它處理器對(duì)它的有害的介入。 include/asm-i386/spinlock.h 文件(從 12582 行開始)并不使用難看的#ifdef 把所有對(duì)鎖函數(shù)的調(diào)用封裝起來,它包含一系列對(duì)單處理器平臺(tái)(UP)基本為空的宏,然而在多處理器平臺(tái)(SMP)上這些宏將展開成為實(shí)際代碼。因而內(nèi)核的其它代碼對(duì) UP 和 SMP(當(dāng)涉及到這種特性時(shí))都是相同的,但是它們兩個(gè)的效果卻是迥然不同的。 第 10 章中涉及 SMP 的部分會(huì)對(duì)鎖做深入

6、的介紹。 但是, 由于你在代碼中將到處都能夠看到對(duì)鎖宏的調(diào)用, 特別是在本章所討論到的代碼中這一點(diǎn)尤為明顯, 所以你應(yīng)該首先對(duì)宏的用途有初步了解——以及為什么現(xiàn)在在大多數(shù)情況下我們都可以安全地將其忽略 (我們將在討論的過程中對(duì)其中的異常情況進(jìn)行說明) 。 信號(hào)量 信號(hào)量 Linux 內(nèi)核將信號(hào)量分為兩類: ? 非實(shí)時(shí)的 (Nonrealtime) ——大部分是些傳統(tǒng)的信號(hào)量, 例如 SIGSEGV, SIGHUP信號(hào)量,中斷和時(shí)間.d

7、oc - - 54 12167:sa_flags 進(jìn)一步調(diào)整信號(hào)量處理代碼所完成的工作。可能的標(biāo)志集合從 12108 行開始定義。這些標(biāo)志允許用戶代碼在信號(hào)量實(shí)例發(fā)送以后(或者保留用戶定制的操作時(shí))請(qǐng)求恢復(fù)缺省操作,等等。這一點(diǎn)在宏定義塊前面的標(biāo)簽注釋中已經(jīng)說明了。 12168:sa_restorer 是本書中所沒有涉及的一些信號(hào)量處理代碼細(xì)節(jié)所使用的。 12169:sa_mask 是一系列其它信號(hào)量的集合,進(jìn)程在處理這

8、些信號(hào)量的過程中可能需要進(jìn)行鎖定。例如,如果一個(gè)進(jìn)程在處理 SIGCHLD 的時(shí)候希望鎖定 SIGHUP 和SIGINT,進(jìn)程的第 SIGCHLD 個(gè) sa_mask 就會(huì)對(duì)與 SIGHUP 和 SIGINT 相關(guān)的位進(jìn)行置位。 siginfo_t 11851:struct siginfo(也稱為 siginfo_t)是伴隨著信號(hào)量,特別是在實(shí)時(shí)信號(hào)量,所傳遞的額外信息。 11852:勿庸置疑,si_signo 是信號(hào)量的數(shù)目。 118

9、53:si_errno 應(yīng)該是信號(hào)量傳遞時(shí)傳送者的 errno 的值,這樣接收者就可以對(duì)它進(jìn)行檢測。內(nèi)核本身并不關(guān)心這個(gè)值;當(dāng)在某些情況下需要設(shè)置這個(gè)值時(shí),內(nèi)核將其設(shè)置為 0。我推測如果這樣,即使調(diào)用者沒有設(shè)置這個(gè)值,它們?nèi)匀粫?huì)發(fā)現(xiàn) si_error 的值被設(shè)為已知狀態(tài)。 11854:si_code 記錄了信號(hào)量的來源(不是發(fā)送者的進(jìn)程 ID 號(hào),也就是 PID——它在別處記錄) 。有效的信號(hào)量來源在 11915 行及其隨后部分使用宏進(jìn)

10、行了定義。 11856:該結(jié)構(gòu)的最后一部分是 union 類型的;該 union 類型依賴于 si_code 的值。 11857:union 的第一部分是_pad,它將 siginfo_t 的長度擴(kuò)展填充為 128*sizeof(int)字節(jié)(在 x86 平臺(tái)上一共是 512 個(gè)字節(jié)) 。留意一下這個(gè)數(shù)組的大小,也就是SI_PAD_SIZE (11849 行) , 代表了該結(jié)構(gòu)的前三個(gè)成員——如果增加了更多的成員,SI_PAD_SIZE

11、 就需要進(jìn)行相應(yīng)修改。 struct signal_queue 17132:struct signal_queue 結(jié)構(gòu)用來確保所有的實(shí)時(shí)信號(hào)量都被正確傳送了,如果可能,每一個(gè)都包含著額外信息(siginfo_t) 。如同后面你將會(huì)看到的一樣,內(nèi)核會(huì)為每個(gè)進(jìn)程都設(shè)置一個(gè)隊(duì)列,用來存放該進(jìn)程的掛起的實(shí)時(shí)信號(hào)量。這個(gè)隊(duì)列類型本身很小,僅僅由一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針和 siginfo_t 本身組成。 應(yīng)用函數(shù) 應(yīng)用函數(shù) 有關(guān)信號(hào)量的一個(gè)最重要

12、的數(shù)據(jù)結(jié)構(gòu)是 sigset_t,它是由一系列在 include/linux/signal.h文件中定義的簡單函數(shù)所操縱的, 這些函數(shù)的定義從 17123 行開始。 在 x86 平臺(tái)上, 這些相同的函數(shù)可以——而且已經(jīng)——使用匯編語言更加有效的實(shí)現(xiàn)了;這些更高效的版本從12204 行開始。 (m68k 端口是唯一一個(gè)例外的端口,它使用體系結(jié)構(gòu)特有的代碼實(shí)現(xiàn)。 )由于平臺(tái)無關(guān)的版本和 x86 特有的版本都很重要,我們會(huì)對(duì)兩者都加以介紹。 平

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論