進程


進程

文章來源:(16條消息) 進程|操作系統_資資的博客-CSDN博客

一、進程的概念

1.1進程的定義

程序:指令序列
進程:程序段、數據段、PCB三部分組成了進程實體(進程映像)。
PCB是進程存在的唯一標志。

進程的定義:

  • 進程是程序的一次動態執行。
  • 進程是一個程序及其數據在處理機上順序執行時所發生的活動。
  • 進程是具有獨立功能的程序在其數據集合上運行的過程,他是系統調度和資源分配的一個獨立單位。

1.2進程組成

1.3進程的組織

進程組織方式 描述
鏈式方式 按照進程的狀態將PCB分為多個隊列,操作系統持有指向各個隊列的指針
索引方式 根據進程的狀態不同,建立幾張索引表,操作系統持有指向各個索引表的指針

1.4進程的特征

  • 動態性
  • 並發性
  • 獨立性
  • 異步性

二.進程的狀態和轉換

2.1三種基本狀態

狀態 概念
就緒 已經具備運行條件,但是由於沒有空閑CPU,而暫時不能運行
運行 占有CPU,正在CPU上運行
阻塞 等待某一事件的發生,暫時不能運行

2.2另外兩種狀態

	1)創建狀態
	2)結束狀態
狀態 概念
創建 進程正在被創建,操作系統為進程分配資源,初始化PCB
結束 進程正在從系統中撤銷,操作系統會回收進程擁有的資源,撤銷PCB

2.3進程狀態的轉換

運行->阻塞:一種進程自身做出的主動行為(進程用“系統調用”的方式申請某種系統資源,或者請求等待某個事件的發生)
阻塞->就緒:不是進程自身能控制的,是一種被動行為

三、進程控制

進程控制的主要功能就是對系統中的所有進程實施有效的管理,它具有創建進程、撤銷已有進程、實現進程狀態轉換的功能。

3.1用原語實現進程控制

原語:執行期間不允許中斷,只能一氣呵成
(原語采用“關中斷”和“開中斷指令”實現)

關中斷和開中斷的權限非常大,只允許在核心態下執行的特權指令

進程控制相關的原語

  • 更新PCB中的信息
    1. 所有的進程控制原語都一定會修改進程狀態標志
    2. 剝奪當前運行進程的CPU使用權必然需要保存其運行環境
    3. 某進程開始運行前必然要恢復其運行環境
  • 將PCB插入合適隊列
  • 分配/回收資源

四、進程通信

進程通信:進程之間信息交換
進程是分配系統資源的單位,因此各個進程擁有的地址空間相互獨立

4.1共享存儲

兩個進程對共享空間的訪問必須是互斥的(互斥通過操作系統提供的工具實現(P、V))。
操作系統負責提供共享空間和同步互斥工具。
  • 1)基於數據結構的共享
    低級通信

  • 2)基於存儲區的共享
    高級通信

4.2消息傳遞

格式化消息

消息頭 消息體
發送進程 ID、接收進程 ID、消息類型、消息長度等格式化信息 消息內容

進程間交換的數據以格式化消息(Message)為單位。進程通過操作系統提供的“發送消息原語/接收進程原語”兩個原語進行數據交換。

  • 1)直接通信方式
    消息直接掛到接收進程的消息緩沖隊列上。

  • 2)間接通信方式
    消息要先發送到中間的實體(信箱)。

4.3.管道通信

“管道”是指用於連接讀寫進程的一個共享文件,又名pipe文件。它其實就是在內存中開辟一個固定大小的緩沖區。

管道只能采用“半雙工通信”,某一時間段內只能實現單向傳輸。如果需要實現雙向同時通信,則需要設置兩個管道。
各個進程要互斥的訪問管道。
數據以字符流的形式寫入管道,當管道寫滿時,寫進程的write()被阻塞。
如果沒有寫滿,不允許讀;如果沒讀空,就不允許寫。
讀進程只能有一個

五、線程概念

5.1為什么要引入線程

有的進程可能需要“同時”做很多事情,而傳統的進程只能串行地執行一系列程序。為此,引入“線程”來增加並發度。

傳統進程 引入線程
進程是程序執行流的最小單位 線程是程序執行流的最小單位
只能進程間並發 線程間也能並發
進程並發,需要切換進程的運行環境,系統開銷很大 如果是同一進程內的線程切換,則不需要切換進程環境,系統開銷小

