操作系统(2) -- 进程管理
2.1 進程與線程
為什么引入進程?
多道程序環境下,允許多個程序并發執行,為了更好的描述和控制程序的并發執行,實現操作系統的并發性和共享性
進程:
進程控制塊(process control block,PCB):利用PCB描述進程的基本情況和運行態,進而控制和管理進程。是進程存在的唯一標志。
程序段,數據段,PCB組成進程實體
進程:是進程實體的運行過程,是系統進行資源分配(資源指處理機、存儲器、其他澀北服務于某個進程的時間)和調度的一個獨立單位(未引入線程)
進程的基本特征:動態性、并發性、獨立性、異步性、結構性
進程的狀態與轉換:
-
通常有5種,前3種是基本狀態:運行態、就緒態、阻塞態(等待態)、創建態、結束態
進程控制:進程創建,進程終止,進程阻塞與喚醒,進程切換
進程的組織:
-
進程控制塊:進程描述信息,進程控制和管理信息,資源分配清單和處理機相關信息;PCB組織方式有鏈接方式和索引方式
-
程序段:能被進程調度程序調到CPU執行的程序代碼段,可被多個進程共享
-
數據段
進程通信:
共享存儲:進程之間存在一塊可直接訪問的共享空間,通過對共享空間的讀寫實現信息交換。操作系統負責為通信進程提供可共享的存儲空間和同步互斥工具
消息傳遞:以格式化的消息為單位,通過發送消息和接收消息兩個原語進行數據交換
-
直接通信:直接掛在接收進程的消息隊列
-
間接通信:發到某個中間實體(信箱)
管道通信:用 一個用于連接讀進程和寫進程的共享文件 實現通信。以字符流形式發送。管道只能半雙工通信。且一旦數據被讀取,就從管道中拋棄,釋放空間。
線程:
引入線程的目的?
減小程序在并發執行時所付出的時空開銷,提供操作系統的并發性能。
線程:一個基本的CPU執行單元,程序執行流的最小單元。線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,與同屬于一個進程的其他線程共享進程的資源。
進程內涵改變:引入線程后,進程作為除CPU外的系統資源的分配單元,線程作為處理機的分配單元
線程屬性:輕型實體,不擁有資源,有唯一標識線程控制塊;不同線程可執行相同程序;同進程中不同線程共享進程資源;線程是處理機調度單位,多線程可以并發;
線程實現方式:
-
用戶級線程:線程管理由應用程序完成,通過線程庫設計
-
內核級線程:線程管理由內核完成,應用程序沒有線程管理的代碼,有一個到內核級線程的編程接口
-
組合方式
線程與進程比較
調度:線程是獨立調度的基本單位,線程是擁有資源的基本單位
擁有資源:線程沒有系統資源,進程擁有資源,但線程可以訪問進程的資源
并發性:進程可以并發,線程也可以
系統開銷:線程開銷小,進程開銷大
地址空間和其他資源:進程地址空間相互獨立,線程沒有自己獨立的地址空寂,它共享其所屬進程的空間
通信:線程通信需要進程同步和互斥手段,線程可以直接讀寫進程數據段通信
單處理系統,發生死鎖時全部進程處于阻塞態
阻塞態轉就緒態不會引起另一個進程的狀態變化
I/O操作完成之前進程在等待結果,狀態為阻塞態;完成后進程等待事件就緒,變成就緒態。
運行態到阻塞態的狀態轉換是進程自身決定的
?
2.2 處理機調度
處理機調度:把處理機分配給某個進程,處理機調度是多道程序操作系統的基礎
調度層次:作業調度、中級調度、進程調度,進程調度是最基本的,不可缺少
不能進行進程切換的情況:
處理中斷
進程在操作系統內核程序臨界區
其他需要完全屏蔽中斷的原子操作過程中
進程調度方式:非剝奪,剝奪
調度的基本準則:
CPU利用率
系統吞吐量:單位時間內CPU完成作業的數量
周轉時間:從作業提交到作業完成所經歷的時間;周轉時間 = 作業完成時間 - 作業提交時間
平均周轉時間:多個作業周轉時間的平均值
帶權周轉時間:作業周轉時間/作業實際運行時間
等待時間
響應時間:從用戶提交請求到系統首次產生響應所用的時間
調度算法:
先來先服務(FCFS):選最先進入隊列的作業調入內存,分配資源創建進程放入就緒隊列;不可剝奪;算法簡單,對長作業有利,對短作業不利,有利于CPU繁忙型作業,不利于I/O繁忙型作業
短作業優先(SJF):選擇運行時間最短的作業;對長作業不利,導致饑餓現象,沒有考慮作業的緊迫程度;SJF平均等待時間,平均周轉時間最少
優先級調度:選擇優先級最高的作業;分非剝奪式和剝奪式;
高響應比優先:選擇響應比最高的作業運行;響應比 = (1+等待時間/要求服務時間)
時間片輪轉調度:適用分時系統。將就緒進程排序,每個進行運行一個時間片。
多級反饋隊列調度算法:動態調整進程優先級和時間片的大小;設置多個就緒隊列,賦予不同優先級,賦予各個隊列中進程執行時間片的大小各不相同,優先級越高,時間片越小
分時操作系統調度:高響應比,時間片輪轉,多級反饋隊列調度
實時操作系統調度:優先級調度算法
?
2.3 進程同步
基本概念:
臨界資源:一次僅允許一個進程使用的資源
臨界區:訪問臨界資源的那段代碼
同步:直接制約關系,為完成某種任務而建立的兩個或多個進程,需要在某些位置上協調工作次序,傳遞信息所產生的制約關系
互斥:間接制約關系,一個進程進入臨界區,另一個進程必須等待
同步機制準則:空閑讓進,忙則等待,有限等待,讓權等待
實現臨界區互斥的基本辦法:
軟件實現方法:
-
單標志法
-
雙標志先檢查
-
雙標志后檢查
-
Peterson's Algorithm
硬件實現方法:
-
TestAndSet方法
-
中斷屏蔽方法(關中斷)
信號量:
-
P,V操作,P請求資源,V釋放資源
-
同步信號量初值為0
-
互斥信號量初值為1
-
應用:若某個行為要用某種資源,在這個行為前P這種資源;若某行為提供某資源,在這個行為后V這種資源。在互斥問題中,P,V操作要求夾緊使用互斥資源的那個行為,中間不能有其他冗余代碼。
管程:
定義:一組數據及定義在這組數據上的對這組數組的操作組成的軟件模塊
組成:局部于管程的共享數據結構說明;對該數據結構進行操作的一組過程;對局部于管程的共享數據設置初始值額語句
特性:局部于管程的數據只能被局部于管程內的過程所訪問;一個進程只有調用管程內過程才能進入管程訪問共享數據;每次運行一個進程在管程內執行某個內部過程
同步問題:
-
生產者--消費者問題
-
讀者--寫者問題
-
哲學家進餐問題
-
吸煙者問題
硬件方法實現進程同步不能實現讓權等待,Peterson算法滿足有限等待不滿足讓權等待。
?
?
2.4 死鎖
死鎖的概念:
死鎖:指多個進程因為競爭資源而造成一種僵局,若無外力作用,這些進程都無法向前推進
產生原因:
爭用系統資源
進程推進順序非法
死鎖產生的必要條件,只要一個不滿足,死鎖就不會發生
互斥條件
不剝奪條件
請求并保持
循環等待
死鎖的處理策略
死鎖預防:破壞死鎖產生的4個必要條件之一即可
死鎖避免
系統安全狀態:允許進程動態申請資源,但系統在進行資源分配之前,先計算此次資源分配的安全性。若此次分配導致系統進入不安全的狀態,就讓進程等待,否則,分配資源。
銀行家算法:OS為銀行家,OS管理的資源為資金,進程向OS請求資源相當于貸款。OS按規則為進程分配資源。當進程首次申請資源,要測試該進程對資源的最大需求量,若可滿足,則按當前申請量分配資源,否則推遲分配。當進程執行中繼續申請資源,測試當前占用和申請的資源是否超過最大需求量,超過拒絕,未超過測試現有資源是否滿足最大需求量,滿足則分配申請的資源,否則推遲分配。
死鎖檢測及解除
資源分配圖
死鎖定理:S為死鎖狀態的條件是當且僅當S狀態的資源分配圖是不可完全簡化的。
死鎖解除:
資源剝奪法
撤銷進程法
進程回退法
總結
以上是生活随笔為你收集整理的操作系统(2) -- 进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(6) -- 查找
- 下一篇: 操作系统(3) -- 内存管理