段文超
摘要:Linux操作系統(tǒng)具有其他操作系統(tǒng)所不具備的優(yōu)勢(shì),但是,在系統(tǒng)內(nèi)核方面還存在一定的不足,其中包括系統(tǒng)內(nèi)核調(diào)度算法問題和系統(tǒng)內(nèi)核中基于優(yōu)先級(jí)的可搶占式調(diào)度策略問題。針對(duì)這兩個(gè)問題,該文提出了一些個(gè)人的建議。
關(guān)鍵詞:Linux操作系統(tǒng);內(nèi)核;調(diào)度
中圖分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)13-0071-02
Linux操作系統(tǒng)在某些因素上面優(yōu)越于其他的操作系統(tǒng),例如Linux操作系統(tǒng)能夠被免費(fèi)試用。這些都給了用戶很大的便利性,同時(shí),也為賦予了自身很大的提升空間。為了能夠?qū)inux操作系統(tǒng)內(nèi)核問題有一個(gè)清晰的了解,本文主要是以黃義文的《Linux操作系統(tǒng)內(nèi)核裁剪的分析》和楊瑞的《Linux操作系統(tǒng)內(nèi)核分析與研究》為基礎(chǔ),在兩篇文獻(xiàn)當(dāng)中,都對(duì)Linux操作系統(tǒng)內(nèi)核問題進(jìn)行了探討,下邊將以此為基礎(chǔ),本文將會(huì)對(duì)Linux操作系統(tǒng)的內(nèi)核問題做一些探討。
根據(jù)兩篇文獻(xiàn)來看,在這個(gè)操作系統(tǒng)當(dāng)中,其最為核心的部分其實(shí)就是內(nèi)核部分,從Linux操作系統(tǒng)的內(nèi)核構(gòu)成來看,主要是包括CPU、網(wǎng)絡(luò)通信、文件系統(tǒng)等多個(gè)部分的內(nèi)容。Linux操作系統(tǒng)包括多個(gè)子系統(tǒng),而且,所有子系統(tǒng)的運(yùn)作,都與Linux操作系統(tǒng)中的內(nèi)核有一定的聯(lián)系。因此,內(nèi)核是整個(gè)Linux操作系統(tǒng)中最為關(guān)鍵的組成部分。Linux操作系統(tǒng)內(nèi)核與其他的微內(nèi)核系統(tǒng)有著很多的差異性,用戶服務(wù)是微內(nèi)核最為關(guān)注的內(nèi)容,用戶服務(wù)要求內(nèi)核能夠提供更加簡(jiǎn)潔和更高頻率的服務(wù),但是,這些服務(wù)的完成都需要微內(nèi)核的支持。在Linux操作系統(tǒng)不斷發(fā)展的情況下,微內(nèi)核也隨之不斷地發(fā)展,從實(shí)際效果來看,Linux操作系統(tǒng)得到了不斷地完善,在這樣的情況下,微內(nèi)核的應(yīng)用效率得到了有效的提升。另外,Linux操作系統(tǒng)易于移植是其一個(gè)重要的特性,將Linux操作系統(tǒng)進(jìn)行不同的內(nèi)核編譯,然后其就能夠被用于各類系統(tǒng)當(dāng)中,而且能夠正常的運(yùn)行。
目前來講,Linux操作系統(tǒng)的內(nèi)核主要有四個(gè)部分的內(nèi)容:1)用戶應(yīng)用程序。這是Linux操作系統(tǒng)當(dāng)中所有軟件的一種集合。2)系統(tǒng)調(diào)用庫(kù),這是用戶應(yīng)用程序能夠?qū)崿F(xiàn)的唯一途徑。3)Linux操作系統(tǒng)的內(nèi)核。內(nèi)核是一個(gè)系統(tǒng)的核心,主要是對(duì)硬件資源的訪問,在系統(tǒng)啟動(dòng)并且運(yùn)行的時(shí)候,可以對(duì)磁盤和內(nèi)存中的文件進(jìn)行有效的處理;4)硬件。這主要是指系統(tǒng)當(dāng)中的物理設(shè)備。Linux操作系統(tǒng)能否被正常的運(yùn)行,其實(shí)與系統(tǒng)本身有著重要的聯(lián)系,而內(nèi)核的擴(kuò)展,系統(tǒng)調(diào)用接口的擴(kuò)展等都是系統(tǒng)內(nèi)核生存的重要內(nèi)容。
從分析研究來看,Linux操作系統(tǒng)內(nèi)核有這個(gè)幾個(gè)方面的優(yōu)勢(shì):1)搶占內(nèi)核;2)能夠更加有效的調(diào)度程序,在Linux2.6版本當(dāng)中,就采用了O(1)算法,能夠滿足在高負(fù)荷工作條件下完成程序的調(diào)度。3)同步原型與共享內(nèi)存。Linux系統(tǒng)內(nèi)核采用互斥方法來實(shí)現(xiàn)資源任務(wù)的針對(duì)性,線程在繼續(xù)執(zhí)行時(shí),就會(huì)丟掉消耗時(shí)間的系統(tǒng)程序調(diào)用。
針對(duì)Linux操作系統(tǒng)內(nèi)核調(diào)度算法問題,在Linux2.6版當(dāng)中,其采用了O(1)調(diào)度器,其的目的是為了能夠提高Linux內(nèi)核的實(shí)時(shí)性能,并且擴(kuò)展CPU處理器的并行性。從實(shí)際的效果來看,保留了2.4版本中的給予優(yōu)先級(jí)的調(diào)度、調(diào)度的公平性等優(yōu)點(diǎn),而且還呈現(xiàn)出很多其他優(yōu)點(diǎn):提高了SMP可擴(kuò)展性、提高了SMP親和度、優(yōu)化計(jì)算密集型的批處理任務(wù)調(diào)度等。不過從實(shí)際的應(yīng)用情況來看,其還存在著一定的問題。在Linux操作系統(tǒng)系統(tǒng)當(dāng)中,其會(huì)將進(jìn)程自動(dòng)劃分為進(jìn)程和普通進(jìn)程兩類,然后通過多級(jí)輪轉(zhuǎn)調(diào)度的算法,按照優(yōu)先級(jí)的方式,逐步的實(shí)現(xiàn)這些進(jìn)程的運(yùn)行。Linux的優(yōu)先級(jí)分配根據(jù)的是進(jìn)程的價(jià)值,而不是進(jìn)程的響應(yīng)最終期限和資源占用時(shí)間,根本不能滿足實(shí)時(shí)任務(wù)的要求。在本文的研究中,認(rèn)為內(nèi)核的調(diào)度算法是綜合考慮最終期限、任務(wù)頻率等在內(nèi)的一種調(diào)度算法,其能夠提升Linux內(nèi)核的實(shí)用性。在算法應(yīng)用方面,可以以EDF算法作為基礎(chǔ),其中最重要的一個(gè)環(huán)節(jié)是在相同優(yōu)先級(jí)的進(jìn)程當(dāng)中,建立散列表,在這個(gè)表當(dāng)中,可以根據(jù)程序的應(yīng)用頻率,做一個(gè)降序處理,在整個(gè)散列表當(dāng)中,那些在第一位的進(jìn)程,就是系統(tǒng)當(dāng)中所有程序應(yīng)用頻率最高的程序,因此,在就要求在優(yōu)先級(jí)層面,應(yīng)當(dāng)建立更多的進(jìn)程。另外,在對(duì)這些優(yōu)先級(jí)的程序做出處理的時(shí)候,首先就是查看是否存在這些進(jìn)程,然后再根據(jù)散列表中的進(jìn)程排序進(jìn)行實(shí)時(shí)的調(diào)度。
針對(duì)Linux操作系統(tǒng)內(nèi)核中基于優(yōu)先級(jí)的可搶占式調(diào)度策略問題,在實(shí)際應(yīng)用的調(diào)度過程中,有時(shí)可能會(huì)出現(xiàn)一種比較奇怪的情況:由于所有程序共用所有的資源,那些高優(yōu)先級(jí)的任務(wù)可能會(huì)被低優(yōu)先級(jí)的任務(wù)堵塞,反而讓中優(yōu)先級(jí)任務(wù)在高優(yōu)先級(jí)任務(wù)之前得到執(zhí)行,從而導(dǎo)致許多嚴(yán)重后果。這通常被稱為優(yōu)先級(jí)反轉(zhuǎn)問題。在新的Linux的內(nèi)核設(shè)計(jì)當(dāng)中,并沒有采用可搶占實(shí)時(shí)調(diào)度,因此,這并不能夠?qū)?yōu)先級(jí)反轉(zhuǎn)問題進(jìn)行解決,針對(duì)這個(gè)問題,可以通過優(yōu)先級(jí)繼承策略來進(jìn)行解決。優(yōu)先級(jí)繼承的理念是:當(dāng)優(yōu)先級(jí)任務(wù)堵塞了另一個(gè)高優(yōu)先級(jí)任務(wù)的情況下,其能夠忽略自身的優(yōu)先級(jí),并且使其他的高優(yōu)先級(jí)任務(wù)能夠被執(zhí)行,這樣就能夠?qū)⒃撊蝿?wù)所占據(jù)的資源釋放出來。另外,在Linux操作系統(tǒng)的源代碼當(dāng)中,也應(yīng)當(dāng)做相應(yīng)的修改,新增加的一個(gè)鏈表結(jié)構(gòu),保存所有對(duì)該資源表成功上鎖的進(jìn)程指針和進(jìn)程原有的優(yōu)先級(jí),同時(shí)增加一項(xiàng)一記錄,用來記錄當(dāng)前對(duì)資源表上鎖的進(jìn)程的最高優(yōu)先級(jí)。當(dāng)一個(gè)進(jìn)程對(duì)資源表進(jìn)行上鎖的時(shí)候,那么這個(gè)進(jìn)程的指針以及原有的優(yōu)先級(jí)就應(yīng)當(dāng)被保存在資源表的上鎖程序當(dāng)中,如果這個(gè)進(jìn)程的優(yōu)先級(jí)高于資源表中所保存的最高優(yōu)先級(jí),那么就要更新進(jìn)程記錄。當(dāng)進(jìn)程申請(qǐng)一個(gè)資源表不成功的時(shí)候,如果該進(jìn)程優(yōu)先級(jí)大于資源表的最高優(yōu)先級(jí),則修改所有對(duì)該資源表進(jìn)行上鎖操作的進(jìn)程的優(yōu)先級(jí),使它們等于該進(jìn)程的優(yōu)先級(jí),同時(shí)更新資源表最高優(yōu)先級(jí)記錄,然后將進(jìn)程插入到資源表的等待隊(duì)列,如果不大于,則直接將進(jìn)程插入到資源表的等待隊(duì)列。當(dāng)進(jìn)程釋放一個(gè)資源表時(shí),若該進(jìn)程的優(yōu)先級(jí)小于或等于資源表記錄的最高優(yōu)先級(jí),則用在該資源表中保存的該進(jìn)程的原有優(yōu)先級(jí)恢復(fù)其優(yōu)先級(jí),否則不需要恢復(fù)進(jìn)程的優(yōu)先級(jí)。
綜上所述,在Linux操作系統(tǒng)內(nèi)核的實(shí)際工作當(dāng)中,雖然其本身具有很多的優(yōu)勢(shì),但是,仍然存在很多的問題,其中最為典型的問題就是實(shí)時(shí)調(diào)度算法問題以及優(yōu)先反轉(zhuǎn)問題,針對(duì)這兩個(gè)問題,本文提出了一些解決對(duì)策,這對(duì)于Linux系統(tǒng)內(nèi)核的進(jìn)一步改善有著重要的現(xiàn)實(shí)意義。
參考文獻(xiàn):
[1] 黃義文.Linux操作系統(tǒng)內(nèi)核裁剪的分析[J].中國(guó)民航飛行學(xué)院學(xué)報(bào),2010(3).
[2] 楊瑞.Linux操作系統(tǒng)內(nèi)核分析與研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2015(1).