5.2.線程的CPU

  1. 線程是處理機調度的單位
  2. 多CPU計算機中,各個線程可占用不同的CPU
  3. 線程也有三種基本狀態
  4. 同一進程的不同線程共享進程的資源
  5. 同一進程的線程通信無需操作系統的干預,由於共享內存地址空間
  6. 同一進程中的線程切換,不會引起進程切換
  7. 不同進程中的線程切換,會引起進程切換
  8. 切換同一進程中的線程,系統開銷小
  9. 切換進程,系統開銷較大

5.3線程的實現方式

  • 1)用戶級線程(User-Level Thread)
    用戶級線程由應用程序通過線程實現,所有的線程管理工作都有應用程序負責。
    用戶及線程中,線程的切換可以在用戶態下完成,無需操作系統干預。

在用戶看來,是有多個線程,但是在操作系統內核看來,並意識不到線程的存在,調度還是以進程為單位。

  • 2)內核級線程(Kernel-Level Thread KLT)
    內核線程的管理工作由操作系統完成,線程調度、線程切換等工作也是由內核負責,因此內核級線程的切換必須要在核心態下才能完成。

  • 3)兩者組合的方式
    操作系統只能感知內核級線程,因此只有內核級線程才是處理機分配的單位。

  • 4)多線程模型
    多對一
    多個用戶級線程映射到一個內核級線程,每個用戶進程只對應一個內核級線程。

優點 缺點
用戶級線程的切換在用戶空間即可以完成,不需要切換到核心態,線程管理的系統開銷小,效率高 當一個用戶級線程被阻塞后,整個進程都會被阻塞,並發度不高,多個線程不能再多核處理機上並發執行
一對一
一個用戶級線程映射到一個內核級線程,每個用戶進程有與用戶級線程同樣數量的內核級線程。
優點 缺點
當一個線程被阻塞后,別的線程還可以繼續執行,並發能力強,多線程可在多核處理機上並行執行 一個用戶進程會占多個內核級線程,線程切換由操作系統內核完成,需要切換到核心態,因此線程管理成本高,開銷大
多對多

六、處理機調度

6.1調度基本概念

在多道程序系統中,進程的數量往往是多於處理機的個數的,這樣不可能同時並行的處理各個進程。
處理機調度:從就緒隊列中按照一定的算法選擇一個進程,將處理機分配給他運行,以實現進程的並發執行

6.2調度的三個層次

1)高級調度(作業調度)
高級調度(作業調度)是按一定原則從外存上處於后備隊列中的作業中選擇一個(或多個)作業,給他們分配內存等必要資源,並建立相應的進程(建立PCB),使他們獲得競爭處理機的權力。

2)中級調度(內存調度)
引入了虛擬存儲技術后,可將暫時不能用的進程調至外存等待,等他重新具備了運行條件且內存又稍微有空時,再重新調入內存。

暫時調到外存等待的進程狀態為掛起狀態,PCB並不會一起調到外存(操作系統還需要管理),而是會常駐內存,PCB會記錄進程數據在外存中存放的位置,進程狀態等信息。
操作系統通過內存中的PCB來保持對各個進程的監控、管理。被掛起進程的PCB會被放到掛起隊列中。

中級調度(內存調度):就是要決定哪個處於掛起狀態的進程要重新調入內存。
一個進程可能會被多次調出、調入內存,因此中級調度發生的頻率要比高級調度更高。

3)低級調度(進程調度)
低級調度(進程調度),其主要任務就是按照某種方法和策略從就緒隊列中選取一個進程,將處理機分配給他。
進程調度是操作系統中的一種最基本的調度,在一般的操作系統中都必須配置進程調度。

七、調度算法評價指標

-CPU利用率(忙碌的時間/總時間)

系統吞吐量(單位時間內完成的作業,總共完成作業/總共花銷時間)
周轉時間(作業被提交給系統開始,到作業完成為止這段時間的間隔)
在后備隊列的等待時間+在就緒隊列的等待進程調度時間+CPU執行時間+等待I/O操作完成的時間
周轉時間=作業完成時間-作業提交時間
帶權周轉時間=作業周轉時間/作業實際運行時間
響應時間:用戶提交請求到首次產生響應所用的時間
調度算法

1.先來先服務

算法 特點
先來先服務 對長作業有利,對短作業沒利
考慮的是等待時間,等待時間越久優先級越高。

2.短作業優先

算法 特點
短作業優先 對長作業沒利,對短作業有利,可能產生飢餓現象
要求服務的時間越短,優先級越高
每次調度時選擇當前已經到達,且運行時間最短的作業/進程

3.高響應比優先

上述兩種算法的權衡折中

4.時間片輪轉

時間片太大 時間片太小
淪為FCFS,響應時間過長 頻繁的切換開銷太大

5.優先級調度算法

6.多級反饋隊列調度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM