一 什么是進程
進程:正在進行的一個過程或者說一個任務。是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
進程是操作系統中最基本、重要的概念。是多道程序系統出現后,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引進的一個抽象概念,所有多道程序設計操作系統都建立在進程的基礎上。
二 進程與程序的區別
程序僅僅只是一堆代碼而已,而進程指的是程序的運行過程。
想象一位tom貓正在給他的宿敵jerry做奶油蛋糕。
他有做奶油蛋糕的食譜及所需的所有原料:面粉、雞蛋、奶油等。
在這個比喻中:
-
做蛋糕的食譜就是程序
-
tom貓就是處理器(cpu)
-
而做蛋糕的各種原料就是輸入數據
-
進程就是tom閱讀食譜、取來各種原料以及烘制蛋糕等一系列動作的總和
現在假設tom貓的主人站在門外需要tom去開門
tom想了想,給主人開門的任務比給jerry鼠做蛋糕的任務更重要,於是tom立馬先記下照着食譜做到第幾步(保存進程的當前狀態),然后跑去給主人開門。這里,我們看到處理機從一個進程(做蛋糕)切換到另一個高優先級的進程(開門),每個進程擁有各自的程序(食譜和開鎖)。開門之后,tom又回來從他離開時的那一步繼續做蛋糕
需要強調的是:同一個程序執行兩次,那也是兩個進程,比如打開快播,雖然都是同一個軟件,但是一個可以播放蒼井空,一個可以播放飯島愛,分別做不同的事情也不會混亂
三 進程調度
要想多個進程交替運行,操作系統必須對這些進程進行調度,這個調度也不是隨即進行的,而是需要遵循一定的法則,由此就有了進程的調度算法。
-
先來先服務調度算法
先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於作業調度,也可用於進程調度。FCFS算法比較有利於長作業(進程),而不利於短作業(進程)。由此可知,本算法適合於CPU繁忙型作業,而不利於I/O繁忙型的作業(進程)。
-
短作業優先調度算法
短作業(進程)優先調度算法(SJ/PF)是指對短作業或短進程優先調度的算法,該算法既可用於作業調度,也可用於進程調度。但其對長作業不利;不能保證緊迫性作業(進程)被及時處理;作業的長短只是被估算出來的。
-
時間片輪轉法
時間片輪轉(Round Robin,RR)法的基本思路是讓每個進程在就緒隊列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將CPU的處理時間分成固定大小的時間片,例如,幾十毫秒至幾百毫秒。如果一個進程在被調度選中之后用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所占有的CPU而排到就緒隊列的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。
-
多級反饋隊列
前面介紹的各種用作進程調度的算法都有一定的局限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,而且如果並未指明進程的長度,則短進程優先和基於進程長度的搶占式調度算法都將無法使用。 而多級反饋隊列調度算法則不必事先知道各種進程所需的執行時間,而且還可以滿足各種類型進程的需要,因而它是目前被公認的一種較好的進程調度算法。在采用多級反饋隊列調度算法的系統中,調度算法的實施過程如下所述。 (1) 應設置多個就緒隊列,並為各個隊列賦予不同的優先級。第一個隊列的優先級最高,第二個隊列次之,其余各隊列的優先權逐個降低。該算法賦予各個隊列中進程執行時間片的大小也各不相同,在優先權愈高的隊列中,為每個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……,第i+1個隊列的時間片要比第i個隊列的時間片長一倍。 (2) 當一個新進程進入內存后,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可准備撤離系統;如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執行;如果它在第二隊列中運行一個時間片后仍未完成,再依次將它放入第三隊列,……,如此下去,當一個長作業(進程)從第一隊列依次降到第n隊列后,在第n 隊列便采取按時間片輪轉的方式運行。 (3) 僅當第一隊列空閑時,調度程序才調度第二隊列中的進程運行;僅當第1~(i-1)隊列均空時,才會調度第i隊列中的進程運行。如果處理機正在第i隊列中為某進程服務時,又有新進程進入優先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶占正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把處理機分配給新到的高優先權進程。