一、程序
二、程序狀態轉換
五狀態模型
七狀態模型
重要的狀態間轉換:
三、程序描述
作業系統的控制結構
程序控制結構
程序控制塊
四、程序控制
執行模式
程序的建立
程序切換
toc識別符號:唯一標識
狀態:執行狀態
優先順序: 相對於其他程序的優先順序
上下文資訊:程序執行時處理器暫存器中的資料
i/o狀態資訊:包括顯示的i/o請求列表,分配給程序的i/o裝置列表,程序使用的檔案列表等
記賬資訊:處理器使用的時間總和、使用的時鐘總和、記賬號等
這些元素被儲存在程序控制塊(processing control block,pcb)中,程序控制塊由作業系統建立和管理。
程序狀態間轉換實現的排隊規則:
作業系統是管理資源的實體,它控制計算機內部事件,為cpu排程和分派程序,為程序分配資源,相應使用者程式的基本服務請求。
圖中有程序p1到pn,p1正在執行,使用著cpu、控制著兩個i/o、位於記憶體中;p2在記憶體中、控制著i/o,等待p1控制的i/o;pn是掛起的,不在記憶體中。
作業系統維護著4種不同型別的表:記憶體、i/o、檔案、程序
記憶體表用於跟蹤內(實)存和外存(虛擬記憶體),它必須包含的資訊有:
分配給程序的記憶體
分配給程序的外存
記憶體塊或虛擬記憶體塊的任務保護屬性
管理虛擬記憶體需要的資訊
i/o表用於管理系統中的i/o裝置和通道,任何時刻i/o裝置處於可用或已分配給某個程序這兩種狀態之一。如果是已分配,則記錄i/o狀態和傳送的源以及目標記憶體單元。
檔案表提供關於檔案是否存在、以及在外存中的位置、當前狀態和其他屬性。
程序表用於管理和控制程序。
程序映像:程式、資料、棧和程序控制塊。
如果系統要管理程序,則其程序映像必須至少有一部分在記憶體中,為執行該程序,整個程序映像載入記憶體中或至少載入虛擬記憶體中,即在任何時刻,程序映像的一部分可以在記憶體中,剩餘部分可以在外存中。
程序控制塊中的三類屬性:
程序標識資訊,每個程序都有乙個唯一識別符號,程序表中的項與唯一識別符號存在對應關係
處理器狀態資訊,處理器暫存器內容,包括使用者可見暫存器、控制暫存器、狀態暫存器、棧指標、狀態字暫存器
程序控制資訊,系統控制和協調各種活動程序所需的額外資訊
程序控制塊包含了系統所需的關於程序的所有資訊,系統中的每個模組,比如涉及排程、資源分配、中斷處理、效能監控和分析的模組,都可能讀取和修改它。
程式的執行模式可以分為使用者態(非特權模式)和核心態(特權模式)。
分兩種執行模式是為了保護作業系統和重要的作業系統表不受使用者程式干擾。
當使用者呼叫作業系統服務或中斷觸發系統例程的執行時,執行模式被設為核心態。當系統服務返回到使用者程序時,執行模式被設定為使用者態。
執行模式實際是處理器的不同執行級別。
程序的建立過程:
給新程序分配唯一識別符號
給程序(整個映像)分配空間
初始化程序控制塊
分配到正確的排程佇列
建立或擴充其他資料結構
可能觸發#程序切換#的條件:
發生系統中斷,如時鐘中斷、i/o中斷、缺頁中斷
發生陷阱,發生與程序無關的外部事件
發生系統呼叫,發生系統呼叫的程序通常被阻塞
中斷處理過程(發生中斷一定引起模式切換,不一定引起程序切換)
設定pc指向中斷處理程式開始處
從使用者態切換為核心態,將被中斷程式的上下文(控制塊中處理器狀態資訊部分)儲存到程序控制塊中
處理中斷,如果是時鐘中斷,處理器控制權將被分派器獲得,並發生程序切換
程序切換過程
儲存上下文
更新程序控制塊中的狀態等資訊
將程序控制塊移動到相應佇列(就緒佇列、阻塞於事件i佇列,就緒/掛起佇列)
另一程序被選擇執行
更新所選程序的程序控制塊中的狀態等資訊
更新記憶體管理的資料結構
恢復所選程序最近一次退出執行狀態時的上下文
來自為知筆記(wiz)
第三章 程序排程與死鎖
程序排程的功能 程序排程的功能由作業系統的程序程式來完成 按照某種策略和演算法從就緒態程序中為當前空閒的cpu選擇在其上執行的新程序 程序排程的功能是什麼?按照某種策略和演算法從就緒態程序中選擇新程序執行。需要程序排程的時機 1.程序正常或異常結束 程序阻塞 有更高優先順序程序到來,時間片用完時都會...
Linux第三章 程序概念
1.調研程序的排程演算法.有利於長作業和cpu繁忙的作業,不利於短作業和i o繁忙作業 輪轉法 round robin 將所有需要cpu處理的就緒的程序按照fcfs原則排隊。之後cpu會劃分時間片,根據時間片來給佇列上的程式執行,當時間片結束。當前程序中斷,讓出cpu讓下一程序使用。高響應比優先排程...
第三章 進製
少於兩位要補零 string res for int i c.size 1 i 0 i res c i return res int main y 總果然寫的還是簡單多了qwq sstream操作下的解題方法 include include using namespace std char name...