程序的出現,是為了作業系統可以以一種有序的方式管理應用的執行,以達到以下的目的:
資源對多個應用程式是可用的。
程序在多個應用程式之間的切換以保證多個應用程式都在執行中。
處理器和i/o裝置能夠得到充分利用。
程序是一組元素組成的實體,他可以是乙個正在執行中的程式,也可以是乙個能分配處理器並由處理器執行的實體。
上述的列表資訊被存放在乙個稱為程序控制塊的資料結構中,該控制塊由作業系統建立和管理。
由於存在著一些處於非執行狀態但已經就緒等待執行的程序,而同時存在另外一些處於堵塞狀態等待i/o操作結束的程序。
因此,解決這一問題比較自然的方法是使用五狀態模型: 執行態、就緒態、堵塞/等待態、新建態和退出態。
(1)被掛起的程序上述的基本狀態提供了一種為程序建立系統模型的方法,並指導系統的實現。但是,往這個模型中新增其他狀態也是合理的。
由於處理器的執行速度遠大於i/o,以至於記憶體中所有的程序都在等待i/o的情況也是很常見的。因此,即使是多道程式設計,大多數處理器仍然可能處於空閒狀態。
一種解決方案是增大記憶體,使得記憶體中可以存在更多的程序。然而這種方案顯然是治標不治本的。
當作業系統從掛起佇列中取出乙個依然阻塞的程序是毫無意義的,因為它仍然沒有準備好執行。所以為了區分被掛起的程序哪些是可以取出的,需要設計另外一種掛起模型:
為了區分,需要四個狀態:
- 就緒態:程序在記憶體中並可以執行
- 阻塞態:程序在程序中並等待乙個事件
- 阻塞/掛起態:程序在外存中並等待乙個事件
- 就緒/掛起態:程序在外存中,但是只要被載入記憶體就可以執行
總結一下掛起的程序的概念:
程序不能被立即執行。
程序可能是或不是正在等待乙個事件。如果是,阻塞條件不依賴於掛起條件,阻塞事件的 的發生不會使程序立即執行。
為組織程序的執行,可以通過**把這個程序置於掛起狀態,**可以是程序自己,也 可以是父程序或者作業系統。
除非**顯示的命令作業系統進行狀態轉換,否則程序無法從這個狀態中轉移。
除了因為提供更多的記憶體空間,程序還會因為什麼原因被掛起呢?
在所有這些導致程序掛起的情況中,掛起程序的活動都是由最初請求掛起的**請求的。
(1)作業系統的控制結構為了管理程序和資源,作業系統構造並維護它所管理的每個實體的資訊表。
作業系統維護四種不同型別的表:記憶體、i/o、檔案和程序。
記憶體表「memory tables」用於跟蹤記憶體和外存。記憶體表必須包括一下資訊:
i/o表「i/o tables」用於管理計算機系統中的i/o裝置和通道。在任何給定的時刻,乙個i/o 裝置或者是可用的,或者是已分配給某個特定的程序。如果正在進行i/o操作,則作業系統需 要知道i/o操作的狀態和作為i/o傳送的源與目標的記憶體單元。
檔案表「file tables」用於提供關於檔案是否存在、檔案在外存中的位置、當前狀態和屬性 的資訊。
程序表「process tables」為了管理和操作程序所必須使用的表。
(2)程序控制結構作業系統在管理和控制程序時,首先必須知道程序的位置,然後,它必須知道在管理時所必需的程序的屬性(如程序id、程序狀態)。
程序位置
想乙個最基本的問題:程序的物理表示是什麼?
回想之前關於程序的定義,程序至少包括乙個或者一組被執行的程式,與這些程式相關聯的 區域性變數、全域性變數和任何已定義常量的資料單元。因此,乙個程序至少包括足夠的記憶體空 間,以儲存該程序的程式和資料;此外,程式的執行通常設計用於跟蹤過程呼叫和過程間參 數傳遞的棧。最後,與每個程序相關聯的還有作業系統用於控制程序的許多屬性,也就是進 程控制塊。程式、資料、棧和屬性的集合稱為程序映像「process image」。
在最簡單的情況下,程序映像儲存在鄰近的活連續的儲存塊中。因此,作業系統必須知道每 個程序在磁碟中的位置;對於在記憶體中的程序,需要知道其在記憶體中的位置。
現代作業系統嘉定分頁硬體允許用不連續的物理記憶體來支援部分常駐記憶體的程式。在任何給 定的時刻,程序映像的一部分可以在記憶體中,剩餘部分可以在外存中。因此,作業系統維護 的程序表必須表明每個程序映像中每頁的位置。
作業系統所需要的每個程序資訊的簡單分類:
所有的作業系統中,每個程序都分配了唯一的乙個數字來表示程序識別符號。除此之外, 還分配乙個使用者識別符號,用於表明擁有該程序的使用者。
處理器狀態資訊包括處理器暫存器的內容。當程序被中斷時,所有暫存器中的資訊必須 被儲存起來,使得程序恢復執行時,這些資訊可以被恢復。
程序控制塊中的第三類主要資訊是程序控制資訊,用於作業系統控制和協調各種活動進 程所需要的額外資訊。
程序控制塊中可能還包含構造資訊,包括將程序控制塊鏈結起來的指標。
程序控制塊是作業系統中最重要的資料結構。作業系統中的每個模組,包括那些設計排程、 資源分配、中斷處理、效能檢測和分析的模組,都可能讀取或者修改程序控制塊。
(1)執行模式為了保護作業系統和重要的作業系統表不受使用者程式的干涉,作業系統通常使用兩種模式管理程序:特權模式『也稱為系統模式(system mode)、控制模式(control mode)或者核心模式 (kernel mode)』,和使用者模式。
在核心模式下,軟體具有對處理器及所有指令、暫存器和記憶體的控制能力,這一級的控制對使用者程式不是必需的,並且為了安全也不是使用者程式可以訪問的。
(2)程序建立作業系統一般安裝以下步驟建立程序:
給程序分配乙個唯一的程序識別符號。此時,主程序表中增加一條新表項,其對應該程序。
給程序分配空間。包括程序映像中的所有元素。
初始化程序控制塊。程序控制資訊部分的初始化基於標準預設值和為該程序所請求的屬 性。
設定正確的連線。
建立或者擴充其他資料結構。
(3)程序切換關於程序切換,有著一些問題。
程序什麼時候程序切換?
執行模式切換和程序切換之間有什麼區別?
程序切換時,作業系統必須對它控制的各種資料結構做什麼?
何時切換程序
通常,下列原因可能造成程序切換。
模式切換
如果存在乙個未處理的中斷,處理器會做以下工作:
程序的狀態變化
如果當前正在執行的程序被轉換到另外乙個狀態(就緒、掛起等),則作業系統必須使其環境發生實質性的變化:
儲存處理器的上下文環境,包括程式計數器和其他暫存器。
更新當前處於執行態程序的程序控制塊,包括將程序狀態改變到另外乙個狀態。
將程序的程序控制塊移到相應的佇列。
選擇另乙個程序執行。
更新所算則程序的程序控制塊。
更新記憶體管理的資料結構。
恢復處理器在被選擇的程序最近一次切換出執行狀態時的上下文環境。
《作業系統 精髓與設計原理》 程序描述和控制
作業系統必須交替執行多個程序,在合理的響應時間範圍內使處理器的利用率最大 作業系統必須按照特定的策略給程序分配資源,同時避免死鎖 作業系統可以支援程序間的通訊和使用者建立程序,它們對構建應用程式很有幫助 程序乙個正在執行中的程式 乙個正在計算機上執行的程式例項 能分配給處理器並由處理器執行的實體 乙...
作業系統 程序描述
作業系統為了管理程序和資源,必須掌握每個程序和資源的當前狀態。最普遍採用的一張方法是 作業系統管理並維護其管理的每個實體的資訊表。大致可以分為四類 記憶體,i o,檔案,程序。以後的學習中將會著重對這四部分內容學習。如上圖所示,作業系統會為如上實體維護資訊表,在此目前只研究程序,其餘的在以後的學習會...
程序描述和控制 作業系統精髓與設計
作業系統設計必須滿足某些一般性的需求,大多數需求都涉及程序 程序的定義 也可以把程序當作一組元素的實體,程序的兩個基本元素是程式 可能被執行相同程式的其他程序共享 和與 相關聯的資料集。假設處理器開始執行該程式 且我們把這個執行實體成為程序。在程序執行時,任意給定乙個時間,程序都可以唯一的被表徵為以...