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