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

操作系統(tǒng)中的進程調度算法有哪些?

系統(tǒng) 算法
調度程序是操作系統(tǒng)內核的組成部分,它負責選擇下一個要運行的進程。所以調度策略就決定了這個操作系統(tǒng)的是非實時還是實時的操作系統(tǒng)。當今操作系統(tǒng)的種類繁多,但進程調度算法可以總結為一下幾種。

調度程序是操作系統(tǒng)內核的組成部分,它負責選擇下一個要運行的進程。所以調度策略就決定了這個操作系統(tǒng)的是非實時還是實時的操作系統(tǒng)。當今操作系統(tǒng)的種類繁多,但進程調度算法可以總結為一下幾種。

先來先服務調度算法(FCFS)

先來先服務的調度策略非常的簡單。維護一個就緒隊列,每次調度是從就緒隊列中選擇一個最先進入該隊列的進程,為之分配處理機,使之投入運行。該進程一直運行到完成或發(fā)生某事件而阻塞后才放棄處理機。

 

短進程優(yōu)先調度算法(SPF)

短進程優(yōu)先(SPF)調度算法則是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機時再重新調度。

 

高優(yōu)先權優(yōu)先調度算法

為了照顧緊迫型的進程,能讓這些進程得到優(yōu)先的運行,所以引入了優(yōu)先權優(yōu)先調度算法。這種調度算法可以用在實時操作系統(tǒng)上。當進程調度發(fā)生時,該算法把處理機分配給就緒隊列中優(yōu)先級最高的進程。

 

該算法有兩種類型:

非搶占式優(yōu)先權算法:在這種模式下,系統(tǒng)一旦把處理機分配給了就緒隊列中某個優(yōu)先級最高的進程,這個進程就會一直運行下去,直到進程結束;或者是主動放棄處理機,系統(tǒng)才會將處理機分配給另一個優(yōu)先級最高的進程。這種算法可用于某些對實時性要求不高的操作系統(tǒng)中。

搶占式優(yōu)先權調度算法:在這種模式下,系統(tǒng)同樣是把處理機分配給優(yōu)先級最高進程,然后運行。但是如果在運行期間,就緒隊列中出現(xiàn)了優(yōu)先級更高的進程,系統(tǒng)就會立即停止當前運行的進程,重新將處理機分配給新加入的優(yōu)先級更高的進程。所以在這種模式下,可以更好的滿足實時性的要求,故常用在實時性要求高的系統(tǒng)中。

想象下高優(yōu)先進程由于因資源缺乏而處于受阻狀態(tài),一直等到低優(yōu)先級進程釋放資源為止。而低優(yōu)先級獲得的CPU時間少,如果此時有優(yōu)先級處于兩者之間的任務,并且不需要那個共享資源,則該中優(yōu)先級的進程反而超過這兩個進程而獲得CPU時間。如果高優(yōu)先級等待資源時不是阻塞等待,而是忙循環(huán),則可能永遠無法獲得資源,因為此時低優(yōu)先級進程無法與高優(yōu)先級進程爭奪CPU時間,從而無法執(zhí)行,進而無法釋放資源,造成的后果就是高優(yōu)先級進程無法獲得資源而繼續(xù)推進。我們把這種現(xiàn)象稱之為:優(yōu)先級翻轉。

怎么解決上述問題呢?

有三種方法:

設置優(yōu)先級上限,給臨界區(qū)一個高優(yōu)先級,進入臨界區(qū)的進程都將獲得這個高優(yōu)先級,如果其他試圖進入臨界區(qū)的進程的優(yōu)先級都低于這個高優(yōu)先級,那么優(yōu)先級反轉就不會發(fā)生。

優(yōu)先級繼承,當一個高優(yōu)先級進程等待一個低優(yōu)先級進程持有的資源時,低優(yōu)先級進程將暫時獲得高優(yōu)先級進程的優(yōu)先級別,在釋放共享資源后,低優(yōu)先級進程回到原來的優(yōu)先級別。嵌入式系統(tǒng)VxWorks就是采用這種策略。

