第 3 章 程序

2022-06-19 13:57:12 字數 1903 閱讀 1867

程序是現代分時作業系統的工作單元。

程序是資源分配的基本單位。

執行緒是程式執行的最小單位。

程序是執行的程式,這是一種非正式的說法。程序不只是程式**(也稱文字段),程序還包括資料(程式計數器的值和處理器暫存器的內容等)、程序堆疊(包括臨時資料,如函式引數、返回位址和區域性變數)和資料段(包括全域性變數)和堆。 

記憶體中的程序

新的(new):程序正在建立

執行(running):指令正在執行

等待(waitting):程序等待發生某個時間(如i/o完成或收到訊號)

就緒(ready):程序等待分派處理器

終止(terminated):程序已經完成執行

多道程式設計的目標是,無論何時都有程序執行,從而最大化cpu利用率。分時作業系統的目的是在程序間快速切換cpu,以便使用者在程式執行時能與其互動。為了滿足這些目的,程式排程器選擇乙個可用程序到cpu上執行。單處理系統不會具有多個正在執行的程序。

程序在進入系統時,會被加到作業佇列(job queue),這個佇列包括系統內的所有程序。

駐留在記憶體中的、就緒的、等待執行的程序儲存在就緒佇列。

等待特定 i/o 裝置的程序列表被稱為裝置佇列。每個裝置都有自己的裝置佇列。

最初,新程序被加到就緒佇列中等待,知道被選中執行。當該程序被分配到cpu上執行時,一下時間可能發生:

前面兩種情況,程序最終會從等待狀態切換到就緒狀態,並放回到就緒佇列。程序重複這一迴圈知道終止,然後會從所有佇列中刪除,其pgb和資源也被釋放。

程序會在各種排程佇列之間遷移,作業系統wield排程必須按一定方式從這些佇列中選擇程序。程序選擇通過適當排程器或排程程式來執行。

通常,對於批處理系統,提交的程序多於可以立即執行的程序,這些程序會被儲存到大容量儲存裝置(通常為磁碟)的緩衝池中,以便執行。長期排程程式從該池中你那個選擇程式,加到記憶體,以便執行。短期排程程式或cpu排程程式從準備執行的程序中選擇程序,並分配cpu。

這兩種排程程式的主要區別是執行頻率。

短期排程程序必須經常為cpu選擇新的程序。

長期排程程序執行並不頻繁。長期排程程式控制多道程式程度(記憶體中的程序數量)。長期排程程式進行認真的選擇,應該選擇i/o密集型和cpu密集型的合理程序組合。

有的作業系統如分時作業系統可能引入乙個額外的中期排程程式。思想是可將程序從記憶體中換入換出。

當中斷發生時,系統需要儲存當前執行在cpu上的程序的上下文,以便在處理後能夠恢復上下文,即先掛起程序,再恢復程序。程序上下文採用pgb表示。

切換cpu到另乙個程序需要儲存當前程序狀態和恢復另乙個程序的狀態,這個任務稱為上下文切換。

大多數系統的程序能夠併發執行,它們可以動態地建立和刪除,因此作業系統必須提供機制,以建立程序和終止程序。

程序(父程序)在執行的過程可以建立多個子程序,從而形成程序樹。

大多數的作業系統對程序的識別採用的是唯一的程序識別符pid,通常是乙個整數。

程序建立新程序時,父程序可以與子程序併發執行;父程序等待子程序部分或全部子程序執行完。

作業系統的併發執行的程式可以是獨立的也可以是協作的,與其他程序共享資料的是協作程序。允許程序協助的理由:資訊共享、計算加速、模組化、方便。

協助程序需要一種程序間的通訊機制,以允許程序相互交換資料和資訊。程序間通訊有兩種基本模型:共享記憶體和訊息傳遞。

共享記憶體模型會建立一塊供協作程序共享的記憶體區域,程序提供向此共享區域讀出或寫入資料來交換資訊。

訊息傳遞模型提供在協作程序間交換訊息來通訊。

訊息傳遞對交換較少的資料很有用,因為無需避免衝突。對於多核系統,訊息傳遞的效能要優於共享記憶體。共享記憶體會有快取記憶體一致性問題。

第3章程序管理(二)

3.3程序建立 unix的程序建立很特別。許多其它的作業系統都提供了產生程序的機制,首先在新的位址空間裡建立程序,讀入可執行檔案,最後開始執行。unix採用與眾不同的實現方式,把上述步驟分解到兩個單獨的函式中去執行 fork 和exec 首先,fork 通過拷貝當前程序建立乙個子程序。子程序與父程序...

第3章程序 3 1 Linux程序

3.1 linux程序 每個程序通過乙個t a s k s t r u c t資料結構表示。ta s k向量是乙個指向系統中所有 t a s k s t r u c t資料結構的指標陣列。這意味著系統中最大程序受限於ta s k向量的大小,預設情況 下它有5 1 2項。當程序被建立時,從系統記憶體中...

第3章 進製

include include using namespace std typedef long long ll 這裡就得設定成 long long intget char c ll calc string n,ll r 計算給出的數的進製的10進製 return res 接下來看下數字的細節 注意...