自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解經(jīng)典的進(jìn)程調(diào)度算法

開(kāi)發(fā) 前端 算法
文中的很多圖片來(lái)源我考研時(shí)看的網(wǎng)課,B 站上應(yīng)該還能找到,王道考研出品的操作系統(tǒng)系列,各位可以去看看,適用于考試,不太適用于春招秋招,因?yàn)橹R(shí)點(diǎn)講的太細(xì),邊邊角角都會(huì)講到,各位可以挑幾個(gè)章節(jié)去看。

[[382804]]

本文轉(zhuǎn)載自微信公眾號(hào)「飛天小牛肉」,作者飛天小牛肉。轉(zhuǎn)載本文請(qǐng)聯(lián)系飛天小牛肉公眾號(hào)。

文中的很多圖片來(lái)源我考研時(shí)看的網(wǎng)課,B 站上應(yīng)該還能找到,王道考研出品的操作系統(tǒng)系列,各位可以去看看,適用于考試,不太適用于春招秋招,因?yàn)橹R(shí)點(diǎn)講的太細(xì),邊邊角角都會(huì)講到,各位可以挑幾個(gè)章節(jié)去看。全文脈絡(luò)思維導(dǎo)圖如下:

1. 調(diào)度的概念

當(dāng) CPU 有一堆任務(wù)要處理時(shí),由于其資源有限,這些事情就沒(méi)法同時(shí)處理。這就需要確定某種規(guī)則來(lái)決定處理這些任務(wù)的順序,這就是 “調(diào)度” 研究的問(wèn)題。除了接下來(lái)將要說(shuō)的進(jìn)程調(diào)度,還有作業(yè)調(diào)度、內(nèi)存調(diào)度等。

回顧一下進(jìn)程的三態(tài)模型:

  • 「運(yùn)行態(tài)」(running):進(jìn)程占有 CPU 正在運(yùn)行。
  • 「就緒態(tài)」(ready):進(jìn)程具備運(yùn)行條件,等待系統(tǒng)分配 CPU 以便運(yùn)行。
  • 「阻塞態(tài)」 / 等待態(tài)(wait):進(jìn)程不具備運(yùn)行條件,正在等待某個(gè)事件的完成。

所謂進(jìn)程調(diào)度,就是「從進(jìn)程的就緒隊(duì)列(阻塞)中按照一定的算法選擇一個(gè)進(jìn)程并將 CPU 分配給它運(yùn)行」,以實(shí)現(xiàn)進(jìn)程的并發(fā)執(zhí)行。這是操作系統(tǒng)中最基本(最低級(jí))的一種調(diào)度,在一般的操作系統(tǒng)中都必須配置進(jìn)程調(diào)度。進(jìn)程調(diào)度的頻率很高,一般幾十毫秒一次。

2. 非搶占式進(jìn)程調(diào)度算法

所謂非搶占式的意思就是,當(dāng)進(jìn)程正在運(yùn)行時(shí),它就會(huì)一直運(yùn)行,直到該進(jìn)程完成或發(fā)生某個(gè)事件發(fā)生而被阻塞時(shí),才會(huì)把 CPU 讓給其他進(jìn)程。

對(duì)應(yīng)的,搶占式的意思就是,當(dāng)進(jìn)程正在運(yùn)行的時(shí),可以被打斷,把 CPU 讓給其他進(jìn)程。

① 先到先服務(wù) FCFS

先來(lái)先服務(wù)調(diào)度算法(First Come First Serve,F(xiàn)CFS):按照進(jìn)程到達(dá)的先后順序進(jìn)行調(diào)度,「先到的進(jìn)程就先被調(diào)度」,也就是說(shuō),等待時(shí)間越久的越優(yōu)先得到服務(wù)。

優(yōu)點(diǎn):公平、算法實(shí)現(xiàn)簡(jiǎn)單

缺點(diǎn):對(duì)短進(jìn)程不利。排在長(zhǎng)進(jìn)程后面的短進(jìn)程需要等待很長(zhǎng)時(shí)間,短進(jìn)程的響應(yīng)時(shí)間太長(zhǎng)了,用戶交互體驗(yàn)會(huì)變差。

② 最短作業(yè)優(yōu)先 SJF

