新聞中心
探究linux進(jìn)程調(diào)度方式:多樣性與靈活性

成都創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
操作系統(tǒng)作為計(jì)算機(jī)系統(tǒng)中最基礎(chǔ)的軟件,對于優(yōu)化計(jì)算機(jī)資源的利用非常重要。進(jìn)程調(diào)度作為操作系統(tǒng)功能之一,對于現(xiàn)代操作系統(tǒng)來說更是至關(guān)重要。Linux作為一款自由開源軟件,以其穩(wěn)定、可移植性等優(yōu)勢被廣泛應(yīng)用于各個領(lǐng)域。本文將探究Linux進(jìn)程調(diào)度方式的多樣性與靈活性。
1. Linux進(jìn)程調(diào)度方法概述
進(jìn)程調(diào)度即操作系統(tǒng)決定哪個進(jìn)程可以占用處理器和執(zhí)行運(yùn)算。在Linux中,進(jìn)程調(diào)度方法可以分為兩種,一種是基于時間分片的輪轉(zhuǎn)調(diào)度算法,另一種是基于進(jìn)程優(yōu)先級的實(shí)時調(diào)度算法。
輪轉(zhuǎn)調(diào)度算法是最常見的一種進(jìn)程調(diào)度方式,目前在Linux系統(tǒng)中尚屬于最常用的調(diào)度算法之一。它按照時間片的大小時間片輪流分配給每個進(jìn)程,在時間片到期之后,操作系統(tǒng)會暫停當(dāng)前進(jìn)程,然后調(diào)度另一個進(jìn)程來執(zhí)行。
實(shí)時調(diào)度算法則是優(yōu)先級排序的方式,一般通過調(diào)節(jié)進(jìn)程的優(yōu)先級來控制進(jìn)程占用CPU時間。實(shí)時調(diào)度算法有兩類:一類是硬實(shí)時(Hard Real-time),另一類是軟實(shí)時(Soft Real-time)。硬實(shí)時要求必須在規(guī)定的時間內(nèi)完成任務(wù)并且一定的可靠性和精度。軟實(shí)時則要求任務(wù)盡可能地快地完成,但不一定在規(guī)定的時間內(nèi)完成。
2. 多樣性與靈活性展示
在Linux系統(tǒng)中,除了傳統(tǒng)的時間片輪轉(zhuǎn)和實(shí)時調(diào)度算法之外,還有以下幾種進(jìn)程調(diào)度方式,其中的靈活性和多樣性更是體現(xiàn)出Linux的優(yōu)勢。
(1) CFS調(diào)度算法
CFS全稱Completely Fr Scheduler,中文名稱是完全公平調(diào)度器。它是Linux內(nèi)核中早期的全新調(diào)度器,主要針對多核環(huán)境下的輪流分派CPU資源問題,并將關(guān)注的對象從進(jìn)程轉(zhuǎn)向線程,因此它的最小調(diào)度單位是線程。該調(diào)度器有三個特點(diǎn):
其一,基于時間片。時間切片會按照進(jìn)程的優(yōu)先級比例分配。
其二,進(jìn)程調(diào)度優(yōu)先級不算像其他調(diào)度器那般重要。調(diào)度器會試著維持速率將進(jìn)程轉(zhuǎn)移到不同的核心中。
其三,CFS 實(shí)現(xiàn)公平調(diào)度的機(jī)制是基于當(dāng)前活動進(jìn)程的虛擬運(yùn)行時間比值。
(2) MCG調(diào)度算法
MCG全稱Mixed-Criticality Guarantee,中文名稱是混合型嚴(yán)格調(diào)度器,是Linux上面一種全新的實(shí)時調(diào)度器。這種調(diào)度器比普通實(shí)時調(diào)度器更加嚴(yán)格,它通過在硬實(shí)時區(qū)域中保持全嚴(yán)格實(shí)時保障來消除混雜型系統(tǒng)帶來的難題。該調(diào)度器滿足多個嚴(yán)格實(shí)時應(yīng)用程序同時運(yùn)行在一個系統(tǒng)中,但必須確保相互不干擾。
多單元調(diào)度架構(gòu)是MCG調(diào)度器的重要特點(diǎn)。該調(diào)度機(jī)制在系統(tǒng)中有多個實(shí)時單位,并以不同的方式進(jìn)行調(diào)度。
(3) NOVA調(diào)度算法
NOVA調(diào)度算法是一種使用優(yōu)先級和均衡調(diào)度在單個線程上執(zhí)行的實(shí)時多線程調(diào)度器,其設(shè)計(jì)目標(biāo)是提高Linux并行執(zhí)行的吞吐量。在NOVA調(diào)度器中,進(jìn)程的調(diào)度是基于線程組,每個線程組都有一個優(yōu)先級,并且線程組中的所有線程都有相同的優(yōu)先級,這樣可以簡化調(diào)度器的實(shí)現(xiàn)。
(NOVA &) Multipath IO
NOVA(Network over VMware Architecture)算法基于線程組的調(diào)度,構(gòu)造“hyper-thread”的調(diào)度機(jī)制,它有以下兩個特點(diǎn):
其一,NOVA調(diào)度器的最小調(diào)度單位是線程組,可以很好地避免線程間的競爭,提高調(diào)度效率。
其二,它可以根據(jù)CPU負(fù)載情況自適應(yīng)地調(diào)整線程組的優(yōu)先級和CPU占用量,以提高系統(tǒng)的整體性能和穩(wěn)定性。
3.
Linux之所以能夠成功,其靈活性和多樣性必不可少。Linux對調(diào)度算法進(jìn)行了優(yōu)化,使得其具有更高的靈活性,多樣性和適應(yīng)性。同時,Linux也為不同的環(huán)境提供不同的調(diào)度算法,以確保適用性。Linux由于Modular(可模塊化),Portability(可移植性),以及Open Source(開源)等特點(diǎn),使得它在各個領(lǐng)域中受到追捧,成為不可替代的操作系統(tǒng)之一。
相關(guān)問題拓展閱讀:
- linux進(jìn)程調(diào)度的三種策略是什么?
linux進(jìn)程調(diào)度的三種策略是什么?
進(jìn)程調(diào)度策略就是調(diào)度系統(tǒng)種哪一個進(jìn)程來CPU運(yùn)行。這種調(diào)度分2層考慮。 之一層,進(jìn)程狀態(tài)這個是更優(yōu)先考慮的,也就是說優(yōu)先級更高的。在linux中只有就緒態(tài)的進(jìn)程才有可能會被調(diào)度選中然后占有CPU,其它狀態(tài)的進(jìn)程不可能占有的到CPU。下面是linux中進(jìn)程的狀態(tài)TASK_RUNNING:就緒狀態(tài),得到CPU就可以運(yùn)行。
TASK_INTERRUPTIBLE:淺度睡眠,資源到位或者受到信號就會變成就緒態(tài)。
TASK_UNINTERRUPTIBLE:深度睡眠,資源到位就會進(jìn)入就緒態(tài),不響應(yīng)信號。
TASK_ZOMBIE:僵死態(tài),進(jìn)程exit后。
TASK_STOPPED:暫停態(tài),收到SIG_CONT信號進(jìn)入就緒態(tài)。 第二層,其實(shí)真正在操作系統(tǒng)中的實(shí)現(xiàn),就是所有就緒態(tài)進(jìn)程鏈接成一個隊(duì)列,進(jìn)程調(diào)度時候只會考慮這個隊(duì)列中的進(jìn)程,對其它的進(jìn)程不考慮,這就實(shí)現(xiàn)了之一層中的要求。接下來就是就緒隊(duì)列內(nèi)部各個進(jìn)程的競爭了。 Linux采用3種不同的調(diào)度政策,SCHED_FIFO(下面簡寫成FIFO,先來先服務(wù)),SCHED_RR(簡寫成RR,時間片輪流),SCHED_OTHER(下面簡寫成OTHER)。這里大家就能看出一個問題,采用同等調(diào)度政策的進(jìn)程之間自然有可比性,Linux3種調(diào)度政策并存,那么不同調(diào)度政策間的進(jìn)程如何比較呢?可以說他們之間根本就沒有可比性。其實(shí)在調(diào)度時候,調(diào)度只看一個指標(biāo),那就是各個進(jìn)程所具有的權(quán)值,權(quán)值更大的且在可執(zhí)行隊(duì)列中排慶祥在最前面的就會被調(diào)度執(zhí)行。而權(quán)值的計(jì)算才會設(shè)計(jì)到各方面因素,其中調(diào)度政策可以說在計(jì)算權(quán)值中,份量是最重的。 為什么Linux要這么干呢?這是由于事務(wù)的多樣性決定的,進(jìn)程有實(shí)時性進(jìn)程和非實(shí)時性的進(jìn)程2種,F(xiàn)IFO和RR是用來支持實(shí)時性進(jìn)程的調(diào)度,我們看一下這3種政策下權(quán)值的計(jì)算公式就明白了:FIFO和RR計(jì)算公式,權(quán)值=1000+進(jìn)程真正的運(yùn)行時間OTHER計(jì)算公式,當(dāng)時間片為0時,權(quán)值=0.當(dāng)時間片不為0時候,權(quán)值=剩余時間片+20-nice,同時如果是內(nèi)核線程有+1的小加分,這是因?yàn)閮?nèi)核線程無需用戶空間的切換,所以給它加了一分,獎勵他在進(jìn)程切換時候開銷小的功勞。時間片好理解,那么nice這個值,用過linux系統(tǒng)的人都知道晌差培,這是一個從unix下繼承過來的概念,表示謙讓度,是一個從20~-19的數(shù),可以通過nice和renice指令來設(shè)置。從代碼中也能看到值越小就越不會謙讓他人。 從這里我們看出FIFO和RR至少有1000的基數(shù),所以在有FIFO和RR調(diào)度政策進(jìn)程存在時,OTHER進(jìn)程是沒有機(jī)會被調(diào)度的到的。從權(quán)值計(jì)算公式同時也能看出,F(xiàn)IFO先來先服務(wù)的調(diào)度政策滿足了,但RR這個時間片輪流的調(diào)度如果按照這種權(quán)值計(jì)宴唯算是不能滿足時間片輪流這一概念的。這里只是權(quán)值的計(jì)算,在調(diào)度時候?qū)R政策的進(jìn)程特殊處理。 以上都是權(quán)值計(jì)算,下面看看真正的調(diào)度過程,首先是對RR政策進(jìn)程的特殊處理,如果當(dāng)前進(jìn)程采用的RR政策,那么看他的時間片是否用完,用完了就踢到就緒隊(duì)列尾部,同時恢復(fù)他的時間片。然后是便利整個就緒隊(duì)列,找到之一個權(quán)值更大的進(jìn)程來運(yùn)行。 整體調(diào)度效果就是:如果有FIFO和RR政策的進(jìn)程,就優(yōu)先調(diào)度他們2個,他們之間看已執(zhí)行時間長短決定勝負(fù),而2種政策內(nèi)部則遵守各自調(diào)度政策。而OTHER只有在前面2種不存在于就緒隊(duì)列時候才有可能執(zhí)行,他們實(shí)際也是輪流執(zhí)行,但他們之間是靠剩余時間和NICE值來決定勝負(fù)。同時就緒隊(duì)列中排在最前面的更優(yōu)先考慮在同樣權(quán)值情況下。
linux內(nèi)核的三種主要調(diào)度策略:
1,SCHED_OTHER 分時調(diào)度策略,
2,SCHED_FIFO實(shí)時調(diào)度策略,先到先服務(wù)
3,SCHED_RR實(shí)時調(diào)度策略,時間片輪轉(zhuǎn)
實(shí)時進(jìn)程將得到優(yōu)先調(diào)用,實(shí)時進(jìn)程根據(jù)實(shí)時
優(yōu)先級
決定調(diào)度權(quán)值。分時進(jìn)程則通過nice和counter值決定權(quán)值,nice越小,counter越大,被調(diào)度的汪廳概率越大,也就是曾經(jīng)使用了cpu最少的進(jìn)程將會得到優(yōu)先調(diào)度。
SHCED_RR和SCHED_FIFO的不同:
當(dāng)采用SHCED_RR策略的進(jìn)程的時間片用完,系統(tǒng)將重新分配時間片,并置于就緒隊(duì)列尾。放在隊(duì)列尾保證了所有具有相同優(yōu)先級的RR任務(wù)的調(diào)度公平。
SCHED_FIFO一旦占用cpu則一直運(yùn)行。一直運(yùn)行直到有更高優(yōu)先級任務(wù)到達(dá)或自己放棄。
如果有相同優(yōu)先級的實(shí)時進(jìn)程(根據(jù)優(yōu)先級計(jì)算的調(diào)度權(quán)值是一樣的)已經(jīng)準(zhǔn)備好,F(xiàn)IFO時必須等待該進(jìn)程主動放棄后才可以運(yùn)行這個優(yōu)先級相同的任務(wù)。而RR可以讓每個任務(wù)都執(zhí)行一段時間。
相同點(diǎn):
RR和FIFO都只用于實(shí)時任務(wù)。
創(chuàng)建時優(yōu)先級大于0(1-99)。
按照可搶占優(yōu)先級調(diào)度算法進(jìn)行。
就緒態(tài)的實(shí)時任務(wù)立即搶占非實(shí)時任務(wù)。
所旅陵如有任務(wù)都采用linux分時調(diào)度策略時:
1,創(chuàng)建任務(wù)指定采用分時調(diào)度策略,并指定優(yōu)先級nice值(-20~19)。
2,將根據(jù)每個任務(wù)的nice值確定在cpu上的執(zhí)行時間(counter)。
3,如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
4,調(diào)度程序遍歷就緒隊(duì)列中的任務(wù),通過對每個任務(wù)動態(tài)優(yōu)先級的計(jì)算權(quán)值(counter+20-nice)結(jié)果,選擇計(jì)算結(jié)果更大的一個去運(yùn)行,當(dāng)這個時間片用完后(counter減至0)或者主動放棄cpu時,該任務(wù)將被放在就緒隊(duì)列末尾(時間片用完)或等待隊(duì)列(因等待資源而放棄cpu)中。
5,此時調(diào)度程序重復(fù)上面計(jì)算過程,轉(zhuǎn)到第4步。
6,當(dāng)調(diào)度程序發(fā)現(xiàn)所有就緒任務(wù)計(jì)算所得的權(quán)值都為不大于0時,重復(fù)第2步。
所有任務(wù)都采用FIFO時:
1,創(chuàng)建進(jìn)程時指定采用FIFO,并設(shè)置實(shí)時優(yōu)先級rt_priority(1-99)。
2,如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
3,調(diào)度程序遍歷就緒隊(duì)列,根據(jù)實(shí)時優(yōu)先級計(jì)算調(diào)度權(quán)值(1000+rt_priority),選擇權(quán)值更高的任務(wù)使用cpu,該FIFO任務(wù)將一直占有cpu直到有優(yōu)先級更高的任務(wù)就緒(即使優(yōu)先級相同也不行)或者主動放棄(等待資源)。
4,調(diào)度程序發(fā)現(xiàn)有優(yōu)先級更高的任務(wù)到達(dá)(高優(yōu)先級任務(wù)可能被中斷或定時器任務(wù)喚醒,再或被當(dāng)前運(yùn)行的任務(wù)喚醒,等等),則調(diào)度程序立即在當(dāng)前任務(wù)
堆棧
中保存當(dāng)前cpu
寄存器
的所有數(shù)據(jù),重新從高優(yōu)先級任務(wù)的堆棧中加載寄存器數(shù)據(jù)到cpu,此時高優(yōu)先級的任務(wù)開始運(yùn)行。重復(fù)第3步。
5,如果當(dāng)前任務(wù)因等待資源而主動放棄cpu使用權(quán),則該任務(wù)將從就緒隊(duì)列中刪除,加入等待隊(duì)列,此時重復(fù)第3步。
所有任務(wù)都采用RR調(diào)度策略時:
1,創(chuàng)建任務(wù)時指定調(diào)度參數(shù)為RR,并設(shè)置任務(wù)的實(shí)時優(yōu)先級和nice值(nice值將會轉(zhuǎn)換為該任務(wù)的時間片的長度)。
2,如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
3,調(diào)度程序遍歷就緒隊(duì)列,根據(jù)實(shí)時優(yōu)先級計(jì)算調(diào)度權(quán)值(1000+rt_priority),選擇權(quán)值更高的任務(wù)使用cpu。
4,如果就緒隊(duì)列中的RR任務(wù)時間片為0,則會根據(jù)nice值設(shè)置該任務(wù)的時間片,同時將該任務(wù)放入就緒隊(duì)列的末尾。重復(fù)步驟3。
5,當(dāng)前任務(wù)由于等待資源而主動退出cpu,則其加入等待隊(duì)列中。重復(fù)步驟3。
系統(tǒng)中既有分時調(diào)度,又有時間片輪轉(zhuǎn)調(diào)度和先進(jìn)先出調(diào)度:
1,RR調(diào)度和FIFO調(diào)度的進(jìn)程屬于實(shí)時進(jìn)程,以分時調(diào)度的進(jìn)程是非實(shí)時進(jìn)程。
2,當(dāng)實(shí)時進(jìn)程準(zhǔn)備就緒后,如果當(dāng)前cpu正在運(yùn)行非實(shí)時進(jìn)程,則實(shí)時進(jìn)程立即搶占非實(shí)時進(jìn)程。
3,RR進(jìn)程和FIFO進(jìn)程都采用實(shí)時優(yōu)先級做為調(diào)度的權(quán)值標(biāo)準(zhǔn),RR是FIFO的一個延伸。FIFO時,如果兩個進(jìn)程的優(yōu)先級一樣,則這兩個優(yōu)先級一樣的進(jìn)程具體執(zhí)行哪一個是由其在隊(duì)列拆啟中的未知決定的,這樣導(dǎo)致一些不公正性(優(yōu)先級是一樣的,為什么要讓你一直運(yùn)行?),如果將兩個優(yōu)先級一樣的任務(wù)的調(diào)度策略都設(shè)為RR,則保證了這兩個任務(wù)可以循環(huán)執(zhí)行,保證了公平。
Ingo Molnar-實(shí)時補(bǔ)丁
為了能并入主流內(nèi)核,Ingo Molnar的實(shí)時補(bǔ)丁也采用了非常靈活的策略,它支持四種搶占模式:
1.No Forced Preemption (Server),這種模式等同于沒有使能搶占選項(xiàng)的標(biāo)準(zhǔn)內(nèi)核,主要適用于科學(xué)計(jì)算等服務(wù)器環(huán)境。
2.Voluntary Kernel Preemption (Desktop),這種模式使能了自愿搶占,但仍然失效搶占內(nèi)核選項(xiàng),它通過增加搶占點(diǎn)縮減了搶占延遲,因此適用于一些需要較好的響應(yīng)性的環(huán)境,如桌面環(huán)境,當(dāng)然這種好的響應(yīng)性是以犧牲一些吞吐率為代價的。
3.Preemptible Kernel (Low-Latency Desktop),這種模式既包含了自愿搶占,又使能了可搶占內(nèi)核選項(xiàng),因此有很好的響應(yīng)延遲,實(shí)際上在一定程度上已經(jīng)達(dá)到了軟實(shí)時性。它主要適用于桌面和一些
嵌入式系統(tǒng)
,但是吞吐率比模式2更低。
4.Complete Preemption (Real-Time),這種模式使能了所有實(shí)時功能,因此完全能夠滿足軟實(shí)時需求,它適用于延遲要求為100微秒或稍低的實(shí)時系統(tǒng)。
實(shí)現(xiàn)實(shí)時是以犧牲系統(tǒng)的吞吐率為代價的,因此實(shí)時性越好,系統(tǒng)吞吐率就越低。
關(guān)于linux進(jìn)程調(diào)度方式的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章標(biāo)題:探究linux進(jìn)程調(diào)度方式:多樣性與靈活性(linux進(jìn)程調(diào)度方式)
當(dāng)前網(wǎng)址:http://m.fisionsoft.com.cn/article/djephgc.html


咨詢
建站咨詢
