操作系统学习笔记 第二章:进程管理(王道考研)
本文章基于 2019 王道考研 操作系統
考試復習推薦資料:操作系統復習總結 - 百度文庫 (baidu.com)
需要相關電子書的可以關注我的公眾號
BaretH后臺回復操作系統
第一章:操作系統概述
后續章節陸續推出…
二、進程管理
- 2.1 進程的基本概念
- 2.1.1 進程的定義
- 2.1.2 進程的組成
- 2.1.3 進程的特征
- 2.1.4 進程的組織方式
- 2.2 進程的狀態及轉換
- 2.2.1 進程的狀態
- 2.2.2 進程狀態轉換
- 2.3 進程控制
- 2.3.1 什么是進程控制
- 2.3.2 進程控制的實現—原語
- 2.3.3 進程控制相關原語
- 2.4 進程通信
- 2.4.1 什么是進程通信
- 2.4.2 共享存儲
- 2.4.3 消息傳遞
- 2.4.4 管道通信
- 2.5 進程同步與互斥
- 2.4.1 什么是同步、互斥
- 2.4.2 進程互斥的軟件實現
- 2.4.3 進程互斥的硬件實現
- 2.6 信號量機制
- 2.6.1 整形信號量
- 2.6.2 記錄型信號量
- 2.6.3 信號量實現進程同步、互斥、前驅關系
- 2.7 進程同步互斥經典問題
- 2.7.1 生產者消費者問題
- 2.7.2 多生產者多消費者
- 2.7.3 吸煙者問題
- 2.7.4 讀者-寫者問題
- 2.7.5 哲學家進餐問題
- 2.8 管程
- 2.9 線程和多線程模型
- 2.9.1 線程的引入
- 2.9.2 引入線程機制后的變化
- 2.9.3 線程屬性
- 2.9.4 線程的實現方式
- 2.9.5 多線程模型
2.1 進程的基本概念
單道程序階段:
引入多道程序技術后:
2.1.1 進程的定義
在多道程序環境下,允許多個程序并發執行,為了方便操作系統管理完成各程序并發執行,引入了進程
Process的概念,實現操作系統的并發性和共享性(最基本的兩個特性)
從不同的角度,進程可以有不同的定義,比較典型的定義有:
- 進程是程序的一次執行過程
- 進程是一個程序及其數據在處理機上順序執行時所發生的活動
- 進程是具有獨立功能的程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位
引入進程實體的概念后,我們可以把傳統操作系統中的進程定義為:“進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位
2.1.2 進程的組成
為了使參與并發執行的程序(含數據)能獨立地運行,必須為之配置一個專門的數據結構稱為進程控制塊(Process Control Block,PCB)。系統利用PCB來描述進程的基本情況和運行狀態,進而控制和管理進程。PCB是進程存在的唯一標志。相應地,由程序段、相關數據段和PCB三部分構成了進程映像(進程實體)。所謂創建進程,實質上是創建進程映像中的PCB;而撤銷進程,實質上是撤銷進程的PCB.值得注意的是,進程映像是靜態的,進程則是動態的。
PCB的組成:
程序段、數據段的組成:
2.1.3 進程的特征
2.1.4 進程的組織方式
進程的組織——鏈接方式:
進程的組織——索引方式:
2.2 進程的狀態及轉換
2.2.1 進程的狀態
進程在其生命周期內,由于系統中各進程之間的相互制約關系及系統的運行環境的變化,使得進程的狀態也在不斷地發生變化,通常進程有以下五種狀態,前三種是進程的基本狀態:
- 運行態:進程正在處理機上運行。在單處理機環境下,每個時刻最多只有一個進程處于運行態。
- 就緒態:進程獲得了除處理機外的一切所需資源,一旦得到處理機,便可立即運行。系統中處于就緒狀態的進程可能有多個,通常將它們排成一個隊列,稱為就緒隊列
- 阻塞態,又稱等待態:進程正在等待某一事件而暫停運行,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成。即使處理機空閑,該進程也不能運行
- 創建態:進程正在被創建,尚未轉到就緒態。創建進程通常需要多個步驟:首先申請個空白的PCB,并向PCB中填寫些控制和管理進程的信息;然后由系統為該進程分配運行時所必需的資源;最后把該進程轉入就緒態
- 結束態:進程正從系統中消失,可能是進程正常結束或其他原因中斷退出運行。進程需要結束運行時,系統首先必須置該進程為結東態,然后再進一步處理資源釋放和回收等工作
基本狀態轉換圖:
五狀態轉換圖:
2.2.2 進程狀態轉換
2.3 進程控制
2.3.1 什么是進程控制
進程控制的主要功能是對系統中的所有進程實施有效的管理,它具有創建新進程、撤銷已有進程、實現進程狀態轉換等功能。
2.3.2 進程控制的實現—原語
在操作系統中,一般把進程控制用的程序段稱為原語,原語的特點是執行期間不允許中斷,它是一個不可分割的基本單位。
如何實現原語的“原子性”
正常情況下,CPU每執行完一條指令都會例行檢查是否有中斷信號需要處理,如果有, 則暫停運行當前這段程序,轉而執行相應的中斷處理程序。而當CPU執行了關中斷指令之后,就不再例行檢查中斷信號,直到執行開中斷指令之后才會恢復檢查。這樣,關中斷、開中斷之間的這些指令序列就是不可被中斷的,這就實現了“原子性“
2.3.3 進程控制相關原語
創建原語
撤銷原語
阻塞&喚醒原語(成對出現)
進程切換
2.4 進程通信
2.4.1 什么是進程通信
進程通信是指進程之間的信息交換
PV操作是低級通信方式,高級通信方式是指以較高的效率傳輸大量數據的通信方式。高級通信方法主要有以下三類:共享存儲、消息傳遞、管道通信
2.4.2 共享存儲
在通信的進程之間存在一塊可直接訪問的共享空間,通過對這片共享空間進行寫/讀操作實現進程之間的信息交換。在對共享空間進行寫/讀操作時,需要使用同步互斥工具(如P操作、V操作),對共享空間的寫/讀進行控制。共享存儲又分為兩種:低級方式的共享是基于數據結構的共享;高級方式的共享則是基于存儲區的共享。操作系統只負責為通信進程提供可共享使用的存儲空間和同步互斥工具,而數據交換則由用戶自己安排讀/寫指令完成。
2.4.3 消息傳遞
在消息傳遞系統中,進程間的數據交換是以格式化的消息(Message)單位的。若通信的進程之間不存在可直接訪問的共享空間,則必須利用操作系統提供的消息傳遞方法實現進程通信。進程通過系統提供的發送消息和接收消息兩個原語進行數據交換
- 直接通信方式:發送進程直接把消息發送給接收進程,并將它掛在接收進程的消息緩沖隊列上,接收進程從消息緩沖隊列中取得消息
- 間接通信方式:發送進程把消息發送到某個中間實體,接收進程從中間實體取得消息。這種中間實體一般稱為信箱,這種通信方式又稱信箱通信方式。該通信方式廣泛應用于計算機網絡中,相應的通信系統稱為電子郵件系統
2.4.4 管道通信
管道通信是消息傳遞的一種特殊方式。所謂“管道”,是指用于連接一個讀進程和一個寫進程以實現它們之間的通信的一個共享文件,又名pipe文件。向管道(共享文件)提供輸入的發送進程(即寫進程),以字符流形式將大量的數據送入(寫)管道;而接收管道輸出的接收進程(即讀進程)則從管道中接收(讀)數據。為了協調雙方的通信,管道機制必須提供以下三方面的協調能力:互斥、同步、確定對方的存在
2.5 進程同步與互斥
2.4.1 什么是同步、互斥
1?? 什么是進程同步?
在多道程序環境下,進程是并發執行的,不同進程之間存在著不同的相互制約關系。例如,讓系統計算1+2×3,假設系統產生兩個進程:一個是加法進程,一個是乘法進程要讓計算結果是正確的,一定要讓加法進程發生在乘法進程之后,但實際上操作系統具有異步性,若不加以制約,加法進程發生在乘法進程之前是絕對有可能的,因此要制定一定的機制去約束加法進程,讓它在乘法進程完成之后才發生,而這種為了協調進程之間的相互制約關系的機制就是 進程同步
同步亦稱直接制約關系,是指為完成某種任務而建立的兩個或多個進程,這些進程因為需要在某些位置上協調它們的工作次序而等待、傳遞信息所產生的制約關系。進程間的直接制約關系源于它們之間的相互合作。
2?? 什么是進程互斥?
互斥也稱間接制約關系。當一個進程進入臨界區使用臨界資源時,另一個進程必須等待,當占用臨界資源的進程退出臨界區后,另一進程才允許去訪問此臨界資源。
我們把一個時間段內只允許一個進程使用的資源稱為臨界資源,進程中訪問臨界資源的代碼段稱為臨界區。許多物理設備(比如攝像頭、打印機)都屬于臨界資源。此外還有許多變量、數據、內存緩沖區等都屬于臨界資源。
例如,在僅有一臺打印機的系統中,有兩個進程A和進程B,若進程A需要打印時,系統已將打印機分配給進程B,則進程A必須阻塞。一旦進程B將打印機釋放,系統便將進程A喚醒,并將其由阻塞態變為就緒態。
為禁止兩個進程同時進入臨界區,同步機制應遵循以下準則:
- 空閑讓進。臨界區空閑時,可以允許一個請求進入臨界區的進程立即進入臨界區
- 忙則等待。當已有進程進入臨界區時,其他試圖進入臨界區的進程必須等待
- 有限等待。對請求訪問的進程,應保證能在有限時間內進入臨界區
- 讓權等待。當進程不能進入臨界區時,應立即釋放處理器,防止進程忙等待
2.4.2 進程互斥的軟件實現
1?? 單標志法
2?? 雙標志先檢查法
3?? 雙標志后檢查法
4?? Peterson算法
2.4.3 進程互斥的硬件實現
1?? 中斷屏蔽方法
2?? TestAndSet
3?? Swap指令
2.6 信號量機制
信號量機制的引入:
2.6.1 整形信號量
2.6.2 記錄型信號量
2.6.3 信號量實現進程同步、互斥、前驅關系
1?? 信號量實現進程互斥
2?? 信號量實現進程同步
3?? 信號量實現前驅關系
2.7 進程同步互斥經典問題
2.7.1 生產者消費者問題
semaphore mutex = 1; // 互斥信號量,實現對緩沖區的互斥訪問
semaphore empty = n; // 同步信號量,表示空閑緩沖區的數量
semaphore full = 0; // 同步信號量,表示產品的數量,也即非空緩沖區的數量
2.7.2 多生產者多消費者
2.7.3 吸煙者問題
2.7.4 讀者-寫者問題
2.7.5 哲學家進餐問題
如何避免死鎖發生?
- 可以對哲學家進程施加一些限制 條件,比如最多允許四個哲學家同 時進餐。這樣可以保證至少有一個 哲學家是可以拿到左右兩只筷子的
- 要求奇數號哲學家先拿左邊的筷子,然后再拿右邊的筷子,而偶數號哲學家剛好相反。用這種方法可以保證如果相鄰的兩個奇偶號哲學家都想吃飯,那么只會有其中一個可以拿起第一只筷子,另一個會直接阻塞。這就避免了占有一支后再等待另一只的情況
- 僅當一個哲學家左右兩支筷子都可用時才允許他抓起筷子
2.8 管程
2.9 線程和多線程模型
2.9.1 線程的引入
引入進程的目的是為了更好地使多道程序并發執行,提高資源利用率和系統吞吐量;而引入線程的目的則是為了減小程序在并發執行時所付出的時空開銷,提高操作系統的并發性能。
線程最直接的理解就是“輕量級進程”,它是一個基本的CPU執行單元,也是程序執行流的最小單元,由線程ID、程序計數器、寄存器集合和堆棧組成。線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程,同一進程中的多個線程之間可以并發執行。由于線程之間的相互制約,致使線程在運行中呈現出間斷性。線程也有就緒、阻塞和運行三種基本狀態。
引入線程后,進程的內涵發生了改變,進程只作為除CPU外的系統資源的分配單元,而線程則作為處理機的分配單元。由于一個進程內部有多個線程,若線程的切換發生在同一個進程內部,則只需要很少的時空開銷。
引入線程后:
2.9.2 引入線程機制后的變化
1?? 并發性方面
2?? 系統開銷方面
3?? 資源分配調度方面
2.9.3 線程屬性
2.9.4 線程的實現方式
線程的實現可以分為兩類:
用戶級線程(User-Level Thread,ULT)和內核級線程(Kernel-Level Thread,KLT)
用戶級線程:在用戶級線程中,有關線程管理(線程的創建、撤消和切換等)的所有工作都由應用程序完成,內核意識不到線程的存在。應用程序可以通過使用線程庫設計成多線程程序。通常,應用程序從單線程開始,在該線程中開始運行,在其運行的任何時刻,可以通過調用線程庫中的派生例程創建一個在相同進程中運行的新線程。
內核級線程:在內核級線程中,線程管理的所有工作由內核完成,應用程序沒有進行線程管理的代碼,只有一個到內核級線程的編程接口。內核為進程及其內部的每個線程維護上下文信息,調度也在內核基于線程架構的基礎上完成。
組合方式:有些系統中使用組合方式的多線程實現。線程創建完全在用戶空間中完成,線程的調度和同步也在應用程序中進行。一個應用程序中的多個用戶級線程被映射到一些(小于等于用戶級線程的數目)內核級線程上。
2.9.5 多線程模型
有些系統同時支持用戶線程和內核線程,由此產生了不同的多線程模型,即實現用戶級線程和內核級線程的連接方式
1?? 多對一模型
2?? 一對一模型
3?? 多對多模型
總結
以上是生活随笔為你收集整理的操作系统学习笔记 第二章:进程管理(王道考研)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统学习笔记 第一章:操作系统概述(
- 下一篇: 操作系统学习笔记 第三章:处理机调度与死