05Linux系統(tǒng)內(nèi)核機(jī)制.ppt_第1頁
05Linux系統(tǒng)內(nèi)核機(jī)制.ppt_第2頁
05Linux系統(tǒng)內(nèi)核機(jī)制.ppt_第3頁
05Linux系統(tǒng)內(nèi)核機(jī)制.ppt_第4頁
05Linux系統(tǒng)內(nèi)核機(jī)制.ppt_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、LINUX系統(tǒng)內(nèi)核機(jī)制,武漢大學(xué)計算機(jī)學(xué)院 鄭鵬 Email:,系統(tǒng)內(nèi)核機(jī)制,介紹Linux系統(tǒng)內(nèi)核提供的機(jī)制,以便系統(tǒng)內(nèi)核中的各個部分可以有效地協(xié)作。,Bottom Half處理,有時在系統(tǒng)內(nèi)核中,也許不想處理任何任務(wù)。例如在一個中斷處理過程中,當(dāng)發(fā)生一個中斷時,處理器停止正在處理的工作,同時操作系統(tǒng)將中斷發(fā)送到相應(yīng)的設(shè)備驅(qū)動程序。但設(shè)備驅(qū)動程序不能花費(fèi)太多的時間來處理中斷,因為在這期間系統(tǒng)將不能做任何的工作,所以一些工作可以以后再進(jìn)行處理。bottom half處理程序正是用來實現(xiàn)此功能的。下圖顯示了內(nèi)核中有關(guān)bottom half處理的數(shù)據(jù)結(jié)構(gòu)。,Bottom Half處理,Bottom

2、 Half 數(shù)據(jù)結(jié)構(gòu)示意圖,Bottom Half處理,系統(tǒng)內(nèi)核中可以有多達(dá)32個不同的bottom half 處理程序。bh_base中保存著指向每一個bottom half處理程序的指針。bh_active 和bh_mask根據(jù)安裝和活動狀態(tài)進(jìn)行設(shè)置。如果bh_active的第N位置位,那么bh_base中的第N個元素將包含bottom half處理程序的地址。如果bh_active的第N位置位,那么第N個bottom half處理程序就可以在調(diào)度程序認(rèn)為合適的時候調(diào)用它。一般情況下, bottom half處理程序都有一個和它們關(guān)聯(lián)的任務(wù)列表。,Bottom Half處理,一些內(nèi)核的bo

3、ttom half處理程序和設(shè)備有關(guān),但以下幾個卻較為通用: 1 . timer:當(dāng)系統(tǒng)中的周期計時器中斷時,此處理程序?qū)?biāo)記為活動狀態(tài)。它用來驅(qū)動內(nèi)核中的計時器隊列機(jī)制。 2. Console:用于處理有關(guān)控制臺的信息。 3. Tqueue:用于處理有關(guān)tty 信息。 4. Net:用于處理一般的網(wǎng)絡(luò)問題。 5. Immediate:這是一個通用的處理程序,可以被多個設(shè)備驅(qū)動同時使用。,Bottom Half處理,當(dāng)設(shè)備驅(qū)動程序或內(nèi)核的其他部分需要把一些工作等待以后完成時,它將會將工作添加到相應(yīng)的系統(tǒng)隊列中,例如timer 隊列,然后通知內(nèi)核需要做bottom half處理。它通過將bh_a

4、ctive中適當(dāng)?shù)奈恢?而通知內(nèi)核。如果驅(qū)動程序?qū)⒁恍┕ぷ鞣湃肓薸mmediate隊列中,它將會把bh_active的第8位置1,這樣immediate bottom half處理程序就可以運(yùn)行和處理它了。在每一次系統(tǒng)調(diào)用結(jié)束之前,系統(tǒng)內(nèi)核都將會查看bh_active。如果有任何的一位被置位,內(nèi)核將會調(diào)用相應(yīng)的bottom half處理程序。檢查的順序是先檢查位0,然后是位1,以此類推直到位3 1。,任務(wù)隊列,任務(wù)隊列是系統(tǒng)內(nèi)核將任務(wù)推遲到以后再做的方法。Linux系統(tǒng)有一個機(jī)制可以把任務(wù)放入到隊列中等待以后處理。 任務(wù)隊列通常和bottom half處理程序一同使用,例如當(dāng)timer bot

5、tom halfe處理程序運(yùn)行時,系統(tǒng)將處理計時器任務(wù)隊列。一個任務(wù)隊列就是一個簡單的數(shù)據(jù)結(jié)構(gòu),如下圖所示。它是一個由tq_struct數(shù)據(jù)結(jié)構(gòu)組成的鏈表,每一個數(shù)據(jù)結(jié)構(gòu)都包含處理程序的地址和指向相關(guān)數(shù)據(jù)的指針。,任務(wù)隊列,當(dāng)系統(tǒng)處理任務(wù)隊列中的任務(wù)時,系統(tǒng)內(nèi)核將調(diào)用處理程序,同時內(nèi)核傳遞給處理程序一個指向數(shù)據(jù)的指針。 系統(tǒng)內(nèi)核中的任何東西,例如設(shè)備驅(qū)動程序,都可以創(chuàng)建和使用任務(wù)隊列,但系統(tǒng)內(nèi)核只創(chuàng)建和管理三個任務(wù)隊列:,任務(wù)隊列,1. Timer:此隊列中的任務(wù)將會在下一個系統(tǒng)時鐘時執(zhí)行。每次系統(tǒng)時鐘開始的時候,系統(tǒng)內(nèi)核都要檢查隊列中是否含有任何的入口,如果有的話,內(nèi)核就將timer 隊列b

