操作系统-进程管理
進程管理
概論:
并發程序和順序程序有本質上的差別,為了能更好地描述程序的并發執行,實現操作系統的并發性和共享性,引入“進程”的概念。
進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。
處理器是計算機系統中最重要的資源。在現代計算機系統中,為了提高系統的資源利用率,CPU將為某一程序獨占。通常采用多道程序設計技術,即允許多個程序同時進入計算機系統的內存并運行
1.任務
保證cpu正確地同時運行多道程序
2.描述
進程是系統中獨立地描述運行程序的基本單位,向系統請求資源分配的單位
3.引入
程序執行:
1. 順序執行特性:順序性(串行),封閉性(最終結果由給定初值決定,不受外界影響),可再現性(只要輸入不變,結果就不變)2. 并行執行:多個事件同時刻發生-需求多個cpu資源3. 并發執行:多個事件同時段發生并運行,進程間分時交替執行,但cpu分時復用的過程特性:間斷性(交替執行),開放性(可以被中斷),不可再現性名詞解釋:
程序是靜態的,特指代碼文件執行時文件的放到內存中
作業是批處理系統要裝入系統處理的一系列程序和數據
進程是可并發執行的的程序在某個數據集合上的一次執行過程時操作系統資源保護,調度,分配的基本單位。其側重點是進程是 1.已經裝入內存的 2.運行的 3.程序及其數據結構
進程特征:
1. 結構性:進程實體(進程映像)包括進程控制塊(PCB),代碼塊,數據塊,堆棧2. 動態性:有創建產生,調度而運行,結束而消亡 相對的程序實際上就是文件,是靜態的并且持久存在3. 獨立性:都有自己的運行數據集,但進程間也可數據通信,共享4. 并發性:但cpu并發,多cpu并行兩類進程:
一.系統進程:
1.管理系統支援并行活動的并發軟件 2.有操作系統自身負責 3.直接管理軟硬件資源 4.優先級高二.用戶進程:
1.系統提供服務的對象 2.由用戶自己負責 3.間接使用軟硬件資源(必須先向系統發出請求等待系統分配和調度資源) 4.優先級低進程實體+運行環境=>進程上下文:
1. 用戶級:由進程的代碼區,數據區,用戶棧區和共享存儲區,在編譯目標文件時產生,占據進程的虛擬地址空間 2. 系統級:由進程控制塊PCB,內存管理信息,進程環境塊和系統棧等組成 3. 寄存器上下文:由程序轉臺寄存器,各類控制寄存器,地址寄存器,通用寄存器和用戶棧指針等組成當一個進程被系統調度而占有cpu是會發生cpu在新老進程中切換,切換的內容就是進程上下文,進程運行時再進程的上下文中執行的
進程狀態及轉換:
3個狀態:
1.執行:占用cpu資源
2.就緒:占用除cpu以外的所有資源
3.阻塞:占用資源較少,一般是占用除cpu,內存以外的所有資源,只是在等待某件事情的發生 eg:等待i/o輸入
狀態之間的關系:
執行到就緒:1.時間片用完2.中斷,優先級高的進入 進程創建時:分配到了除cpu,內存外的所有資源
進程終止時(正常結束/出現嚴重錯誤時):進入終止狀態的進程不再被執行,系統將其處理后會刪除它并回收占用資源
補充:
由內存是否充足還可加上掛起狀態,正常就緒缺內存就為掛起就緒狀態,正常阻塞缺內存就為掛起阻塞狀態.被掛起的進程只有被激活才能由外存調入內存處于就緒狀態
4.進程控制
一.進程控制塊PCB
記錄描述進程當前狀態及控制進程運行的信息,是進程存在的唯一標識
由于其經常被系統訪問,所以PCB常駐內存
PCB中的信息有
進程的標識信息
(1).內部標識:用于操作系統管理進程,一般由數字表示
(2).外部標識:進程創建者提供的進程名,用于用戶訪問進程時的標識,一般由數字和字母組成
當前進程運行的現場信息,用于之后如果被中斷用其恢復到運行狀態
控制信息:程序,數據地址,進程同步,通信機制
操作系統是根據PCB來對進程控制和管理的,將所有進程的PCB集中在系統中合成PCB表,大小決定了系統的并發度,從某進程的進程控制塊中查出其現行狀態及優先級
進程暫停(中斷時):必須將其斷點處的cpu環境保存在PCB中
進程隊列的組織方式:
二.進程控制
1.創建進程:
通過創建原語創建
命名進程(設置進程標識符)->從PCB集合中申請空的PCB->確定優先級->建立共享程序段鏈接指針->分配除CPU,內存的其他各種資源->初始化PCB->若內存充足就加入到就緒隊列中否則放到外存中等待(掛起就緒)創建進程的事件:用戶登錄,作業調度,提供服務
引用請求:使用系統調用完成創建
2.通過介質:原語
1.是指若干指令所組成的用于實現某個特定功能,在執行過程中不可被中斷的程序段(不可分割,不可并發) 2.是系統核心的一個組成部分,同PCB一樣也是常駐內存的,通常在核心態下運行3.兩態
兩態(cpu模式)
中斷或者系統調用時cpu模式由用戶態->核心態,執行系統服務(此時進程仍在原上下文中進行)。當中斷響應和系統服務完成之后通過逆向模式切換,恢復中斷進程的運行
4.進程狀態間的聯系
撤銷原語:撤銷的是標志進程存在的進程控制塊而不是進程的程序段(因為程序段可能是多個進程的一部分)
阻塞與喚醒進程:
阻塞是一種自主行為,喚醒是被動行為(由釋放資源/觸發事件調用喚醒原語)
喚醒原語:把除cpu外其他所有資源都得到的進程設為就緒狀態
掛起與激活進程
掛起與激活進程:
掛起原語可以進程自己調用也可其他進程/系統調用,但激活原語只能由其他進程/系統調用
被掛起進程的非常駐內存部分將交換到外存(磁盤)中
5.進程互斥與同步
并發運行多程序時存在兩種基本管理:競爭和協作
對資源競爭的兩個極端:死鎖與饑餓
互斥:進程爭奪獨占資源而產生的競爭制約關系
同步:進程為共同完成任務基于某個條件來協調其運行進度,執行次序而等待,傳遞信號/消息而產生的協作制約關系
聯系:互斥是一種特殊的同步
臨界資源(獨占資源):某段時間只能由一個進程使用的資源
臨界區:用于訪問臨界資源的代碼段
同步機制:1.有鎖(類比串行執行,浪費cpu的時間)2.信號量+PV操作3.管程(把分散在各進程中的臨界區集中起來管理(既便于系統管理資源又能保證互質訪問)用數據結構抽象表示共享資源,防止進程有意無意做違法同步操作)
6.信號量
信號量是進程在某一特殊點上被迫停止執行(阻塞)直到接收到一個對應的特殊變量值,是資源的實體,是一個與隊列有關的整型變量
信號量除了初值外,只能由PV操作修改
主要作用:
5.進程通信
三種方法:1.消息傳遞 2.共享內存 3.管道通信
一.消息傳遞
適用于少量的數據,要求消息傳遞的兩個進程在一次傳送數據過程中相互同步
消息:進程之間以不連續的成組方式發送的信息
消息通過信息緩沖區在進程間相互傳遞,通信數據封裝在消息中
二.共享內存通信
系統應該允許多個進程將共享內存映射放到自己地址空間中,這些進程對各自映射的地址段讀寫操作的代碼放到臨界區中
三.管道通信
管道實際上是一個共享文件,可借助文件系統機制實現
管道是可以連續讀寫的特殊文件,允許進程FIFO凡是傳送數據,也能是進程同步執行操作類比郵箱,發送進程以字符流的形式將數據放入接收進程從管道接受數據
收發消息的進程間應該是同步關系,進程對管道的使用時互斥的
管道限制:
管道發出的每一消息必須作為一條完整的消息讀入
6.進程調度
功能:通過一定的策略將CPU分配給處于就緒隊列中的某個進程
一.調度模型
1.高級調度(作業調度) 在實時和分時系統中不需要,主要用于創建作業進程和為其服務的系統進程
2.中級調度(平衡調度)在內存不足是采用虛擬存儲技術擴充內存-有點類似于內存分配策略
3.低級調度(進程調度)主要是為進程進行CPU資源的分配
二.調度算法
1. 先來先服務FCFS:屬于非搶占式調度,優點:長作業有力,CPU繁忙型作業有利 缺點:短作業不利,IO繁忙型,要求響應時間高的不利
2. 短作業優先SJF:非搶占式調度,優點:調度性能優于FCFS但對長作業不利,忽視了作業的等待時間,如果不斷的接受短作業,長作業會出現饑餓現象
3. 最短剩余時間優先SRTF:搶占式調度,優點性能優于SJF,但是需要計算剩余時間開銷比較大,并且長作業仍然存在饑餓現象
4. 高響應比HRRF:非搶占式調度,是綜合考慮了FCFS的沒有考慮作業的運行時間和SJF的沒有考慮作業等待時間,是他們之間比較折中的算法
5.優先權:搶占式調度,優先級越小,優先級越高
算法效率:SRJF>SJF>HRRF>FCFS
前面的算法在作業和進程中都是可以使用的
6.時間片輪轉:搶占式調度,關鍵在于設置時間片的大小,如果太大就會退化為FCFS,如果過小就會導致頻繁切換開銷較大
7.多級反饋隊列:搶占式調度,是基于時間片的反饋循環隊列,多個就緒隊列最高級就緒隊列優先級最高但是獲取到的時間片比較短。相反低優先級其時間片長
后兩種算法都是只能用于進程中
這些算法的評價標準可以看:
算法評價
三.死鎖
產生原因:并發進程對臨界資源的競爭以及并發進程的推進順序不當
四大必要條件:
死鎖的避免可以使用銀行家算法
死鎖定理:如果進程-資源分配圖無環則無死鎖
如果有環且每個資源都僅有一個資源則死鎖。當有多個資源是則只是環路等待的必要條件而非充分條件
死鎖充分條件:當且僅當該狀態下的進程-資源分配圖是不可簡化的時候
死鎖檢測:1.基于死鎖定理 2.類似于銀行家算法中的安全性測試算法
死鎖的解除:1.重啟 2.撤銷 3.回滾
7.線程
見:線程
感謝看到這里的你,如果想看更多的內容,還請大家點個贊支持一下吧└(o)┘;
總結
- 上一篇: 自创迷宫
- 下一篇: Java分布式系统高并发解决方案