最短作業(yè)/進(jìn)程優(yōu)先調(diào)度算法(Shortest Job First,SJF):「每次調(diào)度時(shí)選擇當(dāng)前已到達(dá)的、且運(yùn)行時(shí)間最短的進(jìn)程」。

最短作業(yè)優(yōu)先算法和先到先服務(wù)恰好相反,先到先服務(wù)對(duì)短進(jìn)程不利,而最短作業(yè)優(yōu)先算法對(duì)長(zhǎng)程不利。因?yàn)槿绻恢庇卸踢M(jìn)程到來(lái),那么長(zhǎng)進(jìn)程永遠(yuǎn)得不到調(diào)度,長(zhǎng)進(jìn)程有可能會(huì)餓死,處于一直等待短作業(yè)執(zhí)行完畢的狀態(tài)。

③ 高響應(yīng)比優(yōu)先 HRRN

高響應(yīng)比優(yōu)先算法(Highest Response Ratio Next,HRRN):只有當(dāng)前運(yùn)行的進(jìn)程主動(dòng)放棄 CPU 時(shí)(正常/異常完成,或主動(dòng)阻塞),才需要進(jìn)行調(diào)度,「調(diào)度時(shí)計(jì)算所有就緒進(jìn)程的響應(yīng)比,為響應(yīng)比最高的進(jìn)程分配 CPU」。響應(yīng)比 = (進(jìn)程的等待時(shí)間 + 進(jìn)程需要的運(yùn)行時(shí)間) / 進(jìn)程需要的運(yùn)行時(shí)間

3. 搶占式進(jìn)程調(diào)度算法

搶占就是指當(dāng)進(jìn)程正在運(yùn)行的時(shí),可以被打斷,把 CPU 讓給其他進(jìn)程。搶占的原則一般有三種,分別是時(shí)間片原則、優(yōu)先權(quán)原則、短作業(yè)優(yōu)先原則。

① 最短剩余時(shí)間優(yōu)先 SRTN

最短剩余時(shí)間優(yōu)先(Shortest Remaining Time Next,SRTN)算法是「最短作業(yè)優(yōu)先的搶占式版本」。

「當(dāng)一個(gè)新的進(jìn)程到達(dá)時(shí),把它所需要的整個(gè)運(yùn)行時(shí)間與當(dāng)前進(jìn)程的剩余運(yùn)行時(shí)間作比較。如果新的進(jìn)程需要的時(shí)間更少,則掛起當(dāng)前進(jìn)程,運(yùn)行新的進(jìn)程,否則新的進(jìn)程等待。」

② 輪轉(zhuǎn)調(diào)度算法 RR

輪轉(zhuǎn)調(diào)度算法(Round Robin,RR)也稱時(shí)間片調(diào)度算法:調(diào)度程序每次把 CPU 分配給就緒隊(duì)列首進(jìn)程使用規(guī)定的時(shí)間間隔,稱為時(shí)間片,通常為 10ms ~ 200ms,「就緒隊(duì)列中的每個(gè)進(jìn)程輪流地運(yùn)行一個(gè)時(shí)間片,當(dāng)時(shí)間片耗盡時(shí)就強(qiáng)迫當(dāng)前運(yùn)行進(jìn)程讓出 CPU 資源,轉(zhuǎn)而排到就緒隊(duì)列尾部,等待下一輪調(diào)度」。所以,一個(gè)進(jìn)程一般都需要多次輪轉(zhuǎn)才能完成。

輪轉(zhuǎn)調(diào)度算法對(duì)每個(gè)進(jìn)程都一視同仁,就好比大家都排好隊(duì),一個(gè)一個(gè)來(lái),每個(gè)人都運(yùn)行一會(huì)兒再接著重新排隊(duì)等待運(yùn)行。

需要注意的是:時(shí)間片的長(zhǎng)度是一個(gè)很關(guān)鍵的因素:

  • 如果時(shí)間片設(shè)置得太短,就會(huì)導(dǎo)致頻繁的進(jìn)程上下文切換,降低了 CPU 效率;
  • 如果時(shí)間片設(shè)置得太長(zhǎng),那么隨著就緒隊(duì)列中進(jìn)程數(shù)目的增加,輪轉(zhuǎn)一次消耗的總時(shí)間加長(zhǎng),即每隔進(jìn)程的相應(yīng)速度放慢。甚至?xí)r間片大到讓進(jìn)程足以完成其所有任務(wù),RR 調(diào)度算法便退化成 FCFS 算法。

