作業系統
內容援引自王道考研,感謝各路大神的原創分享,若筆記存在錯誤煩請批評指正~
概念
??本質是系統軟體,向上為用戶和應用程式提供服務,向下擴展硬體,具有并發、共享、虛擬、異步的特征,實作了檔案管理、記憶體管理、行程管理、行程調度和設備管理等功能,
??命令介面(用于直接使用)、程式介面(用于通程序式間接使用,即系統呼叫),
??兩種指令,特權指令和非特權指令;處理器兩種狀態,用戶態和內核態;兩種程式,用戶程式和內核程式,用戶程式運行在用戶態,執行非特權指令;內核程式運行在內核態,執行非特權指令或特權指令,
作業系統的內核
??內核提供時鐘管理、中斷處理、原語和系統資源管理等功能,并發性引入中斷機制,發生中斷后作業系統介入,處理器由用戶態進入內核態(中斷是處理器由用戶態進入內核態的唯一途徑),根據中斷信號來源將中斷可分為內中斷和外中斷,常見的內中斷包括系統呼叫、缺頁中斷、整數除零等,常見的外中斷包括IO請求,
??系統呼叫是作業系統提供給應用程式使用的介面,使應用程式使用系統呼叫獲得作業系統服務,庫函式是對系統呼叫的進一步封裝,用戶態下應用程式發起系統呼叫,執行陷入指令引發內中斷,切換到內核態,執行系統呼叫相關的程式,切換回用戶態,
行程
行程的組成
??行程是程式的一次執行程序,是資源分配的基本單位,執行緒是處理器調度的基本單位,行程的組成包括PCB、程式段、資料段,PCB資料結構中包括行程描述資訊(行程id,用戶id)、行程管理和控制資訊(行程狀態和行程優先級)、資源分配清單(程式段指標、資料段指標、分配的硬體資源等)、暫存器值(用于行程切換恢復現場),
行程的狀態
??行程的狀態包括創建狀態、就緒狀態(缺處理器)、運行狀態、阻塞狀態(等待某資源或事件)、終止狀態

