深入理解作業系統 3 程序的控制

2021-08-31 18:45:40 字數 2180 閱讀 2793

1. 程序的執行模式

1. 使用者模式:非特權模式。

2. 核心模式:又叫系統模式,控制模式或核心模式。在核心模式下的軟體會完全控制處理器和所有指令,暫存器和記憶體。

模式切換

當使用者呼叫乙個作業系統的服務或者中斷觸發系統例程的執行時,執行模式會由使用者模式轉換為核心模式。

當從系統服務返回使用者程序時,執行模式又置回使用者模式。

2. 程序建立

引發原因

--系統核心建立:1使用者登入;2作業排程;3提供服務;

--由應用建立:4應用請求(程序派生)。

建立過程

--1. 申請空白pcb;

--2.為新程序分配資源;

--3. 初始化程序控制塊(初始化標識資訊,處理器狀態資訊,處理器控制資訊);

--4. 將新程序插入就緒佇列。

3. 程序終止

引發事件

--1. 正常結束

--2. 異常結束:越界錯誤,保護錯,非法指令,特權指令錯,執行超時錯,等待超時,算術運算錯,i/o故障。

--3. 外界干預

--操作員或os干預(比如發生了思索,需要操作員或os終止該程序);

--被父程序終止;

--父程序終止。

終止過程

--1. 從pcb集合種檢索出該程序的pcb,從種讀取程序狀態;

--2. 若處於執行狀態,終止該程序的執行,並置排程標誌為真重新排程;

--3. 若有子孫程序,將所有子孫程序終止;

--4. 將全部資源歸還給父程序或系統;

--5. 將其從pcb所在佇列(或鍊錶)中移除。

4. 阻塞/喚醒

引發事件

1. 請求系統服務;

2. 啟動某種操作;

3. 新資料為到達;

4. 無新工作可做。

阻塞過程(block)

--1. 儲存當前程序的cpu現場;

2. 置該程序狀態(執行到阻塞);

3. 進入阻塞佇列(根據不同的阻塞原因進入不同佇列);

4. 轉程序排程程式進行重新排程,把處理器分配給別人。

(阻塞是程序自身的一種主動行為)

喚醒過程(wakeup)

1. 把被阻塞的程序從阻塞佇列中移出;

2. pcb狀態改阻塞為就緒;

3. 將pcb插入就緒佇列。

(如果在某程序中呼叫了阻塞原語,則必須在與之相合作的另一程序中或其他相關的程序中安排喚醒原語,以能喚醒阻塞程序)

5. 掛起/啟用

掛起過程(suspend)

檢查被掛起程序狀態:

--活動就緒 -> 靜止就緒

--活動阻塞 -> 靜止阻塞

–執行狀態 -> 轉向排程程式重新排程/並且進入靜止就緒

啟用過程(active)

--靜止就緒 -> 活動就緒

--靜止阻塞 -> 活動阻塞

6. 程序的切換

引發事件

1. 中斷:與當前正在執行程序無關的外部事件相關,比如完成了一次i/o操作。

--控制權轉讓給中斷處理程式;

--中斷處理程式完成輔助工作;

--控制權再轉交給已發生中斷的例程。

中斷常有時鐘中斷i/o中斷記憶體失效中斷(需要調頁/段)

2. 陷阱:與當前執行的程序產生的錯誤或異常條件有關,如非法的檔案操作。

--當錯誤致命時,程序置退出,並切換程序;

--不致命時,嘗試恢復,或通知使用者。

3. 系統呼叫

程序切換的步驟

1. 儲存處理器上下文;

2. 更新當前程序的pcb;

3. 將pcb移到相應佇列;

4. 選擇另一程序;

5. 更新所選程序的pcb;

6. 更新記憶體管理資料結構;

7. 更新上下文資訊為當前程序的上下文資訊。..

....

桃花仙人種桃樹,又摘桃花換酒錢_

深入理解計算機作業系統(2 2 4)

在c語言中,對於有符號數和無符號數之間的轉換是從位級的角度來考慮的而不是從數級的角度來考慮的。簡單說就是,對於有符號數和無符號數之間的轉換,我們希望的是在可以表示的範圍內,數值表示不變,但是c語言中,是二進位制位不變,改變解釋二進位制位的方式。舉例 乙個8位的無符號數128,二進位制位是100000...

深入理解計算機作業系統(三)

基本資料型別 大小端模式 整型數範圍與c標準 複合型型別轉換 從short到unsigned 讓我們複習一下c語言中基本資料型別的位元組數 名稱32位 64位char11 short int22 int4 4long int48 long long int88 char 48 float44 dou...

深入理解計算機作業系統(九)

本文將介紹儲存器層次結構以及區域性性對程式效能的影響。什麼是儲存器層次結構?區域性性 這個詞大家也許並不陌生,計算機中的儲存器從暫存器 快取到記憶體 硬碟,形成了乙個層次結構。為什麼不用單一的一種儲存裝置,比如只用硬碟呢?因為每一種儲存裝置都有它的優缺點,硬碟雖然儲存空間大,但傳輸速率太慢,完全跟不...