成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

必須了解的Linux系統中的進程調度

系統 Linux
操作系統要實現多進程,進程調度必不可少。有人說,進程調度是操作系統中最為重要的一個部分。我覺得這種說法說得太絕對了一點,就像很多人動輒就說"某某函數比某某函數效率高XX倍"一樣,脫離了實際環境,這些結論是比較片面的。

操作系統要實現多進程,進程調度必不可少。有人說,進程調度是操作系統中最為重要的一個部分。我覺得這種說法說得太絕對了一點,就像很多人動輒就說"某某函數比某某函數效率高XX倍"一樣,脫離了實際環境,這些結論是比較片面的。

而進程調度究竟有多重要呢? 首先,我們需要明確一點:進程調度是對TASK_RUNNING狀態的進程進行調度。如果進程不可執行(正在睡眠或其他),那么它跟進程調度沒多大關系。

[[231027]]

所以,如果你的系統負載非常低,盼星星盼月亮才出現一個可執行狀態的進程。那么進程調度也就不會太重要。哪個進程可執行,就讓它執行去,沒有什么需要多考慮的。

反之,如果系統負載非常高,時時刻刻都有N多個進程處于可執行狀態,等待被調度運行。那么進程調度程序為了協調這N個進程的執行,必定得做很多工作。協調得不好,系統的性能就會大打折扣。這個時候,進程調度就是非常重要的。

盡管我們平常接觸的很多計算機(如桌面系統、網絡服務器、等)負載都比較低,但是linux作為一個通用操作系統,不能假設系統負載低,必須為應付高負載下的進程調度做精心的設計。

當然,這些設計對于低負載(且沒有什么實時性要求)的環境,沒多大用。極端情況下,如果CPU的負載始終保持0或1(永遠都只有一個進程或沒有進程需要在CPU上運行),那么這些設計基本上都是徒勞的。

優先級

現在的操作系統為了協調多個進程的“同時”運行,最基本的手段就是給進程定義優先級。定義了進程的優先級,如果有多個進程同時處于可執行狀態,那么誰優先級高誰就去執行,沒有什么好糾結的了。

那么,進程的優先級該如何確定呢?有兩種方式:由用戶程序指定、由內核的調度程序動態調整。(下面會說到)

linux內核將進程分成兩個級別:普通進程和實時進程。實時進程的優先級都高于普通進程,除此之外,它們的調度策略也有所不同。

實時進程的調度

實時,原本的涵義是“給定的操作一定要在確定的時間內完成”。重點并不在于操作一定要處理得多快,而是時間要可控(在最壞情況下也不能突破給定的時間)。

這樣的“實時”稱為“硬實時”,多用于很精密的系統之中(比如什么火箭、導彈之類的)。一般來說,硬實時的系統是相對比較專用的。

像linux這樣的通用操作系統顯然沒法滿足這樣的要求,中斷處理、虛擬內存、等機制的存在給處理時間帶來了很大的不確定性。硬件的cache、磁盤尋道、總線爭用、也會帶來不確定性。

比如考慮“i++;”這么一句C代碼。絕大多數情況下,它執行得很快。但是極端情況下還是有這樣的可能:

1、i的內存空間未分配,CPU觸發缺頁異常。而linux在缺頁異常的處理代碼中試圖分配內存時,又可能由于系統內存緊缺而分配失敗,導致進程進入睡眠;

2、代碼執行過程中硬件產生中斷,linux進入中斷處理程序而擱置當前進程。而中斷處理程序的處理過程中又可能發生新的硬件中斷,中斷永遠嵌套不止……;

等等……

而像linux這樣號稱實現了“實時”的通用操作系統,其實只是實現了“軟實時”,即盡可能地滿足進程的實時需求。

如果一個進程有實時需求(它是一個實時進程),則只要它是可執行狀態的,內核就一直讓它執行,以盡可能地滿足它對CPU的需要,直到它完成所需要做的事情,然后睡眠或退出(變為非可執行狀態)。

而如果有多個實時進程都處于可執行狀態,則內核會先滿足優先級最高的實時進程對CPU的需要,直到它變為非可執行狀態。

于是,只要高優先級的實時進程一直處于可執行狀態,低優先級的實時進程就一直不能得到CPU;只要一直有實時進程處于可執行狀態,普通進程就一直不能得到CPU。

那么,如果多個相同優先級的實時進程都處于可執行狀態呢?這時就有兩種調度策略可供選擇:

1、SCHED_FIFO:先進先出。直到先被執行的進程變為非可執行狀態,后來的進程才被調度執行。在這種策略下,先來的進程可以執行sched_yield系統調用,自愿放棄CPU,以讓權給后來的進程;

2、SCHED_RR:輪轉調度。內核為實時進程分配時間片,在時間片用完時,讓下一個進程使用CPU;

強調一下,這兩種調度策略以及sched_yield系統調用都僅僅針對于相同優先級的多個實時進程同時處于可執行狀態的情況。

必須了解的Linux系統中的進程調度

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2012-05-14 14:09:53

Linux內核調度系統

2016-09-27 13:47:15

Linux網絡命令

2019-06-26 09:10:07

操作系統調度算法

2009-09-16 08:40:53

linux進程調度linuxlinux操作系統

2009-09-22 18:26:48

2015-08-04 09:27:34

Linux專家

2019-12-02 09:45:45

Linux IO系統

2025-01-21 10:54:28

2010-07-27 11:29:43

Flex

2009-12-25 11:22:13

Linux進程技術

2014-02-10 10:13:43

2010-06-28 14:52:30

cron進程

2023-03-03 00:03:07

Linux進程管理

2010-03-08 14:40:27

Linux進程調度

2022-12-30 07:50:05

無棧協程Linux

2017-12-19 11:00:54

Linux系統日志

2016-10-28 21:30:00

AndroidJava進程

2019-07-03 10:29:59

JavaScript算法程序員

2016-09-30 10:30:12

2020-03-10 19:34:08

CPU虛擬化調度
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丁香久久| 欧美电影在线观看网站 | 福利网站导航 | 91在线免费观看网站 | 欧美成人综合 | 日韩高清中文字幕 | 欧美在线观看一区二区 | 国产精品天堂 | 欧美国产91| 中文字幕第一页在线 | 欧美精品一区二区三区蜜桃视频 | 久久亚洲欧美日韩精品专区 | 欧美亚洲一级 | 久久中文字幕一区 | 日韩视频区 | 中文字幕在线一区二区三区 | 成人免费观看男女羞羞视频 | 日韩精品在线看 | 99热这里只有精品8 激情毛片 | 中文字幕一区二区三区四区五区 | 天天摸天天干 | 日本中文字幕日韩精品免费 | 91久久精品日日躁夜夜躁欧美 | 一级片aaa | 天天躁人人躁人人躁狂躁 | 久久久久久久久久久久久久av | 91av导航| 福利视频网址 | 久久久久久成人网 | 日日干天天操 | 一区二区三区免费观看 | 国产精品欧美一区二区三区不卡 | 99久久精品国产一区二区三区 | 欧美1—12sexvideos | 亚洲自拍偷拍免费视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 精品乱人伦一区二区三区 | 精品久草 | 中文字幕在线观看一区 | 欧美在线日韩 | 日韩视频―中文字幕 |