行程控制
??行程控制實作行程狀態間切換,用原語實作(原語使用關中斷和開中斷實作),行程控制需要修改PCB,將PCB插入合適的佇列,分配或釋放資源等,
??引起行程切換的事件:當前行程主動阻塞、當前行程時間片用完、更高優先級的行程到達、當前行程終止,
行程通信
??行程是資源分配的基本單位,行程記憶體地址彼此獨立,可以通到管道、訊息傳遞、共享存盤三種方式實作行程間通信,
??管道通信本質是在記憶體中開辟大小固定的緩沖區,各行程互斥訪問管道,資料寫入管道,寫滿write系統呼叫被阻塞;讀行程讀資料,讀空read系統呼叫被阻塞,管道采用半雙工通信,資料被讀出則被丟棄,故只能有一個讀行程,
??訊息傳遞包括直接通信和間接通信,直接通信是指訊息直接掛在接收行程的訊息緩沖佇列,間接通信是指通過中間物體進行轉發,如訊息佇列,
??共享存盤是指互斥訪問共享存盤區,
行程調度,選擇行程+行程切換
??處理機調度的三個層次,作業調度、記憶體調度和行程調度,作業調度是指從后備佇列選擇合適的作業由外存調入記憶體并創建行程;記憶體調度是從掛起佇列選擇合適行程由外存調入記憶體;行程調度是從就緒佇列選擇合適的行程分配處理機,由此引出行程的七狀態模型,相比五狀態模型添加了就緒掛起、阻塞掛起,
??不能進行行程調度的場景,中斷處理程序中、原子操作程序中,
??常見的行程調度演算法包括先來先服務FCFS、短作業優先SJF、高回應比優先HRRN、時間片輪轉調度演算法RR、優先級調度演算法、多級反饋佇列調度演算法,
- FCFS考慮行程的等待時間,按行程到達的先后順序分配處理機,對短行程不友好,不會導致行程饑餓,
- SJF考慮行程的要求服務時間,對長行程不友好,可能導致行程饑餓,
- HRRN綜合考慮行程的等待時間和要求服務時間,為高回應比的行程分配處理機,
- 時間片輪轉調度演算法屬于搶占式演算法,各行程輪流執行一個時間片,不能區分任務的緊急程度,
- 優先級調度演算法為優先級最高的行程分配處理機,可能導致行程饑餓,多級反饋佇列調度演算法設定多級就緒佇列,各就緒佇列優先級從高到低,時間片從小到大;新行程先進入第一級佇列,按FCFS等待分配處理機,若時間片用完行程尚未結束,則行程進入下一級佇列,若已在底層佇列則重新進入底層佇列;只有上層佇列為空時才為下層佇列的行程分配處理機;被搶占處理機的行程重新進入所屬佇列,
行程互斥
??臨界資源是指一段時間內只允許一個行程訪問的資源,,臨界區是指訪問臨界資源的代碼,行程互斥是指對互斥的訪問臨界資源,需要遵循空閑讓進、忙則等待、有限等待、讓權等待,
- 空閑讓進,臨界區空閑時允許一個行程訪問;
- 忙則等待,臨界區正在被某行程訪問時,其它試圖訪問的行程需要等待;
- 有限等待,等待的行程有限時間內進入臨界區,避免發生行程饑餓;
- 讓權等待,等待的行程釋放處理機,避免忙等;
??行程互斥的軟體實作方法包括單標志法、雙標志先檢查、雙標志后檢查、Peterson演算法,硬體實作方法包括中斷屏蔽、TestAndSet指令和Swap指令,
??信號量機制,包括整型信號量和記錄型信號量,
- 整型信號量數值表示某資源數,
P操作對應wait原語,當該資源不夠時回圈等待,當該資源充分時占用資源;V操作對應signal原語,釋放資源;由于P操作資源不夠時回圈等待,故整型信號量不滿足讓權等待原則, - 記錄型信號量,
P操作表示行程請求某資源,value--,若value<0表示資源已被分配完,則請求該資源的行程呼叫block原語自我阻塞,主動放棄處理機,并插入該資源的等待佇列;V操作表示釋放該類資源,檢查value<=0是否成立,若成立表示有行程在等待該資源,呼叫wakeup原語喚醒等待佇列中第一個行程,
typedef struct{
int value; // 剩余資源數
struct process *L // 等待佇列
} semaphore;
void wait(semaphore s){
s.value--;
if(s.value < 0){
block(s.L);
}
}
void signal(semaphore S){
s.value++;
if(s.value <= 0){
wakeup(s.L);
}
}
??信號量實作行程互斥,設定互斥信號量,初值為1,臨界區前執行P操作,臨界區后執行V操作;
??信號量實作行程同步,為前驅關系設定同步信號量,初值為資源數,前操作后執行V操作,后操作前執行P操作;
管程 - 封裝的思想
??管程定義了代表共享資源的資料結構和對該共享資料結構實施操作的一組程序所組成的資源管理程式,管程保證了對共享資源的互斥訪問,其互斥性由編譯器支持,
執行緒
??執行緒控制塊TCB,同一行程下各執行緒共享行程資源,同一行程下執行緒切換不需要作業系統介入,同一行程的執行緒切換不會引起行程切換,不同行程下執行緒切換會引起行程切換,
??執行緒實作方式包括用戶級執行緒(執行緒管理不需要內核的支持)和內核級執行緒(執行緒管理需要內核支持),多執行緒模型包括一對一,多對一、多對多模型,
死鎖
??持有某資源且互相等待對方資源,死鎖產生的必要條件,互斥訪問、請求與保持(破壞:一次性申請所有資源)、不可剝奪(破壞:申請不到某資源,主動釋放持有的資源)、回圈等待(破壞:按序申請資源),
??死鎖的處理策略
- 預防死鎖見上文括號;
- 避免死鎖即避免系統進入不安全狀態(銀行家演算法,嘗試分配該資源是否會進入不安全狀態,會進入不安全狀態則拒絕分配,否則進行分配);
- 死鎖的檢測和解除;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548446.html
標籤:Java
上一篇:微服務可用性之隔離限流降級