4. 最高優(yōu)先級(jí)調(diào)度算法 HPF

RR 調(diào)度算法對(duì)所有的進(jìn)程都是相同的策略,如果用戶進(jìn)程太多,可能會(huì)導(dǎo)致內(nèi)核的服務(wù)進(jìn)程響應(yīng)跟不上。而在操作系統(tǒng)中,內(nèi)核進(jìn)程是比用戶進(jìn)程重要的多的,畢竟它關(guān)乎整個(gè)系統(tǒng)的穩(wěn)定性。

最高優(yōu)先級(jí)調(diào)度算法(Highest Priority First,HPF)就是「從就緒隊(duì)列中選擇最高優(yōu)先級(jí)的進(jìn)程進(jìn)行運(yùn)行」。進(jìn)程的優(yōu)先級(jí)是怎么規(guī)定的呢?分為靜態(tài)優(yōu)先級(jí)或動(dòng)態(tài)優(yōu)先級(jí):

  • 「靜態(tài)優(yōu)先級(jí)」:創(chuàng)建進(jìn)程時(shí)候,就預(yù)先規(guī)定優(yōu)先級(jí),并且整個(gè)運(yùn)行過(guò)程中該進(jìn)程的優(yōu)先級(jí)都不會(huì)發(fā)生變化。一般來(lái)說(shuō),內(nèi)核進(jìn)程的優(yōu)先級(jí)都是高于用戶進(jìn)程的。
  • 「動(dòng)態(tài)優(yōu)先級(jí)」:根據(jù)進(jìn)程的動(dòng)態(tài)變化調(diào)整優(yōu)先級(jí)。比如隨著進(jìn)程的運(yùn)行時(shí)間增加,適當(dāng)?shù)慕档推鋬?yōu)先級(jí);隨著就緒隊(duì)列中進(jìn)程的等待時(shí)間增加,適當(dāng)?shù)纳咂鋬?yōu)先級(jí)。

另外,需要注意的是,最高優(yōu)先級(jí)算法并非是固定的搶占式策略或非搶占式,「系統(tǒng)可預(yù)先規(guī)定使用哪種策略」:

  • 非搶占式:當(dāng)就緒隊(duì)列中出現(xiàn)優(yōu)先級(jí)高的進(jìn)程,則運(yùn)行完當(dāng)前進(jìn)程后,再選擇該優(yōu)先級(jí)高的進(jìn)程。
  • 搶占式:當(dāng)就緒隊(duì)列中出現(xiàn)優(yōu)先級(jí)高的進(jìn)程,則立即強(qiáng)制剝奪當(dāng)前運(yùn)行進(jìn)程的 CPU 資源,分配給優(yōu)先級(jí)更高的進(jìn)程運(yùn)行。

 

責(zé)任編輯:武曉燕 來(lái)源: 飛天小牛肉
相關(guān)推薦

2019-06-26 09:10:07

操作系統(tǒng)調(diào)度算法

2020-03-10 19:34:08

CPU虛擬化調(diào)度

2009-09-16 08:40:53

linux進(jìn)程調(diào)度linuxlinux操作系統(tǒng)

2010-04-09 13:48:31

Oracle SMON

2021-07-07 10:05:38

進(jìn)程CPULinux

2022-04-27 10:14:43

進(jìn)程調(diào)度LinuxCPU

2023-03-03 00:03:07

Linux進(jìn)程管理

2010-04-27 14:33:44

Oracle SMON

2009-11-20 10:40:33

Oracle SMON

2012-05-14 14:09:53

Linux內(nèi)核調(diào)度系統(tǒng)

2018-05-30 13:42:39

2010-03-08 14:40:27

Linux進(jìn)程調(diào)度

2021-05-10 11:53:13

頁(yè)面替換算法

2020-08-31 06:41:52

RSA算法

2023-11-22 13:18:02

Linux調(diào)度

2022-01-10 17:41:31

內(nèi)存結(jié)構(gòu)PostgreSQL

2021-09-30 10:45:33

Linux進(jìn)程通信

2021-05-12 07:50:02

CFS調(diào)度器Linux

2023-03-05 15:28:39

CFSLinux進(jìn)程

2020-10-12 08:32:34

瀏覽器進(jìn)程線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)