第三種方法就是臨界區(qū)禁止中斷,通過禁止中斷來保護臨界區(qū),采用此種策略的系統(tǒng)只有兩種優(yōu)先級:可搶占優(yōu)先級和中斷禁止優(yōu)先級。前者為一般進程運行時的優(yōu)先級,后者為運行于臨界區(qū)的優(yōu)先級?;鹦翘铰氛哒怯捎谠谂R界區(qū)中運行的氣象任務被中斷發(fā)生的通信任務所搶占才導致故障,如果有臨界區(qū)的禁止中斷保護,此一問題也不會發(fā)生。

高響應比優(yōu)先調度算法

在CPU密集型系統(tǒng)中,短進程優(yōu)先級算法是比較好的一種算法。但是長進程的運行時得不到確定保證的。該怎么解決這個問題呢?我們是不是可以引入一種動態(tài)優(yōu)先級,用大白話說等待的時間越長,優(yōu)先級就會變得越高。所以,等待了一段時間之后,就會一定輪到運行的。但是其中的這個動態(tài)計算優(yōu)先級的算法是需要消耗CPU資源的。

時間片輪轉

在早期的時間片輪轉法中,系統(tǒng)將所有的就緒進程按先來先服務的原則排成一個隊列,每次調度時,把CPU 分配給隊首進程,并令其執(zhí)行一個時間片。時間片的大小從幾ms 到幾百ms。當執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調度程序便據(jù)此信號來停止該進程的執(zhí)行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執(zhí)行一個時間片。這樣就可以保證就緒隊列中的所有進程在一給定的時間內均能獲得一時間片的處理機執(zhí)行時間。換言之,系統(tǒng)能在給定的時間內響應所有用戶的請求。

多級反饋隊列調度算法

我們之前講的調度算法都有一定的局限性。如短進程優(yōu)先調度算法,僅照顧了短進程,而忽略了長進程。而多級反饋隊列調度算法,是一種均衡的,能夠滿足各類進程的需要。所以是目前比較好的進程調度算法。

設置多個就緒隊列,并且每個隊列的優(yōu)先等級不一樣。第一隊列優(yōu)先級最高,第二隊列優(yōu)先級次之,以此類推。優(yōu)先級越高隊列,時間片就最短。

當一個新進程進入內存后,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執(zhí)行時,如它能在該時間片內完成,便可準備撤離系統(tǒng);如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執(zhí)行;如果它在第二隊列中運行一個時間片后仍未完成,再依次將它放入第三隊列,……,如此下去,當一個長作業(yè)(進程)從第一隊列依次降到第n隊列后,在第n 隊列便采取按時間片輪轉的方式運行。

僅當?shù)谝魂犃锌臻e時,調度程序才調度第二隊列中的進程運行;僅當?shù)?~(i-1)隊列均空時,才會調度第i隊列中的進程運行。如果處理機正在第i隊列中為某進程服務時,又有新進程進入優(yōu)先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶占正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把處理機分配給新到的高優(yōu)先權進程。如下圖:

 

參考

https://blog.csdn.net/qq_35642036/article/details/82809812,源理君參考了這篇文章。

總結

本文講了幾種進程調度算法,希望對進程調度算法有興趣的朋友們,有所幫助。當然還有本文沒有談到的調度算法,如:彩票調度,單比率調度等等。

 

責任編輯:武曉燕 來源: 技術原理君
相關推薦

2020-03-10 19:34:08

CPU虛擬化調度

2019-03-05 11:22:17

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

2012-05-04 09:49:34

進程

2014-01-21 09:29:45

國產操作系統(tǒng)操作系統(tǒng)

2025-01-21 10:54:28

2013-05-07 14:05:53

2010-04-15 10:41:13

2010-04-14 13:59:45

Unix操作系統(tǒng)

2010-04-16 18:19:32

Unix操作系統(tǒng)

2021-02-22 07:58:45

算法進程調度

2010-04-14 16:45:15

Unix操作系統(tǒng)

2010-04-30 17:27:59

Unix操作系統(tǒng)

2010-04-14 15:58:25

Unix操作系統(tǒng)

2010-04-09 17:25:13

Unix操作系統(tǒng)

2010-04-14 13:20:29

Unix操作系統(tǒng)

2010-04-19 09:08:20

Unix操作系統(tǒng)

2010-04-19 16:47:40

Unix操作系統(tǒng)

2023-03-13 14:08:00

系統(tǒng)抽象操作系統(tǒng)大型系統(tǒng)

2023-10-28 09:00:03

進程系統(tǒng)服務
點贊
收藏

51CTO技術棧公眾號