新聞中心
Linux操作系統(tǒng)作為開源操作系統(tǒng),在服務(wù)器等領(lǐng)域具有很高的市場(chǎng)占有率。Linux為了保證其操作系統(tǒng)的穩(wěn)定性和效率,采用了先進(jìn)的進(jìn)程調(diào)度和IO調(diào)度機(jī)制。本文將深入探討Linux進(jìn)程調(diào)度和IO調(diào)度的機(jī)制。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供榆中企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為榆中眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
一、Linux進(jìn)程調(diào)度機(jī)制
進(jìn)程調(diào)度是Linux系統(tǒng)中至關(guān)重要的決策過程,主要是為了使不同的進(jìn)程共享CPU資源,從而滿足不同用戶的需求。進(jìn)程調(diào)度主要分為內(nèi)核級(jí)調(diào)度和用戶級(jí)調(diào)度兩種,其中內(nèi)核級(jí)調(diào)度是負(fù)責(zé)選取就緒進(jìn)程并使其占用CPU的過程,用戶級(jí)調(diào)度是進(jìn)程自身的任務(wù)調(diào)度。內(nèi)核級(jí)調(diào)度主要采用時(shí)間片輪轉(zhuǎn)的算法對(duì)進(jìn)程進(jìn)行調(diào)度。
1. 時(shí)間片輪轉(zhuǎn)調(diào)度
時(shí)間片輪轉(zhuǎn)調(diào)度是最常見的進(jìn)程調(diào)度算法之一,其基本思想是按照時(shí)間片輪流分配CPU時(shí)間給每個(gè)進(jìn)程,保證所有進(jìn)程以大致相同的時(shí)間獲得CPU時(shí)間。當(dāng)進(jìn)程用完時(shí)間片后,該進(jìn)程會(huì)被放入等待隊(duì)列中,等待下一個(gè)時(shí)間片的到來。在Linux內(nèi)核中,時(shí)間片通常設(shè)置為10ms,也就是說每個(gè)進(jìn)程在10ms內(nèi)都有機(jī)會(huì)獲得CPU時(shí)間。
2. 多級(jí)反饋隊(duì)列調(diào)度
多級(jí)反饋隊(duì)列調(diào)度屬于改進(jìn)版的時(shí)間片輪轉(zhuǎn)調(diào)度。其不同之處是隊(duì)列不止一級(jí),每個(gè)隊(duì)列擁有不同的時(shí)間片,根據(jù)進(jìn)程CPU時(shí)間的使用情況,動(dòng)態(tài)調(diào)整進(jìn)程在各個(gè)隊(duì)列之間的位置。當(dāng)進(jìn)程的等待時(shí)間長(zhǎng)時(shí),則會(huì)被移到優(yōu)先級(jí)較高的隊(duì)列中。反之,則會(huì)被移到優(yōu)先級(jí)較低的隊(duì)列中。
3. 實(shí)時(shí)調(diào)度
實(shí)時(shí)調(diào)度是用于響應(yīng)時(shí)間要求較高的任務(wù)的一種進(jìn)程調(diào)度方式。其基本思想是將可用的CPU時(shí)間分配給優(yōu)先級(jí)較高的進(jìn)程。實(shí)時(shí)調(diào)度分為SCHED_FIFO和SCHED_RR兩種類型。SCHED_FIFO采用先入先出的調(diào)度方式,即在進(jìn)程隊(duì)列中優(yōu)先級(jí)更高的進(jìn)程先被執(zhí)行,并一直執(zhí)行到其執(zhí)行完畢或被搶占為止。而SCHED_RR采用輪流調(diào)度的方式,保證每個(gè)進(jìn)程都有機(jī)會(huì)獲得CPU時(shí)間,以防止某個(gè)進(jìn)程無(wú)限制占用CPU時(shí)間。
二、Linux IO調(diào)度機(jī)制
IO調(diào)度機(jī)制是Linux中一種非常重要的調(diào)度分類。其主要作用是協(xié)助內(nèi)核對(duì)塊設(shè)備的IO請(qǐng)求進(jìn)行調(diào)度,提高系統(tǒng)的IO性能。Linux操作系統(tǒng)主要采用了三種IO調(diào)度算法,它們分別是CFQ、NOOP和Deadline。
1. CFQ調(diào)度算法
CFQ調(diào)度算法是基于隊(duì)列長(zhǎng)度的調(diào)度算法。其對(duì)IO請(qǐng)求進(jìn)行排序,使IO請(qǐng)求得到循序漸進(jìn)的服務(wù),以避免某部分請(qǐng)求的等待時(shí)間過長(zhǎng)而影響整體效率。CFQ算法的主要特點(diǎn)是公平、可預(yù)測(cè),適合用于支持多用戶多任務(wù)的操作系統(tǒng)上。
2. NOOP調(diào)度算法
NOOP調(diào)度算法最早應(yīng)用于陣列存儲(chǔ)系統(tǒng)的IO請(qǐng)求調(diào)度中。其基本思想是盡可能地減少調(diào)度開銷,以提高IO處理效率。如果IO請(qǐng)求達(dá)到時(shí),其他IO請(qǐng)求會(huì)被緩沖到隊(duì)列之中,先進(jìn)先出地排隊(duì)等待服務(wù)。
3. Deadline調(diào)度算法
Deadline調(diào)度算法是基于時(shí)間周期的調(diào)度算法。其主要思想是通過IO請(qǐng)求的截止時(shí)間來對(duì)IO請(qǐng)求進(jìn)行調(diào)度,以避免產(chǎn)生延遲的IO請(qǐng)求對(duì)系統(tǒng)產(chǎn)生影響。如果IO請(qǐng)求的截止時(shí)間過長(zhǎng),則會(huì)被分配到更靠后的時(shí)間周期中。
Linux操作系統(tǒng)作為一個(gè)非常成熟,開源的操作系統(tǒng),采用了先進(jìn)的進(jìn)程調(diào)度和IO調(diào)度機(jī)制來提供更加穩(wěn)定和可靠的服務(wù)。進(jìn)程調(diào)度主要采用時(shí)間片輪轉(zhuǎn),多級(jí)反饋隊(duì)列和實(shí)時(shí)調(diào)度等算法。而IO調(diào)度主要采用CFQ、NOOP和Deadline等算法,以提高系統(tǒng)的IO性能。在實(shí)際使用時(shí),可以根據(jù)實(shí)際需要,根據(jù)不同情況選擇不同的進(jìn)程調(diào)度和IO調(diào)度算法,以達(dá)到更好的系統(tǒng)性能表現(xiàn)。
相關(guān)問題拓展閱讀:
- linux進(jìn)程、線程及調(diào)度算法(二)
linux進(jìn)程、線程及調(diào)度算法(二)
執(zhí)行一個(gè) copy,但是只要任何修改,都造成分裂如,修改了chroot,寫memory,mmap,sigaction 等。
p1 是一個(gè) task_struct, p2 也是一個(gè) task_struct. linux內(nèi)核的調(diào)度器只認(rèn)得task_struck (不管你是進(jìn)程還是線程), 對(duì)其進(jìn)行調(diào)度。
p2 的task_struck 被創(chuàng)建出來后,也有一份自己的資源。但是這些資源會(huì)短暫的與p1 相同。
進(jìn)程是區(qū)分資源的單位,你的資源是我的資源,那從概念上將就不叫進(jìn)程。
其他資源都好分配,唯一比較難的是內(nèi)存資源的重新分配。
非常簡(jiǎn)單的程序,但是可以充分說明 COW。
結(jié)果:10 -> 20 -> 10
COW 是嚴(yán)重依賴于CPU中的MMU。CPU如果沒有 MMU,fork 是不能工作的。
在沒有mmu的CPU中,不可能執(zhí)行COW 的,所以只有vfork
vfork與fork相比的不同
P2沒有自己的 task_struct, 也就是說P1 的內(nèi)存資源 就是 P2的內(nèi)存資源。
結(jié)果 10,20,20
vfork:腔寬者
vfork 執(zhí)行上述流程,P2也只是指向了P1的mm,那么將這個(gè)vfork 放大,其巧旅余的也全部clone,共同指向P1,那么就是線程的屬性了。
phtread_create -> Clone()
P1 P2 在內(nèi)核中都是 task_struct. 都可以被調(diào)度。共享資源可調(diào)度,即線程。
這就是線程為什么也叫做輕量級(jí)進(jìn)程
不需要太糾結(jié)線程和進(jìn)程的區(qū)別。
4651 : TGID
, 4653 tid 內(nèi)核中 task_struct 真正的pid
linux 總是白發(fā)人 送 黑發(fā)人。如果父進(jìn)程在子進(jìn)程推出前掛掉了。那么子進(jìn)程應(yīng)該怎么辦?
p3 -> init, p5 -> subreaper
每一個(gè)孤兒都會(huì)找最近的火葬場(chǎng)
可以設(shè)置進(jìn)程的屬性,將其變?yōu)閟ubreaper,會(huì)像1號(hào)進(jìn)程那樣收養(yǎng)孤兒進(jìn)程。
linux的進(jìn)程睡眠依靠等待隊(duì)列,這樣的機(jī)制類似與涉及模式中的訂閱與發(fā)布。
睡眠,分兩種
每一個(gè)進(jìn)程都是創(chuàng)建出來的,那么之一個(gè)進(jìn)程是誰(shuí)創(chuàng)建的呢?
init 進(jìn)程是被linux的
0 進(jìn)程
創(chuàng)建出來的。開機(jī)創(chuàng)建。
父進(jìn)程就是 0 號(hào)進(jìn)程,但在pstree,是看不到0進(jìn)程的。因?yàn)?進(jìn)程創(chuàng)建子進(jìn)程后,就退化成了idle進(jìn)程。
idle進(jìn)程是 linux內(nèi)核里,特殊調(diào)伍薯度類。
所有進(jìn)程都睡眠停止
,則調(diào)度idle進(jìn)程,進(jìn)入到 wait for interrupte 等中斷。此時(shí) cpu及其省電,除非來一個(gè)中斷,才能再次被喚醒。
喚醒后的任何進(jìn)程,從調(diào)度的角度上說,都比idle進(jìn)程地位高。idle是調(diào)度級(jí)別最更低的進(jìn)程。
0 進(jìn)程 一跑,則進(jìn)入等中斷。一旦其他進(jìn)程被喚醒,就輪不到 0進(jìn)程了。
所有進(jìn)程都睡了,0就上來,則cpu需要進(jìn)入省電模式
linux 進(jìn)程調(diào)度 io調(diào)度的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 進(jìn)程調(diào)度 io調(diào)度,深入探討Linux進(jìn)程調(diào)度及IO調(diào)度機(jī)制,linux進(jìn)程、線程及調(diào)度算法(二)的信息別忘了在本站進(jìn)行查找喔。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。
分享標(biāo)題:深入探討Linux進(jìn)程調(diào)度及IO調(diào)度機(jī)制 (linux 進(jìn)程調(diào)度 io調(diào)度)
鏈接分享:http://m.5511xx.com/article/dphijpg.html


咨詢
建站咨詢
