操作系統(tǒng)復習筆記(二)——現(xiàn)代操作系統(tǒng)結(jié)構(gòu)之進程管理

二、 進程管理

進程的基本概念

程序的順序執(zhí)行

當前操作執(zhí)行完才能進行后續(xù)操作

  • 順序性
  • 封閉性
  • 可再現(xiàn)性

程序的并發(fā)執(zhí)行

程序的并發(fā)執(zhí)行
  • 間斷性
  • 失去封閉性
  • 不可再現(xiàn)性
程序的并發(fā)執(zhí)行

進程的特征

  • 結(jié)構(gòu)特征,每個進程帶有進程控制塊數(shù)據(jù)結(jié)構(gòu)
  • 動態(tài)性
  • 并發(fā)性
  • 獨立性
  • 異步性

進程的定義

  • 進程是程序的一次執(zhí)行
  • 進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動。
  • 進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位
  • 進程是進程實體的運行過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位

進程的三種基本狀態(tài)

  • 就緒

  • 執(zhí)行

  • 阻塞


    三種基本狀態(tài)的相互轉(zhuǎn)換
  • 掛起(第四種狀態(tài))
    引入掛起的原因:

  1. 終端用戶的請求。
  2. 父進程請求。
  3. 負荷調(diào)節(jié)的需要。
  4. 操作系統(tǒng)的需要。

掛起是外界人為強制的,阻塞是硬件資源不足

有了掛起,增加掛起狀態(tài)(又稱靜止狀態(tài))和非掛起(活動狀態(tài))
(1) 活動就緒→靜止就緒。
(2) 活動阻塞→靜止阻塞。
(3) 靜止就緒→活動就緒。
(4) 靜止阻塞→活動阻塞。


具有掛起狀態(tài)的進程狀態(tài)圖

進程的控制塊

控制塊的作用

進程控制塊的作用是使一個在多道程序環(huán)境下不能獨立運行的程序(含數(shù)據(jù)),成為一個能獨立運行的基本單位,一個能與其它進程并發(fā)執(zhí)行的進程。或者說,OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。

控制塊中的基本信息
  • 進程的標識符
    進程標識符用于惟一地標識一個進程。一個進程通常有兩種標識符:
    (1) 內(nèi)部標識符。在所有的操作系統(tǒng)中,都為每一個進 程賦予一個惟一的數(shù)字標識符,它通常是一個進程的序號。 設(shè)置內(nèi)部標識符主要是為了方便系統(tǒng)使用。
    (2) 外部標識符。它由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往是由用戶(進程)在訪問該進程時使用。
  • 處理機狀態(tài)
    處理機狀態(tài)信息主要是由處理機的各種寄存器中的內(nèi)容組成的。
    ① 通用寄存器,又稱為用戶可視寄存器,它們是用戶程序可以訪問的,用于暫存信息, 在大多數(shù)處理機中,有 8~32 個通用寄存器,在RISC結(jié)構(gòu)的計算機中可超過 100 個;
    ② 指令計數(shù)器,其中存放了要訪問的下一條指令的地址;
    ③ 程序狀態(tài)字PSW,其中含有狀態(tài)信息,控制信息等;
    ④ 用戶棧指針, 指每個用戶進程都有一個或若干個與之相關(guān)的系統(tǒng)棧,用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址。棧指針指向該棧的棧頂。
  • 進程的調(diào)度信息
    在PCB中還存放一些與進程調(diào)度和進程對換有關(guān)的信息,包括:
    ① 進程狀態(tài),指明進程的當前狀態(tài), 作為進程調(diào)度和對換時的依據(jù);
    ② 進程優(yōu)先級,用于描述進程使用處理機的優(yōu)先級別的一個整數(shù), 優(yōu)先級高的進程應(yīng)優(yōu)先獲得處理機;
    ③ 進程調(diào)度所需的其它信息,它們與所采用的進程調(diào)度算法有關(guān),比如,進程已等待CPU的時間總和、 進程已執(zhí)行的時間總和等;
    ④ 事件,是指進程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)所等待發(fā)生的事件,即阻塞原因。
  • 進程的控制信息
    進程控制信息包括:
    ① 程序和數(shù)據(jù)的地址, 是指進程的程序和數(shù)據(jù)所在的內(nèi)存或外存地(首)址,以便再調(diào)度到該進程執(zhí)行時,能從PCB中找到其程序和數(shù)據(jù);
    ② 進程同步和通信機制,指實現(xiàn)進程同步和進程通信時必需的機制, 如消息隊列指針、信號量等,它們可能全部或部分地放在PCB中;
    ③ 資源清單,是一張列出了除CPU以外的、進程所需的全部資源及已經(jīng)分配到該進程的資源的清單;
    ④ 鏈接指針, 它給出了本進程(PCB)所在隊列中的下一個進程的PCB的首地址。
控制塊的組織方式
  • 鏈接方式
    系統(tǒng)按照進程的狀態(tài)將進程的PCB組成隊列,從而形成就緒隊列、阻塞隊列、運行隊列等。


    鏈接方式
  • 索引方式
    系統(tǒng)按照進程的狀態(tài)分別建立就緒索引表、阻塞索引表等。


    索引方式

Linux的進程控制塊:
在創(chuàng)建一個新進程時,系統(tǒng)在內(nèi)存中申請一個空的task_struct區(qū),即空閑PCB塊,并填入所需信息。同時將指向該結(jié)構(gòu)的指針填入到task[]數(shù)組中。當前處于運行狀態(tài)進程的PCB用指針數(shù)組current_set[]來指出。這是因為Linux支持多處理機系統(tǒng),系統(tǒng)內(nèi)可能存在多個同時運行的進程,故current_set定義成指針數(shù)組。