6、ottom half處理程序設(shè)置為活動的。當(dāng)調(diào)度進(jìn)程下一次運(yùn)行時, timer 隊列bottom half處理程序和其他的bottom half處理程序?qū)\(yùn)行。 2. Immediate:此隊列bottom half處理程序的優(yōu)先權(quán)要比timer 隊列bottom half處理程序的優(yōu)先權(quán)低,所以將會在稍后運(yùn)行。 3. Scheduler:此隊列由調(diào)度程序直接處理。它用來支持系統(tǒng)中其他的任務(wù)隊列。當(dāng)系統(tǒng)內(nèi)核處理任務(wù)隊列時,隊列中的第一個元素的指針將會從隊列中移走,并代以空指針。事實上,這種移走隊列中元素的操作是自動的,并且是不能中斷的。然后系統(tǒng)內(nèi)核將輪流調(diào)用隊列中每一個元素的處理程序。,計時

7、器,操作系統(tǒng)需要能夠調(diào)度可能在將來發(fā)生的事件,所以系統(tǒng)中需要存在一種機(jī)制,使得事件在較為精確的時間調(diào)度運(yùn)行。任何一個希望支持操作系統(tǒng)的處理器都應(yīng)該有一個可編程的內(nèi)部時鐘,可以周期性地中斷處理器。這就像一個節(jié)拍器一樣可以協(xié)調(diào)系統(tǒng)中的各個任務(wù)。 Linux系統(tǒng)中有兩種系統(tǒng)時鐘,后圖顯示了這兩種機(jī)制。 第一種機(jī)制是一種老的系統(tǒng)時鐘機(jī)制,它是一個包括3 2個指針的靜態(tài)數(shù)組,每一個指針都指向一個timer_struct數(shù)據(jù)結(jié)構(gòu),并且還有一個timer_active來標(biāo)識活動的系統(tǒng)時鐘。 第二種系統(tǒng)時鐘機(jī)制是一個timer_list數(shù)據(jù)結(jié)構(gòu)的鏈表,它以失效的時限按升序排列。,計時器,系統(tǒng)時鐘結(jié)構(gòu)示意圖,等

8、待隊列,系統(tǒng)中經(jīng)常發(fā)生進(jìn)程需要等待系統(tǒng)資源的情況。例如,進(jìn)程可能需要文件系統(tǒng)中描述目錄的VFS 索引節(jié)點(diǎn),但該索引節(jié)點(diǎn)并不在系統(tǒng)的緩沖區(qū)緩存中。在這種情況下,進(jìn)程必須等到系統(tǒng)內(nèi)核將索引節(jié)點(diǎn)從物理設(shè)備中讀取到緩沖區(qū)緩存中才能繼續(xù)運(yùn)行。 Linux系統(tǒng)內(nèi)核使用了一個簡單的數(shù)據(jù)結(jié)構(gòu),它包括一個指向進(jìn)程task_struct的指針和一個指向隊列中下一個元素的指針。當(dāng)進(jìn)程添加到等待隊列的末端時,它們或者是可以中斷的,或者是不可以中斷的。當(dāng)系統(tǒng)內(nèi)核處理等待隊列時,等待隊列中的每一個進(jìn)程都被設(shè)置成RUNNING狀態(tài)。當(dāng)?shù)却犃兄械倪M(jìn)程可以被調(diào)度運(yùn)行時,系統(tǒng)內(nèi)核所做的第一件事就是把進(jìn)程從等待隊列中移走。等待隊

9、列可以用于同步系統(tǒng)資源的存取, Linux系統(tǒng)內(nèi)核也常常使用它來實現(xiàn)信號量。,信號量,信號量用于保護(hù)系統(tǒng)中關(guān)鍵的代碼或者數(shù)據(jù)結(jié)構(gòu)。應(yīng)當(dāng)注意的是,每一次對關(guān)鍵數(shù)據(jù),例如VFS索引節(jié)點(diǎn)的存取,都是由系統(tǒng)內(nèi)核代表某一個進(jìn)程來完成的。允許一個進(jìn)程修改其他進(jìn)程可能正在使用的數(shù)據(jù)是十分危險的。Linux系統(tǒng)中使用信號量技術(shù)使得某一時刻只有一個進(jìn)程可以存取關(guān)鍵區(qū)域的代碼和數(shù)據(jù)。其他希望存取此資源的進(jìn)程只有等待直到此資源空閑為止。等待的進(jìn)程將會被掛起,但系統(tǒng)中的其他進(jìn)程可以正常地運(yùn)行。,信號量,Linux系統(tǒng)中信號量的數(shù)據(jù)結(jié)構(gòu)包括以下的信息: Count:記錄希望使用此資源的進(jìn)程個數(shù)。正值意味著此資源可用,負(fù)

10、值或零值意味著進(jìn)程正在等待此資源。其初始值為1,說明此時有一個且僅有一個進(jìn)程可以使用此資源。當(dāng)進(jìn)程使用此資源時,它們將會減少此字段的值。當(dāng)它們釋放此資源時,將會增加此字段的值。 Waking:等待此資源的進(jìn)程個數(shù),同時也表示當(dāng)此資源空閑時,可以喚醒以便被執(zhí)行的進(jìn)程個數(shù)。 wait queue:當(dāng)進(jìn)程等待此資源時,它們將會被放入此等待隊列。 Lock:用于存取waking 字段時所用的鎖。,信號量,假設(shè)信號量的初始值為1,第一個進(jìn)程將會發(fā)現(xiàn)此計數(shù)器為正值并將其減1,也就是說此時計數(shù)器的值為0。現(xiàn)在此進(jìn)程擁有了由信號量保護(hù)的關(guān)鍵代碼或者數(shù)據(jù)。當(dāng)進(jìn)程放棄此資源時,它將會把信號量加1。最為理想的狀態(tài)就是沒有其他任何的進(jìn)程競爭此

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論