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