進程的調度

進程調度方式

    進程調度方式是指當某一處進程正在處理機上執行時,若有某個更爲重要或緊迫的進程需要處理,即有優先權更高的進程進入就緒隊列,此時應如何分配處理機。

    通常有以下兩種進程調度方式:

    (1)非剝奪調度方式(非搶佔方式):實現簡單,系統開銷小,適用於大多數的批處理系統,但它不能用於分時系統和大多數的實時系統。

    (2)剝奪調度方式(搶佔方式):要遵循一定的原則,主要有:優先級、短進程優先和時間片原則。

  • 衡量調度性能的指標

    (1)CPU利用率:CPU在忙碌狀態所佔的時間比

    (2)系統吞吐量:單位時間內CPU完成作業的數量

    (3)週轉時間:從作業提交到作業完成所經歷的時間,包括作業等待、在就緒隊列中排隊、在處理機上運行以及進行輸入\輸出操作所花費的時間的總和。

    (4)等待時間:進程處理等處理機狀態時間之和。處理機調度算法實際上並不影響作業執行或輸入/輸出操作的時間,隻影響作業在就緒隊列中等待所花的時間。因此,衡量一個高度算法的優劣,常常只需簡單地考察等待時間。等待時間=週轉時間-處理機上運行時間-輸入\輸出所花費的時間。

    (5)響應時間:從用戶提交請求到系統首次產生響應所用的時間。

  • 典型的調度算法

    (1)先來先服務(FCFS first come first serve):屬於不可剝奪算法。算法每次從後備作業隊列中選擇最先進入該隊列的一個或幾個作業進行處理。特點:算法簡單,效率低,對長作業有利,對短作業不利。

    (2)短作業優先(SJF short job first):算法從後備隊列中選擇一個或若干個估計運行時間最短的作業處理。直到完成作業或發生某事件而阻塞時,才釋放處理機。缺點:(1)對長作業不利,造成“飢餓”現象(2)未考慮作業緊迫程度(3)由於運行時間是估計所得,所以並不一定能做到短作業優先。

    (3)優先級:可分爲(1)非剝奪式(2)剝奪式;其中優先級可分爲:(1)靜態優先級(2)動態優先級

    (4)高響應比優先:響應比=(等待時間+處理時間)/處理時間=1+等待時間/處理時間

    (5)時間片輪轉

  • 進程(數據庫也適用)死鎖

    兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

    (1)產生進程死鎖的原因

      1)系統資源不足。

      2)資源分配不當。

      3)進程運行推進順序不合適。

    (2)產生進程死鎖的必要條件:四點

      1)互斥條件:線程在某一時間內獨佔資源。

      2)不剝奪條件:線程已獲得資源,在末使用完之前,不能強行剝奪。

      3)請求與保持條件:一個線程因請求資源而阻塞時,對已獲得的資源保持不放。

      4)循環等待條件:若干線程之間形成一種頭尾相接的循環等待資源關係。

    (2)怎樣避免死鎖

      1)加鎖順序:確保所有的進程都是按照相同的順序獲得鎖。

      2)加鎖限時:在嘗試獲取鎖的時候加一個超時時間,若超過了這個時限該進程則放棄對該鎖請求。

      3)銀行家算法,每次在分配資源之前,先判斷資源分配後,系統是否會進入不安全的狀態,會則不分配,不會則分配。

      3)死鎖檢測:檢測如果發生死鎖,通過外邊破壞產生死鎖的四個必要條件,打破死鎖。   

  • 飢餓(無限期阻塞)

    當進程的等待時間過長,給進程推進和響應帶來明顯影響時,稱發生了進程“飢餓”。當“飢餓”到一定程度的進程被賦予的任務即使完成也不再具有實際意義時稱該進程被“餓死”。

    飢餓產生的主要原因:進程所請求的資源(可以是CPU資源)長時間得不到滿足,從而長時間處於阻塞或就緒狀態。

    飢餓與死鎖的區別:(1)進入飢餓的進程可以只有一個,而死鎖的進程至少有兩個。(2)飢餓狀態的進程可以是就緒狀態和阻塞狀態,而處於死鎖的進程一定是阻塞狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章