作業系統(3)程式及其實現
1、引入程式的目的:
1)刻畫系統的動態性,發揮系統的併發性。
2)解決共享性,正確地描述程式的執行狀態。
2、可再入程式:指能夠被多個程式同時呼叫的程式。是純程式碼,在執行過程中不被修改,呼叫它的各應用程式提供工作區。編譯程式通常是“可再入”程式,可同時編譯若干源程式。
可再用程式:在被呼叫過程中可以自身修改,在呼叫它的程式退出之前是不允許其他程式來呼叫的。
3、程式:
是可併發執行的程式在某個資料集合上的一次計算活動,也是作業系統進行資源分配和保護的基本單位。擁有結構性,共享性,動態性,獨立性,制約性,併發性。
三態模型:
1)執行態:程式佔用處理器執行的狀態。
2)就緒態:程式具備執行條件,等待系統分配處理器以便其執行的狀態。
3)等待態:又稱阻塞態或睡眠態,指程式不具備執行條件,正在等待某個事件完成。
注意:處於執行態的程式個數不能大於處理器的個數,處於就緒態和等待態的程式可以有多個。
4、建立程式需要兩個步驟:
首先為新程式分配所需資源,建立必要的管理資訊,然後,設定此程式為就緒態,等待被排程執行。
類似的,程式終止:
首先,等待作業系統或相關程式進行善後處理(如抽取資訊),然後,回收被佔用的資源並由系統刪除程式。處於終止態的程式不再被排程執行,下一步將被系統撤銷,最終從系統中消失。
5、掛起程式:
等同於不在主存的程式,因此,掛起程式不會參與低階排程知道它們被對換進主存。掛起程式具有以下特徵:
此程式不能被立即執行。此程式可能會等待某事件發生,所等待的事件獨立於掛起條件,事件結束並不能導致程式具備可執行條件。此程式進入掛起狀態是由於作業系統、父程式或程式自身組織其執行。程式掛起狀態的結束命令只能通過作業系統或父程式發出。
6、程式映像:某時刻程式的內容及其狀態集合。包括以下要素:
1)程式控制塊PCB:每個程式捆綁一個控制塊,用來儲存程式的標誌資訊、現場資訊和控制資訊。程式建立時建立控制塊,程式撤銷時回收其,它與程式一一對應。
2)程式程式塊:是被執行的程式,規定程式的一次執行所應完成的功能。
3)程式核心棧:程式在核心態工作時使用,用來儲存中斷/異常現場,儲存函式呼叫的引數和返回地址,等等。
4)程式資料塊:是程式的私有地址空間,存放各種私有資料,使用者棧也要在資料塊中開闢,用於在函式呼叫時存放棧幀、區域性變數等引數。
7、程式上下文:程式物理實體和支援程式執行的環境的合稱。由三部分組成:
1)使用者級上下文:由正文(程式)、資料、共享儲存區、使用者棧鎖組成,它們佔用程式的虛擬地址空間。
2)暫存器上下文:由程式狀態字暫存器、指令暫存器、棧指標、控制暫存器、通用暫存器組成。
3)系統級上下文:由程式控制塊、主存管理資訊(頁表或段表)、核心棧組成。
8、程式佇列及其管理:
把處於同一狀態的所有程式的PCB連結在一起的資料結構稱為佇列。有三種通用的佇列組織方式:
1)線性方式:作業系統根據系統內程式的最大數目,靜態的分配主存中的某塊空間,所有程式的PCB都組織在一個線性表中。
2)連結方式:對於同一狀態程式的PCB,通過PCB中的連結指標將其連結成佇列,可以採用單向或雙向連結串列。
3)索引方式:利用索引表記錄不同狀態程式的PCB地址,系統建立若干索引表,如就緒索引表、等待索引表、空閒索引表等。
注意:為了標誌和識別佇列,系統為每個佇列均設定佇列標誌,存放於核心空間中。不同狀態的程式可以排成不同的佇列,如執行佇列、就緒佇列和等待佇列。
9、程式上下文切換:程式切換必定在核心態而非使用者態發生。
核心在下列情況下會發生上下文切換:
1)當程式因各種原因進入等待態時。
2)當程式完成其系統呼叫返回使用者態,但尚無資格獲得CPU時。
3)當核心完成中斷處理,程式返回使用者態但尚無資格獲得CPU時。
4)當程式執行的時間片到時或程式結束時。
10、程式切換的實現步驟如下:
1)儲存被中斷程式的處理器現場資訊。
2)修改被中斷程式PCB的有關資訊,如程式狀態等。
3)把被中斷程式的PCB加入相關佇列。
4)選擇佔用處理器執行的另一個程式。
5)修改被選中程式PCB的有關資訊,如改為就緒態。
6)設定被選中程式的地址空間,恢復儲存管理資訊。
7)根據被選中程式的上下文資訊來恢復處理器現場。
11、處理器模式切換:模式切換不同於程式切換,它不一定會引起程式狀態的轉換。
注意:使用者空間和核心空間的資料不能互訪,在應用程式執行系統呼叫的過程中,如果有需要,可通過核心函式copy_from_user( )和copy_to_user( )將資料在使用者空間和核心空間中進行復制。
12、原語:
在核心態執行,是完成系統特定功能的不可分隔的過程,它具有原子操作性,其程式段不允許被中斷,或者說原語不能併發執行。原語的實現方法之一是以系統呼叫的方式提供原語介面,採用遮蔽中斷的方式來實現。
13、程式的建立源於以下事件:
1)提交批作業處理。2)有互動式作業登入終端。3)作業系統建立服務程式。4)已存在的程式建立新程式。
程式的建立過程如下:
1)在程式列表中增加一項,從PCB池中申請一個空閒PCB,為新程式分配唯一的程式識別符號。
2)為新程式的程式映像分配地址空間,以便容納程式實體。由程式管理程式確定載入至程式地址空間中的程式。
3)為新程式分配除主存空間以外的其他各種資源。
4)初始化PCB,如程式識別符號、處理器初始狀態、程式優先順序等。
5)把新程式的狀態設定為就緒態,並將其移入就緒程式佇列。
6)通知作業系統的某些模組,如記賬程式、效能監控程式。
在windows中,使用Win32 API的CreateProcess( )函式建立程式,返回一個程式控制程式碼。
14、程式阻塞和喚醒:
阻塞是指使程式讓出處理器,轉而等待一個事件,如等待資源。等待I/O操作完成、等待某事件發生等。程式通常自呼叫阻塞原語來阻塞自己,所以阻塞是程式的自主行為,是一個同步事件。
15、程式掛起和啟用:
當出現引起掛起事件時,檢查要被掛起程式的狀態,若處於活動就緒態,就修改為掛起就緒態;若處於等待態,就修改為掛起等待態,被掛起程式PCB的非常駐部分要交換到磁碟對換區。
注意:掛起原語既可以由程式自己也可以由其他程式呼叫,但是啟用原語只能由其他程式呼叫。
相關文章
- 作業系統(4)執行緒及其實現作業系統執行緒
- 寫作業系統之實現程式作業系統
- 【讀書筆記+小練習(答案已經更新)】作業系統——程式及其實現筆記作業系統
- 作業系統實驗——程式控制作業系統
- 作業系統3——程式的描述與控制作業系統
- 作業系統--怎麼實現中斷作業系統
- 作業系統實驗2 程式控制和系統呼叫作業系統
- 作業系統-程式管理作業系統
- 【作業系統之程式】作業系統
- 作業系統能實現國產替代嗎?智慧終端作業系統大調查作業系統
- web端作業控制系統簡易實現Web
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統概念-程式控制 實驗報告作業系統
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 0512 作業系統程式排程實驗作業系統
- 作業系統:程式狀態轉換模擬,C語言實現作業系統C語言
- 在Linux作業系統中實現內部程式通訊(轉)Linux作業系統
- 作業系統篇-程式管理作業系統
- 【作業系統】程式管理(二)作業系統
- 埃思特電子作業票系統:實現作業管理線上化
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 作業系統實驗3 經典同步互斥問題作業系統
- Cobbler實現自動化安裝作業系統作業系統
- VMware 實現自己設計的最小作業系統作業系統
- 現代作業系統-原理與實現【讀書筆記】作業系統筆記
- 《大話作業系統——做堅實的工程實踐派》(3)作業系統
- 作業系統——3、型別(7種)作業系統型別
- 作業系統(二):作業系統結構作業系統
- 【作業系統】作業系統綜述(一)作業系統
- 程式設計作業——系統管理程式設計
- 作業系統學習(二)—— 程式作業系統
- 作業系統中程式簡介作業系統
- 作業系統 作業5作業系統
- 基礎夯實:作業系統作業系統
- 作業系統之“實驗一”作業系統
- 解密《一個作業系統的實現》這本書解密作業系統
- Oracle在Windows Server下實現作業系統驗證OracleWindowsServer作業系統