一:程式的定義
程式控制塊PCB:為來使參與併發執行的每個程式(含資料)都能獨立的執行,系統利用PCB來描述程式的基本情況和活動過程,進而控制和管理程式。
程式實體:程式段、相關的資料段、PCB
程式的定義:
1、程式是程式的一次執行過程
2、程式是一個程式及其資料在處理機上順序執行時所發生的活動
3、程式是程式實體的執行過程,是系統進行資源分配和排程的一個獨立單位
二:程式的特徵
1) 動態性:程式是程式的一次執行,他有著建立、活動、暫停、終止等過程,具有一定的生命周奇奇,是動態的產生、變化和消亡的。動態性是程式最基本的特徵。
2) 併發性:至多個程式實體,同存於記憶體中,能在一段時間內同時執行,併發性是程式的重要特徵,同時也是作業系統的重要特徵,引入程式的目的就是為了是程式能與去其他程式的程式併發執行,以提高資源利用率。
3) 獨立性:指程式實體是一個能獨立執行、獨立獲得資源和獨立接收排程的基本單位。範圍建立PCB的程式都不能作為一個獨立的單位參與執行。
4) 非同步性:由於程式的相互制約,是程式具有執行的間斷性。也即程式按各自獨立的、不可預知的速度向前推進。非同步性會導致執行結果不可再現性,為此,在作業系統中必須配置相應的程式同步機制。
5) 結構性:每個程式都配置一個PCB對其進行描述。從結構上來看,程式實體是由程式段、資料段和程式控制端三部分組成的。
三:程式的狀態
1、基本狀態
a:就緒狀態:就緒佇列
b:執行狀態
c:阻塞狀態:阻塞佇列
2、建立狀態和終止狀態
3、掛起操作和啟用狀態
四:程式控制
程式控制是程式管理中最基本的功能,主要包括建立新程式、終止已完成的程式、將因發生異常情況而無法繼續執行的程式置於阻塞狀態、負責程式執行中的狀態轉換等功能。
1、作業系統核心
1、處理機的執行狀態分為:
a、系統態:管態或核心態,具有較高的特權,能執行一切指令,訪問所有的暫存器和儲存區,傳統的OS都在系統態執行
b、使用者態:目態,具有較低特權的執行狀態,僅能執行規定的指令,訪問指定的暫存器和儲存區
2、支撐功能
a:中斷處理
b:時鐘管理:時間片用完後,由時鐘管理產生一箇中斷訊號,促使排程程式重新進行排程
c:原語操作:原子操作,一個操作中的所有動作要麼全做,要麼全不做
3、資源管理功能
- 程式管理:在程式管理中,或由於各個功能模組的執行頻率比較高,通常將他們放在核心中,提高OS的效能
- 儲存器管理:儲存器管理軟體的執行效率也比較高,如用於實現將使用者空間的邏輯地址變換為記憶體空間的實體地址的地址轉換機構、記憶體分配與回收以及記憶體保護和對換功能的模組。通常也將他們放在核心中,保證儲存器管理具有較高的執行速度。
- 裝置管理
2、程式的建立
1、程式的層次結構
在OS中,允許一個程式建立另一個程式,把建立程式的程式稱為父程式,而被建立的程式稱為子程式。子程式可以繼承父程式所擁有的資源,例如,繼承父程式開啟的檔案,繼承父程式所分配的緩衝區等。當子程式被撤銷時,應將其從父程式那裡獲得的資源歸還給父程式。在撤銷父程式時,應將其從父程式獲得的資源歸還給父程式。在PCB中設定來家族關係表項標識程式之間的家族關係。程式不能拒絕子程式的繼承權。
windows中不存在程式層次結構,而是獲得控制程式碼與否、控制與被控制的簡單關係。
2、引起建立程式的事件
使用者登入、作業排程、提供服務、應用請求
3、程式的建立
系統中出現建立新程式的請求後,OS便呼叫程式建立原語Creat建立一個新程式:
- 建立空白PCB,為新程式申請獲得唯一的數字識別符號,並從PCB集合索取一個空白PCB
- 為新程式分配其執行所需的資源,包括各種物理和邏輯資源,如記憶體、檔案、I/O裝置和CPU事件。這些資源或從作業系統或從其父執行緒獲得。
- 初始化程式控制塊PCB
- 如果程式就緒佇列能夠接納新程式,便將新程式插入就緒佇列
3、程式的終止
1、引起程式終止的事件
- 正常結束:表示程式的任務已經完成,準備退出執行
- 異常結束:程式在執行時發生來某種異常事件,使程式無法繼續執行。常見的異常事件有:越界錯、保護錯、非法指令、特權指令錯、執行超時、等待超時、算術運算錯、I/O故障
- 外界干預:指程式應外界的請求而終止執行。干預有:操作員或作業系統干預、父程式請求、因父程式終止。
2、程式的終止過程
如果系統中發生來要求終止程式的某事情,OS便呼叫程式終止原語,終止過程:
- 根據被終止程式的識別符號,從PCB集合中檢索出該程式的PCB,從中讀出該程式的狀態
- 若被終止程式正處於執行狀態,應立即終止該程式的執行,並置排程標誌為真,用於指示該程式被終止後應重新進行排程
- 若該程式還有子孫程式,應將其所有子孫程式都予以終止
- 將被終止的程式所擁有的全部資源或者歸還給父程式,或者歸還給系統
- 將被終止程式PCB從所在佇列或連結串列中移出,等待其它程式來蒐集資訊
4、程式的阻塞與喚醒
1、引起程式阻塞和喚醒的事件
- 向系統請求共享資源失敗。程式在向系統請求共享資源時,由於系統已無足夠的資源分配給它,程式不能執行轉變為阻塞狀態
- 等待某種操作的完成
- 新資料尚未到達
- 等待新任務的到達
2、程式阻塞過程
正在執行的程式,如果發生來上述事件,程式便通過呼叫阻塞原語block將自己阻塞。阻塞是程式自身的一種主動行為。進入block過程後,由於該程式還處於執行狀態,應先立即停止執行,把程式控制塊中的現行狀態由“執行”改為阻塞,並將PCB插入阻塞佇列。最後,轉排程程式進行重新排程,並將處理機分配給另一就緒程式,並進行切換,保留被阻塞程式的處理機狀態,按新程式的PCB中的處理機狀態設定CPU的環境
3、程式喚醒過程
喚醒原語wakeup執行的過程:首先把被阻塞的程式從等待該事件的阻塞佇列中移出,將其PCB中的現行狀態由阻塞改為就緒,然後將該PCB插入到就緒佇列
Block原語和wakeup原語是一對作用相反的原語,必須成對使用。block原語是由被阻塞程式自我呼叫實現的,而wakeup原語是由一個與被喚醒程式相合作或被其它相關程式呼叫實現的。
4、程式的掛起
當系統中出現了引起程式掛起的事件時,OS將利用掛起原語的suspend將指定程式或處於阻塞狀態的程式掛起,suspend的執行過程是:
- 首先檢查被掛起程式的狀態,若處於活動就緒狀態,便將其改為靜止就緒
- 對於活動阻塞狀態的程式,則改為靜止阻塞
- 為方便使用者或父程式考察該程式的執行情況,而把該程式的PCB複製到某指定的記憶體區域
- 若被掛起的程式正在執行,則轉向排程程式重新排程
5、程式的啟用過程
啟用原語active
- 先將程式從外存調入記憶體
- 若是靜止就緒,改為活動就緒;若是靜止阻塞,改為活動阻塞
- 搶佔排程策略:每當有靜止就緒程式被啟用而插入就緒佇列時,便應當檢查是否重新進行排程,如優先順序高,則剝奪當前程式的執行,將處理機分配給剛剛啟用的程式。