進程控制

進程的創(chuàng)建

進程的創(chuàng)建

進程的終止

引起進程終止(Termination of Process)的事件

  1. 正常結(jié)束
  2. 異常結(jié)束
    常見的有:① 越界錯誤。② 保護錯。③ 非法指令。④ 特權(quán)指令錯。⑤ 運行超時。⑥ 等待超時。⑦ 算術(shù)運算錯。⑧ I/O故障。
  3. 外界干預(yù)(通常人為)

進程的阻塞與喚醒

  1. 請求系統(tǒng)服務(wù)
  2. 啟動某種操作
  3. 新數(shù)據(jù)尚未到達
  4. 無新工作可做

進程同步

概念

兩種制約關(guān)系
  • 間接相互制約關(guān)系---共享資源 (cpu,I/O設(shè)備)
  • 直接相互制約關(guān)系---進程間合作 (進程需要另一進程數(shù)據(jù),
    比如IE瀏覽器與網(wǎng)卡)
臨界資源

許多硬件資源如打印機,磁帶機等,屬于臨界資源,諸進程采取互斥方式實現(xiàn)對這種資源的共享。

臨界區(qū)
同步機制應(yīng)遵守的規(guī)則
  • 空閑讓進。臨界區(qū)空閑,進程進去
  • 忙則等待。臨界區(qū)忙,進程等待
  • 有限等待。 訪問臨界區(qū)進程,等待不要太長
  • 讓權(quán)等待。進程不能進入臨界區(qū),釋放CPU

信號量機制

整型信號量機制
整型信號量
記錄型信號量機制
記錄型信號量

信號量的應(yīng)用

實現(xiàn)進程互斥
利用信號量實現(xiàn)互斥

利用信號量機制,wait(mutex)和signal(mutex)必須成對出現(xiàn);
缺少wait(mutex)將導致不能保證對臨界資源互斥訪問;
缺少signal(mutex)將導致臨界資源永遠不被釋放,導致被阻塞進程無法喚醒。

經(jīng)典進程同步問題

生產(chǎn)者-消費者

利用記錄型信號量解決生產(chǎn)者—消費者問題:
假定在生產(chǎn)者和消費者之間的公用緩沖池中,具有n個緩沖區(qū),這時可利用互斥信號量mutex實現(xiàn)諸進程對緩沖池的互斥使用;利用信號量empty和full分別表示緩沖池中空緩沖區(qū)和滿緩沖區(qū)的數(shù)量。又假定這些生產(chǎn)者和消費者相互等效,只要緩沖池未滿,生產(chǎn)者便可將消息送入緩沖池;只要緩沖池未空,消費者便可從緩沖池中取走一個消息。對生產(chǎn)者—消費者問題可描述如下:


生產(chǎn)者

消費者

首先,在每個程序中用于實現(xiàn)互斥的wait(mutex)和 signal(mutex)必須成對地出現(xiàn);
其次,對資源信號量empty和full的wait和signal操作, 同樣需要成對地出現(xiàn),但它們分別處于不同的程序中。例如,wait(empty)在計算進程中,而signal(empty)則在打印進程中,計算進程若因執(zhí)行wait(empty)而阻塞, 則以后將由打印進程將它喚醒;
最后,在每個程序中的多個wait操作順序不能顛倒。應(yīng)先執(zhí)行對資源信號量的wait操作,然后再執(zhí)行對互斥信號量的wait操作,否則可能引起進程死鎖。

高級進程通信

類型
  • 共享存儲器系統(tǒng)
    基于共享數(shù)據(jù)結(jié)構(gòu)的通信
    基于共享存儲區(qū)域的通信

  • 管道通信

  • 消息傳遞系統(tǒng)

  • 客戶-服務(wù)系統(tǒng)

線程

基本概念

為使程序能并發(fā)執(zhí)行,系統(tǒng)還必須進行以下的一系列操作。
1) 創(chuàng)建進程
2) 撤消進程
3) 進程切換
雖然進程可以提高CPU的利用率,但是進程之間的切換是非常耗費資源和時間的。
為了能更進一步的提高 操作系統(tǒng)的并發(fā)進,引進了線程。
進程是分配資源的基本單位,而線程則是系統(tǒng)調(diào)度的基本單位。一個進程內(nèi)部的線程可以共享該進程的所分配到的資源。線程的創(chuàng)建與撤消,線程之間的切換所占用的資源比進程要少很多。線程切換僅僅保存和設(shè)置少量寄存器內(nèi)容,切換代價遠遠低于進程。
這個資源,是指進程的代碼段,數(shù)據(jù)段及系統(tǒng)資源,如打開的文件、I/O設(shè)備。

線程的屬性

  • 輕型實體。
  • 獨立調(diào)度和分派的基本單位。
  • 可并發(fā)執(zhí)行。
  • 共享進程資源。

線程的創(chuàng)建和終止

在多線程OS環(huán)境下,應(yīng)用程序在啟動時,通常僅有一個線程在執(zhí)行,該線程被人們稱為“初始化線程”。它可根據(jù)需要再去創(chuàng)建若干個線程。
終止線程的方式有兩種:一種是在線程完成了自己的工作后自愿退出;另一種是線程在運行中出現(xiàn)錯誤或由于某種原因而被其它線程強行終止。

多線程OS中的進程

在多線程OS中,進程是作為擁有系統(tǒng)資源的基本單位,通常的進程都包含多個線程并為它們提供資源,但此時的進程就不再作為一個執(zhí)行的實體。 多線程OS中的進程有以下屬性:
(1) 作為系統(tǒng)資源分配的單位。
(2) 可包括多個線程。
(3) 進程不是一個可執(zhí)行的實體。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容