程序基礎概念

2021-08-16 22:11:21 字數 2666 閱讀 8902

一:程序的排程演算法

在所有排程演算法中,最簡單的是非搶占式的fcfs演算法。 

演算法原理:程序按照它們請求cpu的順序使用cpu.就像你買東西去排隊,誰第乙個排,誰就先被執行,在它執行的過程中,不會中斷它。當其他人也想進入記憶體被執行,就要排隊等著,如果在執行過程中出現一些事,他現在不想排隊了,下乙個排隊的就補上。此時如果他又想排隊了,只能站到隊尾去。 

演算法優點:易於理解且實現簡單,只需要乙個佇列(fifo),且相當公平 

演算法缺點:比較有利於長程序,而不利於短程序,有利於cpu 繁忙的程序,而不利於i/o 繁忙的程序

短作業優先(sjf, shortest job first)又稱為「短程序優先」spn(shortest process next);這是對fcfs演算法的改進,其目標是減少平均周轉時間。 

演算法原理:對預計執行時間短的程序優先分派處理機。通常後來的短程序不搶先正在執行的程序。 

演算法優點:相比fcfs 演算法,該演算法可改善平均周轉時間和平均帶權周轉時間,縮短程序的等待時間,提高系統的吞吐量。 

演算法缺點:對長程序非常不利,可能長時間得不到執行,且未能依據程序的緊迫程度來劃分執行的優先順序,以及難以準確估計程序的執行時間,從而影響排程效能。

最高響應比優先法(hrrn,highest response ratio next)是對fcfs方式和sjf方式的一種綜合平衡。fcfs方式只考慮每個作業的等待時間而未考慮執行時間的長短,而sjf方式只考慮執行時間而未考慮等待時間的長短。因此,這兩種排程演算法在某些極端情況下會帶來某些不便。hrn排程策略同時考慮每個作業的等待時間長短和估計需要的執行時間長短,從中選出響應比最高的作業投入執行。這樣,即使是長作業,隨著它等待時間的增加,w / t也就隨著增加,也就有機會獲得排程執行。這種演算法是介於fcfs和sjf之間的一種折中演算法。 

演算法原理:響應比r定義如下: r =(w+t)/t = 1+w/t 

其中t為該作業估計需要的執行時間,w為作業在後備狀態佇列中的等待時間。每當要進行作業排程時,系統計算每個作業的響應比,選擇其中r最大者投入執行。 

演算法優點:由於長作業也有機會投入執行,在同一時間內處理的作業數顯然要少於sjf法,從而採用hrrn方式時其吞吐量將小於採用sjf 法時的吞吐量。 

演算法缺點:由於每次排程前要計算響應比,系統開銷也要相應增加。

該演算法採用剝奪策略。時間片輪轉排程是一種最古老,最簡單,最公平且使用最廣的演算法,又稱rr排程。每個程序被分配乙個時間段,稱作它的時間片,即該程序允許執行的時間。 

演算法原理:讓就緒程序以fcfs 的方式按時間片輪流使用cpu 的排程方式,即將系統中所有的就緒程序按照fcfs 原則,排成乙個佇列,每次排程時將cpu 分派給隊首程序,讓其執行乙個時間片,時間片的長度從幾個ms 到幾百ms。在乙個時間片結束時,發生時鐘中斷,排程程式據此暫停當前程序的執行,將其送到就緒佇列的末尾,並通過上下文切換執行當前的隊首程序,程序可以未使用完乙個時間片,就出讓cpu(如阻塞)。 

演算法優點:時間片輪轉排程演算法的特點是簡單易行、平均響應時間短。 

演算法缺點:不利於處理緊急作業。在時間片輪轉演算法中,時間片的大小對系統效能的影響很大,因此時間片的大小應選擇恰當 

怎樣確定時間片的大小:

時間片大小的確定

1.系統對響應時間的要求 

2.就緒佇列中程序的數目 

3.系統的處理能力

多級反饋佇列排程演算法是一種cpu處理機排程演算法,unix作業系統採取的便是這種排程演算法。 

多級反饋佇列排程演算法描述: 

1、程序在進入待排程的佇列等待時,首先進入優先順序最高的q1等待。 

2、首先排程優先順序高的佇列中的程序。若高優先順序中佇列中已沒有排程的程序,則排程次優先順序佇列中的程序。例如:q1,q2,q3三個佇列,只有在q1中沒有程序等待時才去排程q2,同理,只有q1,q2都為空時才會去排程q3。 

3、對於同乙個佇列中的各個程序,按照時間片輪轉法排程。比如q1佇列的時間片為n,那麼q1中的作業在經歷了n個時間片後若還沒有完成,則進入q2佇列等待,若q2的時間片用完後作業還不能完成,一直進入下一級佇列,直至完成。 

4、在低優先順序的佇列中的程序在執行時,又有新到達的作業,那麼在執行完這個時間片後,cpu馬上分配給新到達的作業(搶占式)。 

在多級反饋佇列排程演算法中,如果規定第乙個佇列的時間片略大於多數人機互動所需之處理時間時,便能夠較好的滿足各種型別使用者的需要。

二:task_struck

孤兒狀態:父程序先退出,子程序就稱之為「孤兒狀態」,孤兒程序被1號init程序領養,當然要有init程序**。

殭屍程序

#include#includeint main()

else if(id==0)

else

return 0;

}

執行結果

複製終端,在另乙個終端輸入箭頭所指命令檢視程序

子程式進入殭屍狀態

孤兒程序

圖中所指向的1表示孤兒程序被1號程序領養

多程序基礎概念

多程序基礎知識 併發與並行 並行 表示兩個執行緒同時做事情。併發 表示一會做這個事情,一會做另乙個事情,存在著排程。單核 cpu 不可能存在並行 微觀上 臨界區臨界區用來表示一種公共資源或者說是共享資料,可以被多個執行緒使用。但是每一次,只能有乙個執行緒使用它,一旦臨界區資源被占用,其他執行緒要想使...

Linux基礎4 程序概念

1.fcfs first come first served 先來先服務,在它執行過程中,不會被中斷。2.輪轉 round robin 以乙個週期性間隔產生時鐘中斷,當前正在執行的程序被置於就緒佇列,基於fcfs選擇下乙個就緒程序執行。每個程序被分配乙個時間段,按照在佇列中的順序交替執行 不利於處理...

程序與多程序概念

程序 process 是計算機中程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統機結構基礎。狹義定義 程序是正在執行的程式的例項。在同一時間,同一作業系統中有兩個或兩個以上的程式處於執行狀態。php 提供了程序控制的擴充套件 pcntl。pcntl 實現了unix ...