作業系統 程序的狀態及轉換

2022-08-28 08:51:11 字數 1678 閱讀 2926

1.    為什麼要分開就緒和阻塞狀態

答:因為就緒態只需要等待處理機,而阻塞態可能在等待輸入輸出,即使分配給處理機也是徒勞,所以兩狀態圖不妥。對於排程程序,只需要等待就緒佇列裡的程序,因為阻塞狀態可以轉換到就緒佇列裡去。

2.    程序五狀態

1)       新狀態:程序已經建立,但未被os接納為可執行程序。(還沒有申請到相應的資源)。

2)       就緒態:程序做好了準備,準備執行(只等待處理機)。

3)       執行狀態:該程序正在執行(單處理機,某一時刻僅乙個程序占用處理機)。

4)       阻塞狀態:等待某事件發生才能執行,如等待i/o完成。

5)       終止狀態.

3.    問題:多個程序競爭記憶體資源

l  記憶體資源緊張

l  無就緒佇列,處理機空閒:i/o速度比處理機速度慢的多,可能出現全部程序阻塞等待i/o。

解決方法

l  交換技術:換出一部分暫時不能執行的程序(阻塞程序)到外存(只換出程式和資料,pcb不換出去),以騰出記憶體空間,可以呼叫新程序來執行。

l  虛擬儲存技術:每個程序只能裝入一部分程式和資料

4.      掛起:程序被交換到外存,狀態變為掛起狀態

4.1   程序掛起的原因(p91)

l  程序全部阻塞,處理機空閒。

l  系統負荷過重,記憶體空間緊張。(讓其他程序先執行完)

l  作業系統的需要。作業系統可能需要掛起後台程序或一些服務程序,或者某些可能導致故障的程序。

l  終端使用者請求。

l  父程序的需求。

4.2  掛起程序的特徵

l  不能立即執行

l  可能是等待某事件發生,若是,則阻塞條件獨立於掛起條件,即使阻塞事件發生,該程序也不能執行。

n  阻塞和掛起沒有聯絡。

n  如果a程序現在要求輸入資料,此時a程序屬於阻塞狀態,在選擇掛起程序的時候,可能先選擇阻塞程序(a程序),此時a程序掛起,正在輸入資料,輸入到記憶體緩衝區內。當資料輸完了,向處理機傳送命令資料已經輸入完成,阻塞事件解除,但實際上還是掛起,所以仍是掛起態。

l  使之掛起的程序為:自身、父程序、os。

l  只有掛起它的程序才能使之由掛起狀態轉換為其他狀態。

4.3  阻塞與掛起

l  程序是否被換出記憶體:掛起與否。

4.4  四種狀態組合

l  就緒:程序在記憶體,準備執行。

l  阻塞:程序在記憶體,等待事件。

l  就緒/掛起:程序在外存,只要調入記憶體即可執行。

l  阻塞/掛起:程序在外存,等待事件。

4.5  處理機可排程執行的程序有兩種

l  新建立的程序

l  或換入乙個以前掛起的程序

通常為避免增加系統負載,系統會換入乙個以前掛起的程序執行。

4.6  具有掛起狀態的程序狀態轉換

l  阻塞 → 阻塞/掛起:os通常將阻塞程序換出,以騰出記憶體空間

l  阻塞/掛起→ 就緒/掛起:當阻塞/掛起程序等待的事件發生時,可以將其轉換為就緒/掛起。

l  就緒/掛起→ 就緒:os需要調入乙個程序執行。

l  就緒 → 就緒/掛起:一般,os掛起阻塞程序。但是有時也會掛起就緒程序,釋放足夠的記憶體空間。

l  新 → 就緒/掛起(新→ 就緒):新程序建立後,可以插入到就緒佇列或就緒,掛起佇列,若無足夠的記憶體分配給新程序,則需要新→ 就緒/掛起。

作業系統 程序的狀態與轉換

程序是程式的一次執行。在這個執行過程中,有時程序正在被cpu處理,有時有需要等待cpu服務,可見程序的狀態會有各種變化,為了方便對各個程序的管理,作業系統需要將程序合理地劃分為幾種狀態。另外的兩種狀態 注意 不能由阻塞態之間轉換為執行態。處於阻塞態的程序需要先轉換為就緒態才能夠被排程,也不能由就緒態...

作業系統 程序的狀態與轉換

程序的三種基本狀態 執行態 占用cpu,並在cpu執行,單核cpu最多只能有乙個程序處於執行態 就緒態 具備執行條件,但是沒有空閒cpu,暫時不能執行,萬事具備只差cpu 阻塞態 等待某事件 另外兩種狀態 建立態 分配資源,初始化pcb 終止態 資源,撤銷pcb 狀態轉換 就緒態 執行態 程序被排程...

作業系統 程序狀態轉換(實驗一)

sdibt 計科181 用陣列模擬的 我的 有些bug,望大家提出寶貴意見 include includeusing namespace std 就緒 執行 執行 就緒 時間片完 阻塞 等待 阻塞 就緒 struct pcb 程序結構體 t int sumrun 0 最多可以同時執行多少程序 int...