版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一題:名詞解釋。1、單內(nèi)核:單內(nèi)核就是把它從整體上作為一個單獨的大過程來實現(xiàn),并同時運行在一個單獨的地址空間。即所有內(nèi)核服務(wù)都在一個大的內(nèi)核空間中運行,內(nèi)核可以直接調(diào)用函數(shù)。Linux是一個單內(nèi)核,它運行在單獨的內(nèi)核地址空間。單內(nèi)核模式具有簡單和高性能的特點。2、進(jìn)程、線程、內(nèi)核線程:進(jìn)程:一個進(jìn)程就是處于執(zhí)行期的程序以及它所包含的資源的總稱。這些資源包括:打開的文件、掛起的信號、內(nèi)核內(nèi)部數(shù)據(jù)、處理器狀態(tài)、地址空間及一個或多個執(zhí)行線程等。線程:線程是在進(jìn)程中活動的對象,它為共享一個地址空間的程序提供多個執(zhí)行線索,它可以共享打開的文件和其他資源。內(nèi)核調(diào)度的對象是線程而不是進(jìn)程,每個線程擁有一個
2、獨立的程序計數(shù)器、進(jìn)程棧和一組進(jìn)程寄存器。在Linux中每個線程和進(jìn)程一樣有唯一(唯一隸屬自己)的task_struck,在內(nèi)核看來與一般進(jìn)程沒有什么區(qū)別,當(dāng)進(jìn)程間選擇性的共享地址空間時它可視為線程。內(nèi)核線程:獨立運行在內(nèi)核空間的標(biāo)準(zhǔn)進(jìn)程,可以被調(diào)度,也可以被搶占,但是沒有獨立的地址空間,只在內(nèi)核空間運行,負(fù)責(zé)完成內(nèi)核在后臺執(zhí)行操作的任務(wù),只能由其他內(nèi)核線程創(chuàng)建。3、進(jìn)程上下文:(表達(dá)不太準(zhǔn)確)我們把系統(tǒng)提供給進(jìn)程的處于動態(tài)變化的運行環(huán)境總和稱為進(jìn)程上下文,這些資源包括CPU的所有寄存器中的值、進(jìn)程的狀態(tài)以及堆棧中的內(nèi)容,當(dāng)前進(jìn)程上下文均保存在進(jìn)程的任務(wù)數(shù)結(jié)構(gòu)中。一般程序在用戶空間運行,它執(zhí)行
3、了系統(tǒng)調(diào)用或者觸發(fā)了某個異常,它就陷入了內(nèi)核空間,此時我們稱“代表進(jìn)程執(zhí)行”并處于進(jìn)程上下文。進(jìn)程上下文是內(nèi)核的一種操作模式,此時內(nèi)核代表進(jìn)程執(zhí)行,可以通過current宏關(guān)聯(lián)當(dāng)前進(jìn)程。因為進(jìn)程是以進(jìn)程上下文的形式連接到內(nèi)核中的,因此,進(jìn)程上下文可以睡眠,也可以搶占。4、寫時拷貝:寫時拷貝是指在需要寫入的時候才進(jìn)行資源復(fù)制,是一種可以推遲甚至免除拷貝數(shù)據(jù)的技術(shù)。Linux的fork()使用寫時拷貝數(shù)據(jù)實現(xiàn),創(chuàng)建子進(jìn)程時不需要立即給子進(jìn)程拷貝數(shù)據(jù),而是讓父子進(jìn)程以只讀的方式共享沒有修改的數(shù)據(jù)和空間,而當(dāng)父子進(jìn)程之一修改數(shù)據(jù)時則進(jìn)行拷貝。5、內(nèi)核搶占/搶占: 內(nèi)核搶占是指,當(dāng)進(jìn)程位于內(nèi)核空間,若有
4、一個更高優(yōu)先級的任務(wù)出現(xiàn)時,可以將當(dāng)前任務(wù)掛起,切換去執(zhí)行優(yōu)先級更高的進(jìn)程,而這個強(qiáng)制掛起的動作叫搶占??蓳屨嫉那疤嵝枰_保重新調(diào)度是安全的,即當(dāng)前的任務(wù)沒有持有鎖,在這種情況下內(nèi)核可以在任何時間搶占正在執(zhí)行的任務(wù)。2.6版本后的Linux內(nèi)核是可搶占式內(nèi)核,具有上述允許內(nèi)核優(yōu)先執(zhí)行高優(yōu)先級任務(wù)的能力。6、進(jìn)程時間片:進(jìn)程時間片是一個數(shù)值,表明進(jìn)程在被搶占前所能持續(xù)運行的CPU時間,它是一個調(diào)度策略設(shè)定的數(shù)值。Linux采用了預(yù)加載調(diào)度策略,每個進(jìn)程只運行很短的時間:200毫秒;同時Linux調(diào)度程序還能根據(jù)進(jìn)程的優(yōu)先級動態(tài)調(diào)整分配給它的時間片,來保證高優(yōu)先級的進(jìn)程執(zhí)行的高頻率和長時間。7、上
5、下文切換:從一個可執(zhí)行的進(jìn)程切換到另一個可執(zhí)行的進(jìn)程。由context_switch()函數(shù)負(fù)責(zé)完成,它完成了兩項基本工作:1)把虛擬內(nèi)存從上一個進(jìn)程映射切換到新進(jìn)程中;2)從上一個進(jìn)程的處理器狀態(tài)切換到新進(jìn)程的處理器狀態(tài)中,包括保存、恢復(fù)棧信息和寄存器信息,還有其他任何與體系結(jié)構(gòu)相關(guān)的狀態(tài)信息,都必須以每個進(jìn)程為對象進(jìn)行管理和保存。8、系統(tǒng)調(diào)用():所有的操作系統(tǒng)在其內(nèi)核里都有一些內(nèi)建的接口函數(shù),這些函數(shù)可以用來完成一些系統(tǒng)級別的功能。Linux系統(tǒng)使用的這樣的函數(shù)叫做“系統(tǒng)調(diào)用”,英文是systemcall。這些函數(shù)代表了從用戶空間到內(nèi)核空間的一種轉(zhuǎn)換,應(yīng)用程序通過這些接口函數(shù)訪問硬件設(shè)備
6、和其他的操作系統(tǒng)資源。Linux中,系統(tǒng)調(diào)用時用戶空間訪問內(nèi)核的唯一手段,除異常和陷入之外,它們是內(nèi)核唯一的合法入口。9、中斷上下文:當(dāng)執(zhí)行一個中斷處理程序時,內(nèi)核處于中斷上下文。硬件通過觸發(fā)信號,導(dǎo)致內(nèi)核調(diào)用中斷處理程序,進(jìn)入內(nèi)核空間。這個過程中,硬件的一些變量和參數(shù)也要傳遞傳遞給內(nèi)核,內(nèi)核根據(jù)這些參數(shù)進(jìn)行中斷處理。所謂“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(書上沒有)。 中斷上下文不能睡眠。在中斷處理函數(shù)中調(diào)用一個內(nèi)核API之前,應(yīng)該仔細(xì)分析它以確保其內(nèi)部不會觸發(fā)阻塞等待。 中斷處理函數(shù)中保護(hù)臨界區(qū),不能使用互斥體,因為它們也許導(dǎo)致睡眠。應(yīng)該使
7、用自旋鎖代替互斥體,但是一定要記住的是只有真正需要的時候才采用它。 中斷處理函數(shù)不能與用戶空間直接交互數(shù)據(jù),因為它們經(jīng)由進(jìn)程上下文與用戶空間建立連接。這也是為什么中斷處理函數(shù)不能睡眠的第2個理由:調(diào)度器工作于進(jìn)程之間,如果中斷處理函數(shù)睡眠并被調(diào)度出去,它們怎么返回到運行隊列呢? 中斷處理函數(shù)一方面需要快速地出來,另一方面又需要完成它的工作。為了規(guī)避這種沖突,中斷處理函數(shù)通常被分成2個部分。瘦小的上半部標(biāo)志一個響應(yīng)以宣稱它已經(jīng)服務(wù)了該中斷,而重大的工作負(fù)載都被丟給了肥胖的下半部。下半部的執(zhí)行被延后,在其執(zhí)行環(huán)境中,所有的中斷都是可以的。 中斷處理函數(shù)不必是可重入的。當(dāng)某中斷被執(zhí)行的時候,在它返回
8、之前,相應(yīng)的IRQ都被禁止了。因此,與進(jìn)程上下文代碼不同的是,同一中斷處理函數(shù)的不同實例不可能同時運行在多個處理器上。 中斷處理函數(shù)可以被更高優(yōu)先級IRQ的中斷處理函數(shù)打斷。如果你請求內(nèi)核將你的中斷處理函數(shù)作為快中斷處理的話,此類中斷嵌套將被禁止??熘袛喾?wù)函數(shù)運行的時候,本處理器上的所有中斷都會被禁止。在禁止中斷或?qū)⒅袛鄻?biāo)識為快中斷之前,請注意中斷屏蔽對系統(tǒng)性能的壞處。中斷屏蔽的時間越長,中斷延遲就會更長,或者說已經(jīng)被產(chǎn)生的中斷得到服務(wù)的延遲就會越久。中斷延遲與系統(tǒng)真實的響應(yīng)時間成反比。 函數(shù)中可以檢查in_interrupt()的返回值以查看自身是否位于中斷上下文。10、中斷機(jī)制:當(dāng)硬件處
9、理I/O等操作時,內(nèi)核在此期間處理其他事物而不等待硬件完成,當(dāng)硬件直至完成了請求的操作后,再通知內(nèi)核回過頭來處理,這就是中斷機(jī)制。11、觸發(fā)軟中斷:一個注冊的軟中斷必須在被標(biāo)記后才會執(zhí)行,這被稱作觸發(fā)軟中斷(raising the softirq)。12、臨界區(qū):(critical region)訪問和操作共享數(shù)據(jù)的代碼段,整個臨界區(qū)是一個不可分割的指令。13、同步:避免并發(fā)和防止競爭條件被稱為同步(sysnchronization)。14、死鎖:有一個或多個執(zhí)行線程和一個或多個資源,每個線程都在等待其中的一個資源,但所有的資源都已經(jīng)被占用了,所有線程都在相互等待,但它們永遠(yuǎn)不放棄已經(jīng)占有的資
10、源,于是任何線程都無法繼續(xù),這便發(fā)生了死鎖。15、競爭條件(race conditon):多個線程或者進(jìn)程在讀寫一個共享數(shù)據(jù)時依賴于它們執(zhí)行的相對時間,這種情形叫競爭。這樣的多個線程或者進(jìn)程可能處于同一個臨界區(qū)之中,競爭條件就發(fā)生在這多個進(jìn)程或者線程在讀寫數(shù)據(jù)時,其最終的結(jié)果依賴于多個進(jìn)程的指令執(zhí)行順序。兩個或多個執(zhí)行線程處于同一個臨界區(qū)中同時執(zhí)行,這就是競爭條件。16、爭用(lock contention)(8.4):確切應(yīng)該是鎖的爭用,是指當(dāng)鎖正在被占用時,有其他線程試圖獲得該鎖。17、自旋鎖(9):Linux內(nèi)核最常見的鎖。一個執(zhí)行線程要想訪問被自旋鎖保護(hù)的共享資源,必須先得到鎖,而自旋
11、鎖最多只能被一個可執(zhí)行的線程持有。鎖持有者在訪問完共享資源后必須釋放鎖。而如果一個執(zhí)行線程在獲取自旋鎖時,沒有任何執(zhí)行線程保持鎖,則立即得到鎖;若獲取自旋鎖時已經(jīng)被持有,那么該線程就會一直進(jìn)行“忙循環(huán)”“旋轉(zhuǎn)”“等待鎖重新可用”,直到所要自旋鎖的保持者釋放鎖,請求鎖的執(zhí)行線程便能立即得到它。 18、屏障:所有可能重新排序和寫的處理器提供了機(jī)器指令來確保順序要求,同樣也可以指編譯器不要給定點周圍的指令序列進(jìn)行重新排序,這些確保順序的指令叫屏障。19、文件系統(tǒng)(p167):文件系統(tǒng)是特殊的數(shù)據(jù)分層存儲結(jié)構(gòu),它包括文件、目錄和相關(guān)的控制信息,它負(fù)責(zé)管理和存儲文件信息。文件系統(tǒng)的通用操作包含創(chuàng)建、刪除
12、和安裝等等。虛擬文件系統(tǒng)(VFS):作為內(nèi)核子系統(tǒng),為用戶空間程序提供了文件與文件系統(tǒng)相關(guān)的接口。系統(tǒng)中的所有文件系統(tǒng)不但依賴VFS共存,而且也依靠VFS系統(tǒng)協(xié)同工作。通過虛擬文件系統(tǒng),程序可以利用標(biāo)準(zhǔn)的unix系統(tǒng)調(diào)用對不同的文件系統(tǒng),甚至不同介質(zhì)上的文件系統(tǒng)進(jìn)行讀寫操作。21、軟實時:內(nèi)核調(diào)度進(jìn)程,盡力使進(jìn)程在它的限定時間到來前運行,但內(nèi)核不保證總能滿足這些進(jìn)程的需求。22、延遲寫:當(dāng)進(jìn)程往磁盤上寫數(shù)據(jù)時,先往高速緩存中寫,以便隨后又讀它時,能從高速緩存中讀取,而不必啟動磁盤讀取。Linux采取了“延遲寫”策略,即:如果緩沖區(qū)還沒有寫滿,則不急于把緩沖區(qū)的內(nèi)容寫到磁盤上,而是在緩沖管理數(shù)據(jù)
13、結(jié)構(gòu)中對該緩沖區(qū)設(shè)置延遲寫標(biāo)志,當(dāng)高速緩存中的數(shù)據(jù)延遲到必須往磁盤上寫的時候才進(jìn)行寫盤操作。(書上沒有,不過看起來貌似正確)23、內(nèi)核模塊: 模塊就是一個已編譯但未連接的可執(zhí)行文件。Linux是一個一體化內(nèi)核,內(nèi)核中各部件聯(lián)系緊密,運行效率高;但是當(dāng)因某種原因需要增加、擴(kuò)充時,用戶必須對內(nèi)核全部編譯一次,為彌補(bǔ)這個缺點,Linux建立了模塊機(jī)制。從內(nèi)核角度看,模塊是運行時可連接、可刪除的,包含了至少兩個函數(shù)的代碼段。這個代碼段一旦被連接到內(nèi)核,它就是內(nèi)核的一部分,所以稱為內(nèi)核模塊。從用戶角度看,模塊是內(nèi)核的一個外掛的配件,需要時可將其掛接到內(nèi)核,不需要時即可將其刪除,它為用戶提供了擴(kuò)充內(nèi)核功能
14、的?。24、索引節(jié)點:一個索引節(jié)點代表文件系統(tǒng)中(雖然索引節(jié)點僅當(dāng)文件被訪問時,才創(chuàng)建)的一個文件,它也可以是設(shè)備或者管道這樣的特殊文件。25、current宏:在內(nèi)核中,訪問任務(wù)通常需要獲得指向其進(jìn)程描述符的指針,而Linux內(nèi)核通過current宏查找當(dāng)前正在運行進(jìn)程的進(jìn)程描述符。它從內(nèi)核棧的尾端找到thread_info,然后從thread_info的task域中提取并返回task_struct的地址。26、proc文件系統(tǒng):Linux的/proc目錄是一種文件系統(tǒng),即proc文件系統(tǒng)。與其他文件系統(tǒng)不同的是,proc文件系統(tǒng)是一個虛擬文件系統(tǒng),存儲的是當(dāng)前內(nèi)核運行狀態(tài)的一系列特殊文件。
15、用戶可以通過查看這些文件來了解有關(guān)的系統(tǒng)硬件狀態(tài)以及當(dāng)前運行進(jìn)程的信息,甚至可以通過更改其中某些文件來改變內(nèi)核的運行狀態(tài)。27、內(nèi)核態(tài) 內(nèi)核態(tài)是操作系統(tǒng)內(nèi)核的一種運行模式,運行在該模式的代碼,可以無限制地對系統(tǒng)存儲、外部設(shè)備訪問。28、用戶態(tài) 用戶態(tài)是指非特權(quán)執(zhí)行狀態(tài),內(nèi)核禁止該狀態(tài)下的代碼進(jìn)行一些潛在危險的操作,如寫入系統(tǒng)配置文件、殺掉其他用戶進(jìn)程、重啟系統(tǒng)等等。二、問答題:1、簡述linux內(nèi)核特點(1.3)。答:Linux是單內(nèi)核,但汲取了微內(nèi)核的精華,其特點如下:1)支持動態(tài)加載內(nèi)核模塊,可動態(tài)的卸除和加載部分內(nèi)核代碼;2)支持對稱多處理機(jī)制(SMP);3)內(nèi)核可搶占,允許內(nèi)核執(zhí)行高優(yōu)
16、先級的任務(wù);4)獨特的線程實現(xiàn),內(nèi)核不區(qū)分線程和其他一般進(jìn)程,一樣都是task;5)設(shè)備管理中提供具有設(shè)備類的面向?qū)ο蟮脑O(shè)備模型、熱插拔事件、以及用戶空間的設(shè)備文件系統(tǒng);6)拋棄了Unix中拙劣的stream特性,忽略了一些實際上已經(jīng)不會使用的過時標(biāo)準(zhǔn);7)自由,公開開發(fā)模型自由務(wù)實發(fā)展。2、簡述linux內(nèi)核開發(fā)的差異(所注意的事項)(2.4)。答:1)不能訪問C庫,對內(nèi)核而言C庫太大了,但大部分常用C庫函數(shù)在內(nèi)核中都有實現(xiàn);2)必須使用GNU C;3)缺乏內(nèi)存保護(hù)機(jī)制,內(nèi)核中的內(nèi)存都不分頁;4)浮點數(shù)很難使用,復(fù)雜繁瑣,原則是不要在內(nèi)核中使用浮點數(shù);5)只有容積很小且定長的堆棧;6)內(nèi)核支
17、持異步中斷、搶占和SMP,所以容易出現(xiàn)競爭條件,要求時刻注意同步和并發(fā),設(shè)置同步機(jī)制保證不出現(xiàn)競爭條件,通過自旋鎖和信號量解決競爭條件;7)要注重可移植性。3、進(jìn)程創(chuàng)建的步驟(3.2)。答:Linux創(chuàng)建進(jìn)程大體上有兩個步驟:1)fork() 函數(shù)通過拷貝當(dāng)前進(jìn)程創(chuàng)建一個子進(jìn)程;2)exec()函數(shù)負(fù)責(zé)讀取可執(zhí)行文件并將其載入到地址空間執(zhí)行。其中,Linux通過clone()系統(tǒng)調(diào)用實現(xiàn)fork(),由clone()去調(diào)用do_fork(),do_fork()調(diào)用copy_process()函數(shù)。4、請畫出進(jìn)程狀態(tài)轉(zhuǎn)換圖(3.1)。答: 進(jìn)程有五個狀態(tài):TASK_RUNNING(運行):進(jìn)程是
18、可執(zhí)行的。它或者正在執(zhí)行,或者正在執(zhí)行隊列中等待執(zhí)行。TASK_INTERRUPTIBLE(可中斷):進(jìn)程正在睡眠,會因為條件達(dá)成或者接收到信號喚醒并投入運行。TASK_UNINTERRUPTIBLE(不可中斷):進(jìn)程正在睡眠,不會因為接收到信號喚醒投入運行。TASK_TRACED:被其他進(jìn)程跟蹤的進(jìn)程。TASK_STOPPED(停止):進(jìn)程停止運行,進(jìn)程沒有投入運行也不能投入運行。5、進(jìn)程的終結(jié)(3.4)。P31答: 當(dāng)一個進(jìn)程終結(jié)時,內(nèi)核必須釋放它所占有的資源,并通知父進(jìn)程。一般來說,進(jìn)程的析構(gòu)是自身引起的。它發(fā)生在進(jìn)程調(diào)用exit()系統(tǒng)調(diào)用時,既可能顯式地調(diào)用,也可能隱式地從某個程序的
19、主函數(shù)返回。當(dāng)進(jìn)程接受到不能處理也不能忽略的信號或異常時,它還可能被動終結(jié)。終結(jié)的任務(wù)大部分都要靠do_exit()來完成。6、linux2.6所實現(xiàn)的調(diào)度程序所實現(xiàn)的目標(biāo)是什么(4.2)?答:有效性:完成盡可能多的工作;交互性:盡快響應(yīng)用戶;公平性:不允許任何進(jìn)程饑餓。(1)充分實現(xiàn)O(1)調(diào)度。不管有多少進(jìn)程,新調(diào)度程序采用的每個算法都能在恒定時間內(nèi)完成;(2)全面實現(xiàn)SMP的可擴(kuò)展性。每個處理器擁有自己的鎖和自己的可執(zhí)行隊列;(3)強(qiáng)化SMP的親和力。盡量將相關(guān)一組任務(wù)分配給一個CPU進(jìn)行連續(xù)執(zhí)行;(4)加強(qiáng)交互性能。即使在系統(tǒng)處于相當(dāng)負(fù)載的情況下,也能保證系統(tǒng)的相應(yīng),并立即調(diào)度交互式進(jìn)
20、程;(5)保證公平。在合理設(shè)定的時間范圍內(nèi),沒有進(jìn)程會處于饑餓狀態(tài),也沒有進(jìn)程能不公平的得到大量時間片;(6)雖然常見的優(yōu)化情況是系統(tǒng)中只有1-2個可運行進(jìn)程,但是優(yōu)化它也完全有能力擴(kuò)展到具有多處理器每個處理器上運行多個進(jìn)程的系統(tǒng)中。7、請畫出調(diào)度程序狀態(tài)之間的關(guān)系(4.2)。8、負(fù)載平衡程序的操作步驟(4.2.7)。答:Linux為對稱多處理器(SMP)系統(tǒng)中的每個處理器準(zhǔn)備了單獨的可執(zhí)行隊列和鎖,而負(fù)載平衡程序則負(fù)責(zé)保證這些可執(zhí)行隊列之間的負(fù)載處于均衡狀態(tài)。負(fù)載平衡程序由load_balance()函數(shù)實現(xiàn),它所完成的操作步驟歸結(jié)如下:(1)找最繁忙的可執(zhí)行運行隊列;(2)從最繁忙的隊列中
21、選擇一個優(yōu)先級數(shù)組(過期的優(yōu)先)以便抽取進(jìn)程;(3)選擇含有進(jìn)程并且優(yōu)先級最高(值最小)的鏈表;(4)選擇一個不是正在運行的且不在高速緩沖的進(jìn)程,可移動的進(jìn)程抽??;(5)重復(fù)上述步驟,直至平衡。9、用戶搶占發(fā)生在什么情況(4.3.1)?答:在內(nèi)核即將返回用戶空間的時候,如果need_resched標(biāo)志被設(shè)置,會導(dǎo)致schedule()被調(diào)用,此時就會發(fā)生用戶搶占。也就是說,用戶搶占在以下兩種情況發(fā)生:1)從系統(tǒng)調(diào)用返回用戶空間; 2)從中斷處理程序返回用戶空間。10、內(nèi)核搶占發(fā)生在什么情況(4.3.1)?答:1)中斷處理程序正在執(zhí)行,且返回內(nèi)核空間之前;2)內(nèi)核代碼再一次具有可搶占性的時候(p
22、reemt_count重新為0);3)內(nèi)核中的任務(wù)顯示的調(diào)用schedule();(處于核心態(tài)的任務(wù)直接調(diào)用schedule())4)內(nèi)核中的任務(wù)阻塞時(這同樣也會導(dǎo)致調(diào)用schedule())。11、請簡述SCHED_FIFO與SCHED_RR實時調(diào)度的區(qū)別(4.4)。答:SCHED_FIFO實現(xiàn)了一種簡單的,先入先出的調(diào)度算法,它不使用時間片。SCHED_FIFO級的進(jìn)程會比任何SCHED_NORMAL級的進(jìn)程都先得到調(diào)度;SCHED_FIFO級進(jìn)程不基于時間片,只要它處于可執(zhí)行狀態(tài),就會一直執(zhí)行,直到它自己受阻塞或顯示的釋放處理器為止。只有較高級的SCHED_FIFO或者SCHED_RR
23、任務(wù)才能搶占SCHED_FIFO任務(wù)。SCHED_RR與SCHED_FIFO大體相同,但是受時間片的限制。SCHED_RR級的進(jìn)程在耗盡事先分配給它的時間片后就不能再接著執(zhí)行了,也就是說,SCHED_RR是帶有時間片的SCHED_FIFO,這是一種實時輪流調(diào)度算法。12、系統(tǒng)調(diào)用作為進(jìn)程與硬件之間的一個中間層所起的作用有哪些?(5)答:系統(tǒng)調(diào)用在用戶空間進(jìn)程和硬件設(shè)備之間添加了一個中間層,該層主要有三個作用:1)系統(tǒng)調(diào)用為用戶空間提供了一種硬件的抽象接口;2)系統(tǒng)調(diào)用保證了系統(tǒng)的穩(wěn)定和安全;3)系統(tǒng)調(diào)用是用戶空間訪問內(nèi)核的唯一手段,除異常和陷入外,他們是內(nèi)核唯一的合法入口。每個進(jìn)程都運行在虛擬
24、系統(tǒng)中,在用戶空間和系統(tǒng)的其余部分提供這樣一層公共接口,也是出于這種考慮。13、中斷為什么要分為上半部和下半部?解釋tasklet思想。(6.2、7.3)答:中斷服務(wù)程序異步執(zhí)行,可能會中斷其他的重要代碼,包括其他中斷服務(wù)程序。因此,為了避免被中斷的代碼延遲太長的時間,中斷服務(wù)程序執(zhí)行得越快越好,所以中斷程序只作必須的工作,其他工作推遲到以后處理。所以Linux把中斷處理切為兩個部分:上半部和下半部。上半部就是中斷處理程序,它需要完成的工作越少越好,執(zhí)行得越快越好,一旦接收到一個中斷,它就立即開始執(zhí)行。像對時間敏感、與硬件相關(guān)、要求保證不被其他中斷打斷的任務(wù)往往放在中斷處理程序中執(zhí)行;而剩下的
25、與中斷有相關(guān)性但是可以延后的任務(wù),如對數(shù)據(jù)的操作處理,則推遲一點由下半部完成。下半部分延后執(zhí)行且執(zhí)行期間可以響應(yīng)所有中斷,這樣可使系統(tǒng)處于中斷屏蔽狀態(tài)的時間盡可能的短,提高了系統(tǒng)的響應(yīng)能力。實現(xiàn)了程序運行快同時完成的工作量多的目標(biāo)。(我自己寫的)中斷處理程序本身存在一些局限,只能完成整個中斷處理流程的上半部分。這些局限:1. 中斷處理程序以異步的方式執(zhí)行,并且它有可能會打斷其他重要代碼(甚至包括其他中斷處理程序)的執(zhí)行。因此,為了避免被打斷的代碼停止時間過長,中斷處理程序應(yīng)該執(zhí)行得越快越好。2. 如果當(dāng)前一個中斷處理程序正在執(zhí)行,在最好情況下,與該中斷同級的其他中斷會被屏蔽,在最壞情況下,當(dāng)前
26、處理器上所有的其他中斷都會被屏蔽。因為禁止中斷后硬件與操作系統(tǒng)無法通信,因此,中斷處理程序執(zhí)行得越快越好。3. 中斷處理程序往往需要對硬件進(jìn)行操作,它們通常有很高的時限要求。4. 中斷處理程序不在進(jìn)程上下文中運行,所以它們不能阻塞。這限制了它們所做的事情。操作系統(tǒng)必須有一個快速、異步、簡單的機(jī)制負(fù)責(zé)對整個硬件做出迅速響應(yīng)并完成那些時間要求很嚴(yán)格的操作,也就是中斷處理程序。而對于那些其他的、對時間要求相對寬松的任務(wù),就應(yīng)該推后到中斷被激活以后運行。所以,整個中斷處理流程就被分為了兩個部分。中斷的下半部可以通過多種機(jī)制實現(xiàn),其中tasklet是常用的一種形式,而tasklet的實現(xiàn)基礎(chǔ)是軟中斷。軟
27、中斷作為下半部機(jī)制的代表隨著SMP應(yīng)運而生,它使得對時間不敏感的任務(wù)延后執(zhí)行,而且可以在多個CPU上并行執(zhí)行,它有以下特性:(1)產(chǎn)生后并不馬上可以執(zhí)行,必須等待內(nèi)核的調(diào)度才能執(zhí)行。軟中斷不能被軟中斷搶占,唯一能搶占軟中斷的是上半部的中斷處理程序。(2)可以并發(fā)運行在多個CPU上(即使同一類型的也可以),所以軟中斷必須設(shè)計可重入的函數(shù)(允許多個CPU操作),因此也需要使用自旋鎖來保護(hù)。那些執(zhí)行頻率很高、連續(xù)性要求很高并能高效完成加鎖工作的應(yīng)用才需要軟中斷,所以軟中斷的使用屈指可數(shù)只有網(wǎng)絡(luò)和SCSI直接使用軟中斷。而tasklet本身也是軟中斷,它和軟中斷在本質(zhì)上很相似,行為表現(xiàn)也相近,task
28、let內(nèi)部對軟中斷進(jìn)行了封裝,外部接口更簡單,鎖保護(hù)也要求較低。它具有以下特性:(1)一種特定類型的tasklet只能運行在一個CPU上,不能并行,只能串行;(2)多個不同類型的tasklet可以并行在多個CPU上;(3)軟中斷是靜態(tài)分配的,在內(nèi)核編譯好后就不能改變,但tasklet就靈活許多,可在運行時改變。Tasklet是在兩種軟中斷類型的基礎(chǔ)上實現(xiàn)的(HI_SOFTIRQ和TASKLET_SORFTIRQ),但是由于其特殊的實現(xiàn)機(jī)制,降低了設(shè)備驅(qū)動程序開發(fā)者的負(fù)擔(dān),因此如果不需軟中斷的并行性,tasklet就是最好的選擇。14、請簡述下半部機(jī)制中軟中斷、tasklet、工作隊列的優(yōu)缺點以
29、及使用場合?(6.2 7.3 7.4)答:軟中斷:優(yōu)點:可以并發(fā)運行在多個CPU上(及時同一類型的也可以),具有可擴(kuò)展性;缺點:必須使用可重入函數(shù),對鎖要求高,實際復(fù)雜度高,靜態(tài)分配不靈活;適用場合:對時間要求嚴(yán)格、執(zhí)行頻率很高和連續(xù)性要求很高的情況;Tasklet:優(yōu)點:接口更簡單,鎖保護(hù)要求低,而且兩個不同類型的tasklet不能同時執(zhí)行,所以實現(xiàn)簡單,動態(tài)可變靈活性好,是有效的軟終端;缺點:只能運行在一個CPU上,不能并發(fā);使用場合:在不要求擴(kuò)展到多CPU的話,盡可能選擇tasklet而不是軟中斷。不能很好線程化的代碼,tasklet意義更大;工作隊列:優(yōu)點:缺點:造成的開銷最大,因為要
30、牽扯到內(nèi)核線程甚至是上下文切換;使用場合:如果中斷的延期工作需要運行于進(jìn)程上下文,工作隊列是唯一的選擇。15、造成并發(fā)執(zhí)行的原因有哪些?答:1)中斷中斷集合可以在任何時刻異步發(fā)生,也就是可能隨時打斷當(dāng)前正在執(zhí)行的代碼;2)軟中斷和tasklet內(nèi)核能在任何時刻喚醒或調(diào)度軟中斷和tasklet,打斷當(dāng)前任務(wù);3)內(nèi)核搶占因為內(nèi)核具有搶占性,所以內(nèi)核中的任務(wù)可能會被另一任務(wù)搶占;4)睡眠及用戶空間的同步在內(nèi)核執(zhí)行的進(jìn)程可能會睡眠,這就會喚醒調(diào)度程序,從而導(dǎo)致調(diào)度一個新的用戶進(jìn)程執(zhí)行;5)對稱多處理兩個或多個處理器可以同時執(zhí)行代碼。16、請簡述在分配內(nèi)存中,如何選擇內(nèi)存分配函數(shù)。(11.6、11.1
31、3 P65)答:(alloc_page、kmalloc、vmalloc、slab)1) 需要連續(xù)的物理頁,就可以使用某個低級頁分配函數(shù)或alloc_pages(),以頁為單位進(jìn)行分配,并返回一個指向第一個頁的page結(jié)構(gòu)體的指針,出錯就返回null。2) 如果需要分配物理上連續(xù)的地址并且以字節(jié)為單位,使用kmalloc()函數(shù)。返回一個指向至少size大小的內(nèi)存塊的指針,size為傳遞的參數(shù)。如出錯,返回null。3)不需要物理上連續(xù)的地址,而僅僅要求虛擬地址連續(xù),使用vmalloc()函數(shù)。返回一個指向邏輯上連續(xù)的一塊內(nèi)存區(qū)的指針,大小至少為size,出錯返回null。相對kmalloc()
32、來說,有一定的性能損失,僅在不得已時才使用,如要獲得大塊內(nèi)存。4)想從高端內(nèi)存進(jìn)行分配,就使用alloc_pages(),alloc_pages()函數(shù)返回一個指向struct page結(jié)構(gòu)的指針,struct page結(jié)構(gòu)的指針是訪問相應(yīng)高端內(nèi)存的唯一方式;而不是一個指向某個邏輯地址的指針,因為高端內(nèi)存很多沒有被映射。5)創(chuàng)建和銷毀很多較大的數(shù)據(jù)結(jié)構(gòu),那么應(yīng)考慮建立slab高速緩存,slab層為每個CPU維持一個對象高速緩存(空閑鏈表),極大的提高對象分配和回收的性能。17、請簡述硬連接與軟連接的區(qū)別(12)。答:Unix下每個文件都有一個與之相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)用來描述該文件的信息,這個數(shù)據(jù)結(jié)
33、構(gòu)就是inode。創(chuàng)建硬連接只是創(chuàng)建一個指針,一個指向inode的指針,所以硬連接不占磁盤空間。多個目錄項對應(yīng)一個inode號;連接計數(shù)變?yōu)?時,文件被刪除。硬連接的創(chuàng)建有兩個限制:1)不能為目錄創(chuàng)建硬連接,避免循環(huán);2)不能跨文件系統(tǒng)或者跨分區(qū)創(chuàng)建硬連接。軟連接也叫符號連接,它本身是一個獨立的較小的文件,指向新創(chuàng)建的inode,是文件的另一個路徑的別名。軟連接的創(chuàng)建沒有限制,但是可能會造成循環(huán)。18、請簡述find_vma()與find_vma_prev()及find_vma_intersection()之間的區(qū)別。(14.3)答:它們都是內(nèi)核定義來管理內(nèi)存區(qū)域的輔助函數(shù),區(qū)別如下:find
34、_vma()函數(shù)在指定的地址空間中搜索第一個vm_end大于addr的內(nèi)存區(qū)域,即該函數(shù)尋找第一個包含addr或首地址大于addr的內(nèi)存區(qū)域,如果沒有發(fā)現(xiàn)這樣的區(qū)域,該函數(shù)返回NULL,否則返回指向匹配的內(nèi)存區(qū)域的vm_area_struct結(jié)構(gòu)體指針;find_vma_prev()與find_vma()工作方式相同,但是它返回第一個vm_end小于addr的vma。find_vma_intersection()函數(shù)返回第一個和指定地址區(qū)間相交的VMA。19、如何創(chuàng)建地址區(qū)間?(14.4)答:在用戶空間通過mmap()系統(tǒng)調(diào)用獲取內(nèi)核函數(shù)do_mmap()的功能,內(nèi)核使用do_mmap()函數(shù)
35、創(chuàng)建一個新的線性地址區(qū)間,如果創(chuàng)建的地址區(qū)間和一個已經(jīng)存在的地址區(qū)間相鄰,并且他們具有相同的訪問權(quán)限的話,那么兩個區(qū)間合并一個,如果不能合并,那么就確實需要創(chuàng)建一個新的VMA了,但無論哪種情況,do_mmap()函數(shù)都會將一個地址區(qū)間加入到進(jìn)程的地址空間中無論是擴(kuò)展已存在的內(nèi)存區(qū)域還是創(chuàng)建一個新的區(qū)域。20、如何刪除地址區(qū)間?(14.5)答:系統(tǒng)調(diào)用munmap()函數(shù)給用戶空間程序提供了一種從自身地址空間中刪除指定地址區(qū)間的方法,它是對do_munmap()函數(shù)的一個簡單的封裝。Do_munmap()函數(shù)從特定的進(jìn)程地址空間中刪除指定地址空間。21、信號量與自旋鎖的區(qū)別? 答:當(dāng)一個進(jìn)程試圖
36、獲取一個被占用的自旋鎖時,它必須不斷的查看鎖是否被釋放,而對信號量來說,進(jìn)程不必一直忙等,而是把自己登記到一個等待隊列中,然后自己睡覺去了。信號量:適用于鎖會被長時間持有的情況,持有信號量時可以睡眠。自旋鎖:適用于被短時間占有的鎖,持有自旋鎖時不可以睡眠。22、同步的方法。答:原子操作:是指不會被線程調(diào)度機(jī)制打斷的操作,這種操作一點開始,就一直運行到結(jié)束,中間不會切換到另一個線程;自旋鎖:為了實現(xiàn)保護(hù)共享資源,防止多處理器并發(fā)而提出的一種鎖機(jī)制。一個執(zhí)行單位要想訪問被自旋鎖保護(hù)的共享資源必須先得到鎖,否則將自旋等待獲取鎖;信號量:是一種睡眠鎖,沒有獲得信號量的任務(wù)則進(jìn)入等待隊列睡眠,直到信號量
37、被釋放后才被喚醒,獲得信號量去執(zhí)行;是在多線程環(huán)境下用來保證兩個或多個關(guān)鍵代碼段不被并發(fā)調(diào)用的一種設(shè)施。在進(jìn)入一個關(guān)鍵代碼段錢線程必須獲取一個信號量,執(zhí)行完成后釋放信號量;完成變量:若在內(nèi)核中一個任務(wù)需要發(fā)出信號通知另一個任務(wù)發(fā)生了某個特定事件,則使用完成變量,完成變量喚醒在完成變量上等待的任務(wù);BKL(大內(nèi)核鎖):大內(nèi)核鎖基于小等待自旋鎖,是一個全局自旋鎖,可以使一個進(jìn)程多次請求鎖(遞歸鎖),保證一個進(jìn)程只能取得一次鎖,在釋放前任何鎖定動作都不會導(dǎo)致實質(zhì)上再次鎖定,這樣避免本進(jìn)程多次鎖定而導(dǎo)致死鎖。23、對進(jìn)程控制塊的處理,Linux和Unix有什么區(qū)別?為什么有這種區(qū)別?有什么好處? 答:
38、1)Unix的進(jìn)程控制塊由基本控制塊proc結(jié)構(gòu)和擴(kuò)充控制塊user結(jié)構(gòu)兩部分組成。Proc結(jié)構(gòu)中存放關(guān)于一個進(jìn)程的最基本、最必須的信息,因此它常駐內(nèi)存;User結(jié)構(gòu)中存放著只有進(jìn)程運行時才用到的數(shù)據(jù)和狀態(tài)信息,因此為了節(jié)省主存空間,當(dāng)進(jìn)程暫時不在處理機(jī)上運行時,就把它放在磁盤上的對換區(qū)中。進(jìn)程的user結(jié)構(gòu)總和進(jìn)程數(shù)據(jù)段一起換入換出主存;2)Linux中slab分配器動態(tài)分配task_struct,對象復(fù)用和緩存。3)造成這種卻別是由于內(nèi)存的限制,早期Unix時代機(jī)器內(nèi)存小,分部處理節(jié)省內(nèi)存空間;而隨著技術(shù)進(jìn)步內(nèi)存有了顯著提升,Linux的處理方式更加高效、快速。24、進(jìn)程與線程有什么區(qū)別?
39、Linux線程是如何實現(xiàn)的?答:進(jìn)程是出于執(zhí)行期的代碼以及它包含的資源的總稱,而線程是進(jìn)程中活動的對象。進(jìn)程是資源管理的最小單位,線程是程序執(zhí)行的最小單位,內(nèi)核調(diào)度的對象是線程而不是進(jìn)程。采用線程是為了更好的支持SMP以及減小上下文切換的開銷,因為線程上下文切換開銷比進(jìn)程小多了。一個進(jìn)程至少需要一個線程作為它的指令執(zhí)行體,進(jìn)程管理著資源,將線程分配到某個CPU上執(zhí)行,SMP中可使用多個CPU執(zhí)行各個線程,達(dá)到最大程度的并行。Linux線程的實現(xiàn):Linux實現(xiàn)線程的機(jī)制非常獨特,內(nèi)核把所有的線程都當(dāng)做進(jìn)程來實現(xiàn),線程只被視為一個與其它進(jìn)程共享某些資源的進(jìn)程。每個線程擁有獨立的程序計數(shù)器、進(jìn)程棧
40、和一組進(jìn)程寄存器,并且和進(jìn)程一樣擁有唯一隸屬于自己的task_struct。25、有幾種鎖?按理只要設(shè)計一種鎖對要訪問的關(guān)鍵數(shù)據(jù)加鎖就可以了,為什么要設(shè)計幾種鎖?這幾種鎖有什么區(qū)別?答:有五種鎖:原子操作;自旋鎖;信號量;BKL;seq鎖因為不同場合有不同的上下文環(huán)境,需要加鎖的時間長短不同,維護(hù)鎖的開銷也不一樣,所以需要設(shè)計不同的同步方法來解決不同場合的同步問題。原子操作能夠保證指令執(zhí)行過程不被打斷,要么全部執(zhí)行,要么根本不執(zhí)行。通過這種方式可以保護(hù)共享資源不被并發(fā)訪問,但是原子操作對一些情況卻無能為力,如臨界區(qū)跨越多個函數(shù)。Linux內(nèi)核中最常見的鎖就是自旋鎖。自旋鎖最多只能被一個可執(zhí)行線
41、程持有。如果其他線程要獲得鎖,必須等待持有鎖的線程釋放自旋鎖。自旋鎖可以防止多于一個線程進(jìn)入臨界區(qū),從而保護(hù)共享資源。在中斷上下文中只能使用自旋鎖,自旋鎖適用于持有鎖時間較短的情況。信號量是一種睡眠鎖。如果有一個任務(wù)試圖獲得一個已經(jīng)被占有的信號量時,信號量會將其推進(jìn)一個等待隊列,然后讓其睡眠,等持有信號量的任務(wù)釋放信號量時再將其喚醒。信號量適用于長時間持有鎖的情況,任務(wù)如果需要睡眠時只能使用信號量。BKL鎖是一個全局自旋鎖,允許遞歸使用,不會出現(xiàn)死鎖,但是BKL是有害的,很少被使用。Seq鎖適用讀寫共享數(shù)據(jù),輕量級,對寫者有利,讀者循環(huán)等待。26、舉例說明Linux操作系統(tǒng)中,哪些地方實現(xiàn)了面
42、向?qū)ο蟮乃枷??答:面向?qū)ο蟮乃枷胗腥齻€基本特征:封裝、繼承、多態(tài)。封裝就是把方法和屬性包裝起來,實現(xiàn)信息隱蔽和抽象;繼承是指一個對象直接使用另一個對象的屬性和方法;而多態(tài)是指接口的多種不同的實現(xiàn)方式。Linux內(nèi)核中多種技術(shù)都體現(xiàn)了面向?qū)ο蟮脑O(shè)計思想,下面分別從面向?qū)ο蟮娜齻€特征分別闡述:1)文件系統(tǒng)的file對象,file對象只定義了方法的原型而沒有實現(xiàn)。具體方法的實現(xiàn)由具體的文件系統(tǒng)提供。內(nèi)核中重要數(shù)據(jù)結(jié)構(gòu)都進(jìn)行封裝,如文件系統(tǒng)中的inode對象,內(nèi)存管理中的page對象、cache對象和slab對象,網(wǎng)絡(luò)實現(xiàn)部分中的sochet緩沖對象、struct sk_buff等。2)內(nèi)核中的通用鏈
43、表結(jié)構(gòu)可看作一個基類。對它的基本操作是鏈表節(jié)點插入、刪除、初始化和移動,而其他數(shù)據(jù)結(jié)構(gòu)可視為它的子類。若它們要組織成雙向鏈表,可以在鏈表節(jié)點中包含這個通用鏈表對象,而使用通用鏈表的數(shù)據(jù)結(jié)構(gòu)遍及內(nèi)核的各個部分:進(jìn)程調(diào)度、存儲器管理、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等(感覺不太對)。3)虛擬文件系統(tǒng)(VFS)典型的體現(xiàn)了多態(tài)性。VFS可看作抽象基類,而具體的文件系統(tǒng)如ext2、VFAT可看作它的子類,VFS提供的操作函數(shù)集是一個純虛函數(shù)概念,具體實現(xiàn)由實現(xiàn)文件系統(tǒng)提供。27、中斷上下文和進(jìn)程上下文的區(qū)別?中斷是否一定要在中斷上下文中?答:(和前面相比,感覺這個比較準(zhǔn)確)用戶空間的應(yīng)用程序通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空
44、間,此時進(jìn)程要傳遞很多變量,參數(shù)的值給內(nèi)核,內(nèi)核態(tài)運行時也要保存用戶進(jìn)程的一些寄存器值、變量號。所謂“進(jìn)程上下文”,可以看作是用戶進(jìn)程傳遞給內(nèi)核的這些參數(shù)以及內(nèi)核要保存的那些變量和寄存器的值和當(dāng)時的環(huán)境。硬件通過觸發(fā)信號,導(dǎo)致內(nèi)核調(diào)用中斷處理程序,進(jìn)入內(nèi)核空間,這個過程硬件的一些變量也要傳遞給內(nèi)核,內(nèi)核根據(jù)這些參數(shù)進(jìn)行中斷處理。所謂“中斷上下文”可以看作是硬件傳遞的參數(shù)和內(nèi)核需要保存的一些其他環(huán)境。當(dāng)某進(jìn)程在執(zhí)行時被內(nèi)核切換去執(zhí)行另一個進(jìn)程,則它要保存當(dāng)前的進(jìn)程上下文一保證再次執(zhí)行進(jìn)程時能夠獲得切換時的狀態(tài)并執(zhí)行下去。發(fā)生中斷時,內(nèi)核就在被中斷進(jìn)程上下文中,在內(nèi)核態(tài)下執(zhí)行中斷服務(wù)例程,但同時保
45、留所需要的資源,以便中斷服務(wù)結(jié)束后能恢復(fù)被中斷進(jìn)程的執(zhí)行。當(dāng)執(zhí)行一個中斷處理程序或下半部時,內(nèi)核處于中斷上下文。進(jìn)程上下文可以睡眠,而中斷上下文不可睡眠,兩者之間沒有瓜葛。中斷上下文與進(jìn)程沒有絲毫關(guān)系,即進(jìn)程上下文與中斷上下文是兩個沒有瓜葛的概念。由于沒有進(jìn)程的背景,中斷上下文不可以睡眠,如果睡眠了并沒有調(diào)度程序能夠調(diào)度它繼續(xù)運行,而進(jìn)程上下文是可以睡眠的。中斷上下文與進(jìn)程沒有關(guān)系,與current宏也不相干,所以中斷上下文不可以睡眠,否則沒有調(diào)度程序可以調(diào)度它再次運行,中斷處理程序中也不能使用可能睡眠的進(jìn)程。中斷上下文有嚴(yán)格的時間限制,代碼應(yīng)該迅速、簡潔,盡量不處理繁復(fù)的工作,復(fù)雜的工作分離
46、出來放在下半部處理。28、task_struct的作用,10個以上成員及其作用?答:在Linux中每個進(jìn)程都由task_struct數(shù)據(jù)結(jié)構(gòu)來定義。進(jìn)程的所有操作都要依賴task_struct,task_struct是進(jìn)程存在的唯一標(biāo)志,創(chuàng)建進(jìn)程時,系統(tǒng)會為我們產(chǎn)生一個task_struct結(jié)構(gòu),然后從父進(jìn)程那里繼承一些數(shù)據(jù),并把新進(jìn)程插入到進(jìn)程樹中,以待進(jìn)行進(jìn)程管理。在linux中每個進(jìn)程都由task_struct數(shù)據(jù)結(jié)構(gòu)來定義,進(jìn)程描述符中包含了一個具體進(jìn)程的所有信息:打開的文件,進(jìn)程的地址空間,掛起的信號,進(jìn)程的狀態(tài)等等。在內(nèi)核中,訪問任務(wù)通常需要獲得指向其task_struct的指針,
47、內(nèi)核中大部分處理進(jìn)程的代碼都是直接通過task_struct進(jìn)行。下面列舉一些task_struct結(jié)構(gòu)中的成員以及它們的作用:1)state標(biāo)識進(jìn)程的當(dāng)前狀態(tài);2)flags進(jìn)程標(biāo)識;3)addr_limit線程地址空間;4)has_cpu獲取的處理器;5)priority進(jìn)程優(yōu)先級;6)lock_depth鎖深度;7)pid_t pid進(jìn)程標(biāo)識號;8)pid_t pgrp進(jìn)程組號;9)struct mm_struct *mm內(nèi)存管理信息(指向內(nèi)存區(qū)描述符的指針);10)struct fs_struct *fs系統(tǒng)跟蹤進(jìn)程所打開的文件;11) struct files_struct *files用戶打開的文件表;29、Linux如何實現(xiàn)task O(1)調(diào)度每個處理器的可執(zhí)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工勞務(wù)分包單位安全制度
- 建立固定整治日制度
- 市場誠信經(jīng)營制度
- 工業(yè)節(jié)水減排制度
- 小超市消防安全制度
- 雨課堂學(xué)堂在線學(xué)堂云《電視包裝設(shè)計(日照職業(yè)技術(shù)學(xué)院)》單元測試考核答案
- 天津大學(xué)《中國傳統(tǒng)建筑設(shè)計研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 南方科技大學(xué)《鋼琴與即興伴奏一》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧波諾丁漢大學(xué)《輿論學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臺州科技職業(yè)學(xué)院《遙感與地理信息系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 問卷星使用培訓(xùn)
- 心源性腦卒中的防治課件
- 2025年黨員民主評議個人總結(jié)2篇
- 果園合伙經(jīng)營協(xié)議書
- 2026中國民營醫(yī)院集團(tuán)化發(fā)展過程中的人才梯隊建設(shè)專題報告
- 物業(yè)管理經(jīng)理培訓(xùn)課件
- 員工解除競業(yè)協(xié)議通知書
- 【語文】太原市小學(xué)一年級上冊期末試題(含答案)
- 儲能電站員工轉(zhuǎn)正述職報告
- 不銹鋼護(hù)欄施工方案范文
- 商業(yè)地產(chǎn)物業(yè)管理運營手冊
評論
0/150
提交評論