進程管理:算法
進程基本概念:
安全
1. 每一個進程在內存都中有實際的空間,包括代碼段、數據段、堆、棧等多線程
2. 進程的五個狀態:運行、就緒、等待(阻塞)、建立、結束函數
3. 每一個操做系統只有一個運行進程、一個就緒進程隊列和 N 個等待進程隊列,一個等待進程隊列等待同一個資源spa
4. 每一個進程在操做系統中進程控制塊(PCB)來表示操作系統
5. 進程的上下文切換,就是離開的進程要將CPU寄存器中的值放到本身PCB的registers中,而進入的進程將PCB的registers中的值放到CPU寄存器中;上下文切換是額外開銷,應儘可能減小線程
6. 進程間通訊(IPC): 信號量、消息隊列、共享內存、管道、套接字、信號設計
線程基本概念:隊列
1. 與進程的區別:進程
宏觀上,資源擁有的單位爲進程(或任務),調度的單位爲線程;
線程只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其餘線程共享進程擁有的所有資源
線程的系統開銷比進程小
2. 用戶級線程:不依賴與OS核心(內核不瞭解用戶線程的存在),應用進程利用線程庫提供建立、同步、調度和管理線程的函數來控制用戶線程,典型的JVM
3. 內核級線程:依賴於OS核心,由內核的內部需求進行建立和撤銷,用來執行一個指定的函數;一個線程發起系統調用而阻塞,不會影響其餘線程;時間片分配給線程,因此多線程的進程得到更多CPU時間
4. 基於上兩種線程,有不一樣的多線程模型:
多對一模型,多個用戶級線程對應一個內核級進程
一對一模型,一個用戶級線程對應一個內核級線程
多對多模型,多個用戶級線程對應多個內核級進程
CPU調度:
1. 調度算法的評價準則:
週轉時間:進程從提交到完成所經歷的時間; 平均週轉時間 = All(週轉時間)/進程數 ; 帶權週轉時間 = 週轉時間/CPU執行時間 ; 平均帶權週轉時間 = All(帶權週轉時間)/進程數
響應時間:從進程提交到首次被響應的時間
等待時間:進程在就緒隊列中等待的時間總和
吞吐量:單位時間內所完成的進程數
CPU利用率
2. 進程調度算法:
1. FCFS算法(先來先服務):有利於長進程不利於短進程,有利於CPU型的進程不利於I/O型的進程
2. SPF算法(短做業優先):相對FCFS算法改善平均週轉時間,縮短進程的等待時間,提升了系統的吞吐量;但對長進程不利,而且進程的執行時間難以預估
3. SJF算法(最短剩餘時間優先):是基於搶佔式的SJF算法
補充:HRRN算法(高響應比優先):響應比 = (等待時間 +執行時間)/執行時間
4. 優先權調度算法:分爲靜態優先權和動態優先權,會致使進程飢餓,此時使用動態優先權,在優先權中加入時間參數
5. RR算法(時間片輪轉):響應時間 = 進程數目 * 時間片長度
6. 多級隊列調度算法:把就緒隊列再分爲若干個子隊列,各子隊列的調度算法不同,而且各子隊列也有優先級的區別,如分紅系統進程、用戶交互進程、批處理進程等
7. 多級反饋隊列調度算法:時間片輪轉算法和優先級算法的綜合,從上到下隊列的優先級逐級下降,但時間片長度逐級加倍,只有上層隊列執行完了才執行下層隊列,一個進程完成了一個隊列中分給它的時間片,就降到下一級隊列末尾
進程同步:
1. 進程面臨的控制問題:互斥、死鎖、飢餓
2. 同步機制應遵循的準則:互斥、空閒讓進、有限等待
3. 解決進程同步的問題:軟件設計、硬件指令和信號量機制
4. 信號量機制:
1. 記錄型信號量結構: typedef struct {
int value;
struct process *L;
} semaphore;
2. 信號量的值只能經過初始化及兩個原子操做改變:P、V(wait、signal)操做,分別表明分配資源和釋放資源
3. 信號量分爲互斥信號量(初始值永遠是1)和同步信號量(初始值根據資源數肯定)
4. wait和signal操做:
進程死鎖:
1. 產生死鎖的必要條件:互斥、不可搶佔、請求和保持、環路等待
2. 解決死鎖的基本方法:死鎖預防、死鎖避免、死鎖檢測和死鎖恢復
3. 死鎖預防:破壞四個必要條件中的一個條件
4. 死鎖避免:容許進程動態地申請資源,系統在進行資源分配以前,先計算資源分配的安全性。若這次分配不會致使系統從安全狀態向不安全狀態轉換,即可將資源分配給進程;不然不分配資源,進程必須阻塞等待,從而避免死鎖。 安全條件:系統中存在一個安全序列<P0,P1,P2....>, 其中Pi將申請的資源<=(當前擁有資源+全部進程Pj佔有的資源),j<i 使用銀行家算法實現
5.死鎖檢測:檢測資源分配圖是否能夠簡化
6. 死鎖恢復:有選擇地殺死進程
7. 現代操做系統避免死鎖採用的方式是:鴕鳥算法(不理不睬,僞裝不知道)