版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、進程調度及進程管理處理機管理1 第05講 進程調度及進程管理 5.1 作業(yè) 5.2 進程 5.3 線程 5.4 小結 5.5 習題 進程調度及進程管理處理機管理2 提高處理機(CPU)的使用率,使它盡可能處于工 作狀態(tài),是操作系統(tǒng)管理功能的主要目標之一。 在Linux系統(tǒng)中,提高處理機使用率的技術措施主 要是多道和分時,處理機在進程之間切換,按照一定 的規(guī)則輪流執(zhí)行每個進程。對于單個處理機的系統(tǒng), 這些進程宏觀上看似并行執(zhí)行,而微觀上來看仍然是 串行執(zhí)行的,這種執(zhí)行方式被稱為并發(fā)執(zhí)行。操作系 統(tǒng)通過并發(fā)控制機制,對處理機進行分配、調度,在 保證每個進程都得到公平合理執(zhí)行的同時,使系統(tǒng)中 的各種
2、資源得到充分的使用。 本講主要圍繞處理機管理展開,著重介紹進程的概 念,同時也包括相關的兩個基本概念:作業(yè)和線程。 進程調度及進程管理處理機管理3 作業(yè)是用戶向計算機系統(tǒng)提交一項工作的基本單 位,是用戶在一次事務處理或計算過程中要求計算機 所做工作的總和。 作業(yè)和程序是兩個相互聯(lián)系而又不同的概念。如 果一次業(yè)務處理可以由某一個程序完成,就是說這個 業(yè)務處理只要提交這一個程序就夠了,這種情況下, 這個程序就是一個作業(yè)。通常,完成一次業(yè)務需要由 多個程序協(xié)同完成,這時,多個程序、這些程序需要 的數(shù)據(jù)以及必要的作業(yè)說明一起構成一個作業(yè)。系統(tǒng) 通過作業(yè)說明書(JCB)或者作業(yè)控制語句(JCL)控制程
3、序和相應的數(shù)據(jù)執(zhí)行,完成整個業(yè)務處理。 5.1 作業(yè) 進程調度及進程管理處理機管理4 按照對作業(yè)的處理方式,可以分為聯(lián)機、批處理 等作業(yè)。Linux系統(tǒng)中的shell提供了操作系統(tǒng)和用戶之 間的聯(lián)機命令接口。 Linux的shell同時提供了程序級接口。用戶通過提 交一個命令或一個命令序列以批處理方式執(zhí)行特定的 操作。 在Linux分時批處理系統(tǒng)中,也可以根據(jù)對作業(yè)執(zhí) 行時的響應特征分為前臺作業(yè)和后臺作業(yè)。 在多用戶系統(tǒng)中,多個用戶、不同類型的作業(yè)可 能同時請求執(zhí)行,控制和管理這些作業(yè),協(xié)調它們之 間的關系,就是作業(yè)調度,作業(yè)調度是處理機調度的 一部分。 5.1 作業(yè) 進程調度及進程管理處理機
4、管理5 計算機內存中同時存放多個相互獨立的已經開 始運行的程序實體,大家按照某種規(guī)則輪流使用處 理器,這是現(xiàn)代多道操作系統(tǒng)實現(xiàn)資源共享,提高 系統(tǒng)資源利用率的主要方式。描述這些程序實體的 概念就是進程。 在多道情況下,每個進程獨立地擁有各種必要 的資源,占有處理機,獨立地運行。在多道系統(tǒng)中, 同時存在多個進程,所以當某個進程進入等待狀態(tài) 時,操作系統(tǒng)將把處理機控制權拿過來并交給其他 可以運行的進程。進程之間存在著相互制約、相互 依賴的約束關系。 5.2 進程 進程調度及進程管理處理機管理6 一種最糟糕的情況是所有進程都擁有部分資源, 同時在等待其他進程擁有的資源,這樣,大家都無法 運行,進入一
5、種永久等待的狀態(tài),這種情況稱為死鎖, 死鎖是對系統(tǒng)資源極大的浪費,必須設法避免。 本節(jié)著重討論現(xiàn)代多道操作系統(tǒng)中的核心概念 進程,這是理解操作系統(tǒng)工作原理的基礎和關鍵。 首先介紹單個進程的狀態(tài)、狀態(tài)轉換的條件和控制原 語、進程在系統(tǒng)中的靜態(tài)描述等,接著介紹多個進程 之間的約束關系,由此引出進程間通信的概念,通信 是協(xié)調、解決進程間約束關系的惟一手段,這種約束 關系處理不當造成的最嚴重的后果就是死鎖。 5.2 進程 進程調度及進程管理處理機管理7 5.2.1 進程的概念 進程的概念最早出現(xiàn)在60年代中期,用于多道系 統(tǒng),在Linux系統(tǒng)中,進程也稱為任務(task)。簡單講, 進程就是正在運行的
6、程序,更為嚴謹?shù)谋磉_是,進程 是一個具有一定獨立功能的程序關于某個數(shù)據(jù)集合的 一次運行活動。 進程的概念對于理解操作系統(tǒng)有決定性的意義, 而真正理解進程,必須了解它的基本性質。 進程是操作系統(tǒng)分配資源和進行調度的獨立單位, 具有獨立性、動態(tài)性。多道系統(tǒng)中同時存在多個進程, 這些進程擁有各自的資源,各自獨立地執(zhí)行,對于單 處理機系統(tǒng),進程宏觀上同時運行而微觀上是依次執(zhí) 行,這種情況稱為并發(fā)執(zhí)行。 5.2 進程 進程調度及進程管理處理機管理8 1. 進程和程序 進程和程序是一對相互聯(lián)系的概念。程序是指令 的有序集合,是一個靜態(tài)的概念,描述完成某個功能 的一個具體操作過程,而進程是程序針對某一組數(shù)據(jù)
7、 的一次執(zhí)行過程,更強調動態(tài)特征。一個完整的進程, 包括程序、執(zhí)行程序所需要的數(shù)據(jù),同時還必須包括 記錄進程狀態(tài)的數(shù)據(jù)資料。 在多道分時操作系統(tǒng)中,按照時間片輪流在各個 進程間切換。對于單處理器系統(tǒng),每一個時刻只能有 一個進程在執(zhí)行,當分配給該進程的時間片用完之后, 不管該進程運行到什么程度,都必須立即停止,然后 讓出處理器資源,下一個進程進入執(zhí)行狀態(tài)。 5.2 進程 進程調度及進程管理處理機管理9 讓出處理器的進程必須記錄好正在運行的狀態(tài), 包括寄存器、堆棧等各種信息,這些信息保證當處理 器下次切換到這個進程的時候,進程能夠正確地從上 次執(zhí)行到的位置繼續(xù)往下執(zhí)行。 一個程序在處理相同或不同的
8、操作數(shù)據(jù)時可以同 時對應于多個進程。一個進程也可以包含多個程序, 某個程序在運行過程中,可能同時會調用到多個其他 程序,這些具有調用關系的多個程序共同構成一次完 整的運行活動,即一個完整的進程。 5.2 進程 進程調度及進程管理處理機管理10 舉一個直觀的例子。我們在Linux系統(tǒng)下使用編 輯器vi進行編輯,同時打開多個窗口,編輯多個不同 名稱的文件,vi編輯器是一個可執(zhí)行程序,不同的文 件就是不同的操作數(shù)據(jù),而對應于這些文件同時打開 的每一個編輯窗口就對應著一個進程,每一個進程都 處于不同的狀態(tài)。 如果說程序是提供計算機操作的一組工作流程的 話,進程就是具體的工作過程,按照同樣的工作流程,
9、針對不同的原料,可以同時開始多個工作過程,得到 多種不同的成品。這種工作流程和工作過程的關系就 可以類比為程序和進程的關系。 5.2 進程 進程調度及進程管理處理機管理11 2. 進程和作業(yè) 作業(yè)是用戶向計算機系統(tǒng)提交一項工作的基本單 位,是用戶在一次事務處理或計算過程中要求計算機 所做工作的總和。進程是一個具有一定獨立功能的程 序關于某個數(shù)據(jù)集合的一次運行活動,是操作系統(tǒng)分 配資源和進行調度的基本單位。 作業(yè)是描述用戶向系統(tǒng)提交工作任務的實體單位, 而進程是系統(tǒng)完成工作任務時程序執(zhí)行的實體單位。 從這個角度講,他們處于不同的層次,作業(yè)描述用戶 和操作系統(tǒng)之間的任務委托關系,而進程描述操作系
10、統(tǒng)內部任務的具體執(zhí)行過程。一個用戶的任務,即作 業(yè),由用戶提交給系統(tǒng),必須以進程的形式具體完成。 5.2 進程 進程調度及進程管理處理機管理12 對于批處理系統(tǒng),通常,作業(yè)放在外存中專門 的作業(yè)隊列中等待進入內存執(zhí)行,要經過一次宏觀 調度,由外存進入內存,以進程的形式運行。而對 于Linux這樣的分時系統(tǒng),沒有宏觀調度,作業(yè)不經 過調度,直接進入內存,以進程的形式開始運行。 任何一個進程,都存在于內存中,并且是已經開始 運行的動態(tài)實體。 5.2 進程 進程調度及進程管理處理機管理13 5.2.2 進程描述 進程是一個動態(tài)的概念,描述程序的一次運行活 動。它存在于系統(tǒng)的內存中,是操作系統(tǒng)可感知、
11、可 控制的動態(tài)實體,是系統(tǒng)分配各種資源、進行調度的 基本單位。 1. 進程控制塊 現(xiàn)在我們來討論進程在內存中的靜態(tài)存在方式。 在多道系統(tǒng)中,處理機在多個進程之間來回切換,每 個進程都會在暫停、運行這兩種狀態(tài)之間來回轉換。 當一個進程在處理機切換過來重新進入運行狀態(tài)時, 它必須嚴格精確地接著上次運行的位置繼續(xù)進行,進 程的靜態(tài)描述可以保持切換現(xiàn)場,確保準確銜接,保 證進程調度的實現(xiàn),順利完成程序所規(guī)定任務。 5.2 進程 進程調度及進程管理處理機管理14 進程切換現(xiàn)場稱為進程上下文(context),包含了 一個進程所具有的全部信息,一般包括:進程控制塊 (Process Control Blo
12、ck,PCB)、有關程序段和相應的 數(shù)據(jù)集,具體組成見圖2.1。程序段是某個進程執(zhí)行的 相關指令集合,和靜態(tài)的程序段有明確的對應關系, 相應數(shù)據(jù)集是這個程序段正在操作的那部分數(shù)據(jù), PCB是記錄進程各種狀態(tài)的數(shù)據(jù)體,PCB是操作系統(tǒng) 管理感知、控制進程的數(shù)據(jù)實體,通過它,就可以找 到進程的程序段和數(shù)據(jù)集,系統(tǒng)正是通過PCB來控制 進程的。一般來講,PCB記錄著進程的所有資料,是 全部或部分常駐內存的,PCB記錄著程序段和數(shù)據(jù)集 的地址指針,通過這些指針,就可以得到具體的指令 和數(shù)據(jù)。 5.2 進程 進程調度及進程管理處理機管理15 PCB記錄了進程的全部控制信息,一般較龐 大而復雜,它可以按照
13、功能大概分成四個組成部 分:進程描述信息、進程控制信息、進程相關的 資源信息和CPU現(xiàn)場保護結構(如圖2.1)。 5.2 進程 圖2.1 進程描述數(shù)據(jù)關系示意圖(進程上下文) 進程調度及進程管理處理機管理16 2. Linux的PCB Linux系統(tǒng)的進程控制塊PCB用一個稱為task- struct的結構體來描述。 (1) 進程描述信息 通過進程描述信息,Linux系統(tǒng)可以惟一地確定 某一個進程的基本情況,可以了解該進程所屬的用戶 及用戶組等信息,同時還能確定這個進程與所有其他 進程之間的關系。這些描述信息包括:進程號、用戶 和組標識以及描述進程家族關系的連接信息。 5.2 進程 進程調度及
14、進程管理處理機管理17 進程號(pid,process identifier) Linux系統(tǒng)為每一個進程分配一個標識號,通過這 個標識號識別、控制、調度這個進程,別的進程也通 過這個標識號來識別這個進程并與之通信,用戶也可 以使用操作命令或系統(tǒng)調用通過標識號來控制該進程。 用戶和組標識(user and group identifier) Linux系統(tǒng)中有四類不同的用戶和組標識,主要用 來控制進程對系統(tǒng)文件的訪問權限,實現(xiàn)系統(tǒng)資源的 安全訪問。 Linux使用組將文件和目錄的訪問特權授 予一組用戶,一個進程可以同時屬于多個組,這些組 都被放在進程的task-struct中的group數(shù)組中
15、。 5.2 進程 進程調度及進程管理處理機管理18 連接信息(Links) Linux系統(tǒng)中的進程之間形成樹狀的家族關系, 連接信息記錄某個進程的父進程、兄弟進程(具有相同 父進程的進程)以及子進程的信息,描述一個進程在整 個家族系統(tǒng)中的具體位置。 (2) 進程控制信息 進程控制信息記錄了進程的當前狀態(tài)、調度信息、 記時和時間信息以及進程間通信信息,是系統(tǒng)確定進 程的狀態(tài)、了解進程之間的關系、進行進程調度的主 要依據(jù)。 進程當前狀態(tài) 進程的生命周期中,總是不停地在各種狀態(tài)之間 轉換,有關進程的狀態(tài)及轉換規(guī)則,在下節(jié)討論。 5.2 進程 進程調度及進程管理處理機管理19 調度信息 系統(tǒng)的調度程序
16、利用這部分信息決定哪一個進程 應該運行,包括優(yōu)先級、實時優(yōu)先級、計數(shù)器和調度 策略。 記時信息 包括時間和定時器,給出進程占有和利用CPU的 情況,是調度的依據(jù),也是進行統(tǒng)計、分析以及記費 的依據(jù)。 通信信息 多個進程之間通信的各種信息也記錄在PCB中。 Linux支持典型的UNIX進程間通信機制信號、管 道,也支持System通信機制共享內存、信號量 和消息隊列。 5.2 進程 進程調度及進程管理處理機管理20 (3) 進程資源信息 Linux的PCB中包含大量的系統(tǒng)資源信息,這些 信息記錄了與該進程有關的存儲器的各種地址和資料、 文件系統(tǒng)以及打開文件的信息等等。通過這些資料, 進程就可以得
17、到運行需要的相關程序段以及必要的數(shù) 據(jù)。 (4) CPU現(xiàn)場信息 進程的靜態(tài)描述必須保證一個進程在獲得處理機 并重新進入運行狀態(tài)時,能夠精確地接著上次運行的 位置繼續(xù)進行。相關程序段和數(shù)據(jù)集以及處理機現(xiàn)場 (或處理機狀態(tài))都必須保存。處理機(CPU)現(xiàn)場信息 一般包括處理機的內部寄存器和堆棧等基本數(shù)據(jù)。 5.2 進程 進程調度及進程管理處理機管理21 task-struct是Linux系統(tǒng)的進程控制塊(PCB), 通過對PCB的操作,系統(tǒng)為進程分配資源并進行調 度,最終完成進程的創(chuàng)建和撤銷。系統(tǒng)利用PCB中 的描述信息來標識一個進程,根據(jù)PCB中的調度信 息決定該進程是否應該運行。如果這個進程
18、要進入 運行,首先根據(jù)其中的CPU現(xiàn)場信息來恢復運行現(xiàn) 場,然后根據(jù)資源信息獲取對應的程序段和數(shù)據(jù)集, 接著上次的位置開始執(zhí)行,同時通過PCB中的通信 信息和其他進程協(xié)同工作。 5.2 進程 進程調度及進程管理處理機管理22 5.2.3 進程狀態(tài)及轉換 系統(tǒng)通過PCB對進程進行控制,進程不斷地在不 同的狀態(tài)之間轉換。 1. 進程的基本狀態(tài) 在分時系統(tǒng)中,一個進程擁有了所需要的全部資 源,就可以開始執(zhí)行,當分配的時間片結束,讓出 CPU資源,這種只要能夠占有CPU就能進入執(zhí)行的狀 態(tài)稱為就緒狀態(tài)。有時,多個進程之間互相制約,某 個進程必須等到某個事件發(fā)生才能夠競爭CPU資源, 這是等待狀態(tài),當?shù)?/p>
19、待的事件發(fā)生之后,這個進程被 喚醒,由等待狀態(tài)進入就緒狀態(tài),直到獲得CPU才開 始執(zhí)行。等待狀態(tài)、就緒狀態(tài)和執(zhí)行狀態(tài)是一個進程 所具有的最基本的三種狀態(tài),見圖2.2。 5.2 進程 進程調度及進程管理處理機管理23 圖2.2 進程基本狀態(tài)及轉換示意圖 5.2 進程 進程調度及進程管理處理機管理24 2. Linux系統(tǒng)進程狀態(tài) Linux系統(tǒng)的2.2.16版本進程共有六種狀態(tài),包 括運行狀態(tài)、可中斷等待狀態(tài)、不可中斷等待狀態(tài)、 僵死狀態(tài)、暫停狀態(tài)和交換狀態(tài),而在2.4.0版本中 取消了交換狀態(tài),加入獨占狀態(tài)。 進程狀態(tài)值說明 TASK-RUNNING0運行態(tài) TASK-INTERRUPTIBL
20、E1等待態(tài),可中斷 TASK-UNINTERRUPTIBLE2等待態(tài),不可中斷 TASK-ZOMBIE4僵死態(tài) TASK-STOPPED8暫停態(tài) TASK-S16交換態(tài)(2.4.X版本已取消) TASK-EXCLUSIVE32獨占態(tài) 5.2 進程 表2.1 Linux系統(tǒng)(2.2.X2.4.X版本)進程狀態(tài)表 進程調度及進程管理處理機管理25 (1) 運行狀態(tài)(running) 系統(tǒng)中的運行狀態(tài)實際包含上述基本狀態(tài)中的執(zhí) 行和就緒兩種狀態(tài),進程是正在運行還是處于就緒狀 態(tài)準備運行,要靠當前是否占有CPU資源來區(qū)分。 (2) 等待狀態(tài) 系統(tǒng)把基本的等待狀態(tài)進一步細化為可中斷的等 待態(tài)和不可中斷的
21、等待態(tài)兩種。處于這種狀態(tài)的進程 都在等待某個事件或某個資源,可中斷等待狀態(tài)的進 程可以被信號喚醒而進入就緒狀態(tài)等待調度,而不可 中斷等待狀態(tài)的進程是因為硬件資源無法滿足,不能 被信號喚醒,必須等到所等待的資源得到之后由特定 的方式喚醒。 5.2 進程 進程調度及進程管理處理機管理26 5.2 進程 (3) 僵死狀態(tài)(zombie) 由于某些原因進程被終止,這個進程所擁有的內存、 文件等資源全部釋放之后,還保存著PCB信息,這種占 有PCB但已經無法運行的進程就處于僵死狀態(tài)。 (4) 暫停狀態(tài) 處于暫停狀態(tài)的進程,一般都是由運行狀態(tài)轉換而 來,等待某種特殊處理。比如處于調試跟蹤的程序,每 執(zhí)行到
22、一個斷點,就轉入暫停狀態(tài),等待新的輸入信號。 (5) 交換狀態(tài) 處于交換狀態(tài)的進程正在執(zhí)行內存、外存的交換工 作。這個狀態(tài)在2.2.X版本的內核中基本已經不使用, 在2.4.X版本中沒有這種狀態(tài)。 進程調度及進程管理處理機管理27 5.2 進程 (6) 獨占狀態(tài) 它應該是等待狀態(tài)的一種,處于獨占狀態(tài)的進程 位于等待隊列中,當?shù)却氖录l(fā)生時,只有處于這 種狀態(tài)的進程被喚醒,其他處于可中斷和不可中斷等 待狀態(tài)的進程則繼續(xù)等待。Linux 2.4引入獨占狀態(tài)后, 如果事件發(fā)生,只喚醒處于獨占狀態(tài)的那一個進程, 這就可以大大提高Apache這類Web應用的效率,使 Linux更適合網絡服務器的角色。
23、 Linux系統(tǒng)進程的狀態(tài)轉換情況。采取一定的簡化 措施:按照進程是否占有處理機為依據(jù),把進程的運 行狀態(tài)分為執(zhí)行和就緒兩種狀態(tài);等待狀態(tài)統(tǒng)一考慮, 不再區(qū)分是否可中斷,獨占狀態(tài)也作為一種等待狀態(tài) 處理;不涉及交換狀態(tài)。見圖2.3。 進程調度及進程管理處理機管理28 圖2.3同時也記錄了一個進程在整個生命周期的變化過 程。從圖的左下方開始看,系統(tǒng)在某種特定的情況下, 響應某個要求,首先分配各種資源,創(chuàng)建一個新的進 程,進程進入就緒隊列。 圖2.3 Linux系統(tǒng)進程狀態(tài)及轉換示意圖 5.2 進程 進程調度及進程管理處理機管理29 所有的進程必須在就緒之后,才有資格競爭CPU,進 入運行狀態(tài)。這
24、樣,進程的整個生命周期中,大致的轉換 路徑總是沿著三個閉合回路進行。 就緒狀態(tài)和執(zhí)行狀態(tài)形成第一個回路。進程進入就緒 態(tài),放入可執(zhí)行隊列等待,一旦被調度函數(shù)選中,就切換 現(xiàn)場,進入運行狀態(tài),等自己的時間片耗盡之后,馬上保 護現(xiàn)場,讓出CPU,轉入就緒狀態(tài),等待新的調度。 執(zhí)行狀態(tài)、等待狀態(tài)和就緒狀態(tài)形成第二個回路。處 于執(zhí)行狀態(tài)的進程,有時需要等待某個事件或某種資源的 發(fā)生,這時,繼續(xù)占有CPU也無法開展工作,就轉入等待 狀態(tài),CPU由下一個被調度的進程占有。當?shù)却M程所等 待的事件發(fā)生后,等待進程被喚醒,進入就緒狀態(tài)。 5.2 進程 進程調度及進程管理處理機管理30 執(zhí)行狀態(tài)、暫停狀態(tài)和就緒
25、狀態(tài)構成第三個回路。 當接收到某種特殊的信號,比如SIGSTOP(Linux的停 止信號)時,處于執(zhí)行狀態(tài)的進程放棄CPU,保護現(xiàn)場 之后,進入暫停狀態(tài),直到獲得另外一個特殊的信號才 進入就緒狀態(tài)。 一個處于執(zhí)行狀態(tài)的進程調用退出函數(shù)exit之后, 進程就會進入僵死狀態(tài),這種狀態(tài)下,進程釋放了PCB 之外的所有系統(tǒng)資源。也就是說,它在系統(tǒng)中只留下這 個進程的一個PCB。 僵死進程的父進程通過PCB了解到該進程所處的狀 態(tài)后,采取相應的處理措施,回收PCB,這個進程就完 成了它的使命,從僵死走向徹底消亡,上圖右上方的虛 箭頭表示了這種結局。 5.2 進程 進程調度及進程管理處理機管理31 5.2
26、.4 進程控制 進程控制,是指對系統(tǒng)中的全部進程實施有效的 管理,使得進程能夠及時創(chuàng)建、撤銷,正確地完成進 程各狀態(tài)之間的轉換,使得多個進程高效率并發(fā)執(zhí)行, 達到系統(tǒng)資源高度共享的目的。 進程狀態(tài)之間的轉換轉換通常由三種不同的方式 控制:進程控制原語、系統(tǒng)核心函數(shù)(比如調度)、 和外部事件發(fā)生(比如中斷)。 這里說的所謂原語, 指系統(tǒng)狀態(tài)下執(zhí)行的一些具 有特定功能的程序段, 這些程序段具有“原子性” , 是執(zhí)行過程中不可分割的最小單位。用于進程控制的 原語有:創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語 等。 5.2 進程 進程調度及進程管理處理機管理32 (1) 創(chuàng)建原語 進程創(chuàng)建原語用于建立一個
27、新的進程,這個新進程 可以由內核調用進程創(chuàng)建原語建立,也可以由父進程執(zhí) 行進程創(chuàng)建原語生成一個子進程,子進程還可以生成子 進程,以形成樹形進程家族結構。進程創(chuàng)建原語的主要 任務是形成進程的PCB, 因此,調用者必須提供有關 的參數(shù),例如進程名、進程優(yōu)先級、進程正文段起始地 址、資源清單等。 (2) 撤銷原語 當一個進程完成了指定的任務或由于某種錯誤導致 異常終止時,要撤銷這個進程以便釋放進程占用的資源。 進程撤銷原語根據(jù)調用者提供的信息,找到指定的進程, 回收其占用的資源和PCB。 5.2 進程 進程調度及進程管理處理機管理33 (3) 阻塞原語 當正在運行的進程需要等待某一事件,由自己調用
28、阻塞原語把自己阻塞起來成為等待狀態(tài)。阻塞原語主要完 成保護CPU現(xiàn)場的工作, 即首先中斷處理機保存該進程 的CPU現(xiàn)場,然后把被阻塞的進程置為等待狀態(tài),插入到 相應的等待隊列,最后轉入進程調度程序,從就緒隊列中 選擇一個進程投入運行。 (4) 喚醒原語 當處于等待狀態(tài)的進程所等待的事件出現(xiàn)時,由發(fā)現(xiàn) 者進程調用喚醒原語喚醒被阻塞的進程。 進程控制原語由系統(tǒng)執(zhí)行。同時,操作系統(tǒng)還提供了一些 用于進程控制的系統(tǒng)調用和操作命令,用戶可以通過程序 或者命令的方式控制進程。 5.2 進程 進程調度及進程管理處理機管理34 5.2.5 進程約束 現(xiàn)代操作系統(tǒng)中,程序并發(fā)執(zhí)行,多個進程各自獨 立地運行,同時
29、競爭和共享系統(tǒng)中有限的資源,這種競 爭與合作構成了系統(tǒng)進程之間的約束關系。每個進程獨 立地申請和釋放系統(tǒng)資源,把申請某一類資源的進程稱 為該類資源的消費者,把釋放同類資源的進程稱為該類 資源的生產者,就得到描述進程約束關系的一般模型: 生產者消費者問題,也稱為有界緩沖區(qū)問題。 比較簡單的情況,兩進程共享一個長度為N(N0) 的有界緩沖區(qū),一個進程Pp往緩沖區(qū)中送數(shù)據(jù),是生產 者,另一個進程Pc從緩沖區(qū)中讀取數(shù)據(jù),是消費者,如 圖2.4,下面來討論它們間的約束關系。 5.2 進程 進程調度及進程管理處理機管理35 圖2.4 簡單的生產者消費者問題 5.2 進程 進程調度及進程管理處理機管理36
30、首先,生產者進程Pp和消費者進程Pc共享同一個 有界緩沖區(qū),對這個緩沖區(qū)的操作必須是獨占的。這 種不允許多個并發(fā)進程交叉執(zhí)行的資源稱為臨界資源, 臨界的程序段資源稱為臨界部分或臨界區(qū)。臨界資源 是由于不同并發(fā)進程共享某個資源造成的,不可能通 過增加資源的方法解決。這種因為共享某一公有資源 而引起的在臨界資源內不允許并發(fā)進程交叉執(zhí)行的現(xiàn) 象,稱為進程間的間接約束。 由于對臨界資源的共享,而產生了臨界區(qū)問題。 對于有著臨界區(qū)問題的并行進程之間必須互斥,以保 證不會同時進入臨界區(qū)。 5.2 進程 進程調度及進程管理處理機管理37 其次,對生產者進程Pp和消費者進程Pc訪問共享有界 緩沖區(qū)的順序有嚴格
31、的要求。具體來講,這種限制為: (1) 消費者進程Pc要接收數(shù)據(jù)時,有界緩沖區(qū)必須至 少有一個單元是滿的; (2) 生產者進程Pp要發(fā)送數(shù)據(jù)時,有界緩沖區(qū)必須至 少有一個單元是空的。 這樣存在一組相互獨立的并發(fā)進程,各自的執(zhí)行結果 互為對方的執(zhí)行條件,從而限制各進程執(zhí)行速度的過 程,稱為進程間的直接制約。存在直接制約關系,相 互發(fā)送消息進行互相合作、互相等待,各自按照一定 的速度向前推進的過程稱為同步。 5.2 進程 進程調度及進程管理處理機管理38 消費者進程和生產者進程之間因為共享緩沖區(qū), 相互競爭而間接制約,具有互斥關系,同時相互以 對方的運行結果為條件而直接制約,也具有同步的 關系,是
32、一對同時具有競爭和合作的進程。 在并發(fā)系統(tǒng)中,進程之間相互制約,具有同步 和互斥是相當普遍的現(xiàn)象。這種進程之間的相互關 系,依靠單個進程自身的力量是無法解決的,必須 以進程間的相互通信為基礎,互相發(fā)送信息,才能 協(xié)調解決。具體的同步、互斥實現(xiàn)方案有很多種, 分別基于不同的通信方式。 5.2 進程 進程調度及進程管理處理機管理39 5.2.6 進程通信 進程間通信是協(xié)調解決多個進程之間的約束關系,實現(xiàn) 進程共同進展的關鍵技術,是多道系統(tǒng)中控制進程并發(fā) 執(zhí)行必不可少的機制。進程間的通信有兩種方式:一是 互相發(fā)送少量的控制信息,一般只傳遞一個或者幾個字 節(jié)的數(shù)據(jù),進程利用這些簡單的信息,實現(xiàn)互斥和同
33、步, 控制運行速度,這種簡單的通信方式被稱為進程間的低 級通信;另外一種方式稱為進程間的高級通信,基本不 涉及進程執(zhí)行速度控制,用來在進程之間傳遞大量的信 息,由于這種通信方式主要用于交換信息, 因此,在開 發(fā)本地進程間通信的同時,也為遠程進程間的通信,和 計算機網絡的開發(fā)及控制奠定了基礎。 5.2 進程 進程調度及進程管理處理機管理40 1. 進程通信類型 按照通信進程雙方的地位,可以把進程通信分為:主 從式、會話式、消息或郵箱機制以及共享存儲區(qū)四種類型。 (1) 主從式 主進程一方在整個通信過程中處于絕對的控制地位, 它可以直接控制從進程的動作,自由地使用從進程的資源 和數(shù)據(jù)。 (2) 會
34、話式 一方進程提供服務,另外一方進程在得到服務方的許 可之后,可以使用其提供的服務。在通信過程中,雙方的 連接關系固定,客戶進程提出服務請求,服務進程根據(jù)情 況控制服務的狀態(tài)和內容。 5.2 進程 進程調度及進程管理處理機管理41 (3) 消息或郵箱機制 通信雙方具有平等的地位,和現(xiàn)實生活中的郵件類 似。通信雙方通過緩沖區(qū)或郵箱存放被傳送的數(shù)據(jù), 不 需要建立雙方直接的連接關系。申請通信的發(fā)起方進程 不管接收方進程的狀態(tài),把信息直接送入雙方共享的緩 沖區(qū)(或者郵箱)中,接收進程在合適的時機去讀取緩沖 區(qū)(或者郵箱)以接收信息。 (4) 共享存儲區(qū) 共享存儲區(qū)通信方式中,通信雙方進程共享內存中
35、的一段存儲空間,共同操作這個存儲區(qū),達到數(shù)據(jù)共享 的目的。通信過程中,數(shù)據(jù)一直存放在共享存儲區(qū)中, 不需要移動,因此特別適用于大量數(shù)據(jù)的傳遞。 5.2 進程 進程調度及進程管理處理機管理42 2. Linux系統(tǒng)的進程通信 Linux系統(tǒng)提供了多種通信機制,利用這些機制, 可以方便地進行進程之間的相互協(xié)調,實現(xiàn)進程的互 斥和同步。 (1) 信號(signal) 信號屬于Linux系統(tǒng)的低級通信,主要用于在進程 之間傳遞控制信號。 信號可以發(fā)給一個或多個進程,可以是由某個進 程發(fā)出,也可以由鍵盤中斷產生,還可以是由shell程 序向其子進程發(fā)送任務控制命令時產生。進程在某些 系統(tǒng)錯誤環(huán)境下也會有
36、信號產生。 5.2 進程 進程調度及進程管理處理機管理43 除了兩個信號外,進程可以忽略這些信號中的絕大 部分,這兩個信號是引起進程終止執(zhí)行的SIGSTOP信 號和引起進程退出的SIGKILL信號。至于其他信號,進 程可以選擇處理它們的具體方式。信號沒有固有的相對 優(yōu)先級。 并不是系統(tǒng)中每個進程都可以向所有其他進程發(fā)送 信號,只有核心和超級用戶具有此權限。普通進程只能 向具有相同uid和gid的進程或者在同一進程組中的進程 發(fā)送信號。信號是通過設置task-struct結構中signal域里 的某一位來產生的。如果進程沒有阻塞信號并且處于可 中斷的等待狀態(tài),則可以將其狀態(tài)改成running,若
37、確 認進程還處在運行隊列中,就可以通過信號喚醒它。 5.2 進程 進程調度及進程管理處理機管理44 (2) 管道(pipe) 管道是UNIX操作系統(tǒng)傳統(tǒng)的進程通信技術。 Linux管道通信包括無名管道和有名管道兩種,通過文 件系統(tǒng)來實現(xiàn)。管道也是一種特殊的文件類型,實際 上是通過文件系統(tǒng)的高速緩沖實現(xiàn)的。 兩個進程通過管道進行通信時,兩個進程分別進 行讀和寫操作,都指向緩沖區(qū)中同樣的物理單元,一 個進程寫入數(shù)據(jù),另一個進程從緩沖區(qū)中讀取數(shù)據(jù), 從而實現(xiàn)信息傳遞。管道方式只能按照先進先出方式 單向傳遞信息。管道方式可以用來進行大規(guī)模的數(shù)據(jù) 傳遞。 5.2 進程 進程調度及進程管理處理機管理45
38、(3) SYSTEM 進程間通信 信號量、消息隊列和共享內存是UNIX/Linux系統(tǒng) 常用的通信方式。 消息隊列用來在進程之間傳遞分類的格式化數(shù)據(jù), 共享內存方式可以使不同進程共同訪問一塊虛擬存儲 空間,通過對該存儲區(qū)的共同操作來實現(xiàn)數(shù)據(jù)傳遞, 信號量主要用于進程之間的同步控制,通常和共享內 存共同使用。 這三種方式在系統(tǒng)中是作為一個整體實現(xiàn)的。共 享內存是這三種方式中通信效率最高的,它在進程的 虛擬空間中進行,而且不需要數(shù)據(jù)的移動也可以實現(xiàn) 大規(guī)模的數(shù)據(jù)傳遞。 5.2 進程 進程調度及進程管理處理機管理46 (4) 套接字(socket) 套接字是用來通過網絡實現(xiàn)運行于不同計算機上的進 程
39、之間通信的機制。它可以實現(xiàn)數(shù)據(jù)的雙向規(guī)模傳遞, 是整個網絡通信的基礎。具體的原理和實現(xiàn)與網絡協(xié) 議等有關,不做具體的介紹。 5.2 進程 進程調度及進程管理處理機管理47 5.2.7 死鎖 死鎖,是指所有并發(fā)進程都擁有部分資源,同時都在等 待其他進程擁有的資源,而且在得到對方資源之前不會釋放 自己占有的資源,所有進程都進入永久等待狀態(tài)而無法運行 的情況。死鎖是并發(fā)進程約束關系處理不當造成的最嚴重的 后果,是對系統(tǒng)資源極大的浪費,必須設法避免。 死鎖出現(xiàn)的根本原因是系統(tǒng)資源的有限性。并發(fā)進程競 爭資源,調度不當,就可能出現(xiàn)死鎖的情況,因此必須采取 適當?shù)拇胧﹣硐梨i。 產生死鎖的必要條件有四個
40、:并發(fā)進程之間是互斥關系, 每個進程必須獨占某個系統(tǒng)資源;進程占有的資源在未結束 使用之前,不能被強行剝奪,只能由該進程自己釋放;進程 需要的資源采用部分分配的方式,在等待新資源的 5.2 進程 進程調度及進程管理處理機管理48 同時,繼續(xù)占有已分配的資源;各占有資源的進程形成環(huán)路, 每一個進程已獲得的資源同時被下一個進程請求。 解決死鎖的方案就是破壞死鎖產生的必要條件。方法分 為預防、回避、檢測恢復三種。預防指采取某種策略,控制 并發(fā)進程對資源的請求,保證死鎖的四個必要條件在系統(tǒng)運 行的任何時刻都無法滿足。避免指系統(tǒng)采取某種算法,對資 源使用情況進行預測,使資源分配盡可能合理,避免死鎖的 發(fā)
41、生。這兩種方法需要大量的系統(tǒng)開銷,而且系統(tǒng)的資源也 無法得到充分的利用。因此,一般系統(tǒng)都采取檢測恢復的方 法,這種方法是在死鎖發(fā)生之后,根據(jù)系統(tǒng)情況,檢測死鎖 發(fā)生的位置和原因,使用外力,重新分配資源,破壞死鎖發(fā) 生的條件,系統(tǒng)就可以從死鎖狀態(tài)恢復正常運行,這樣的方 法只要使用少量的系統(tǒng)資源,尤其是CPU時間就可以排除死 鎖。 5.2 進程 進程調度及進程管理處理機管理49 多道處理系統(tǒng)中,進程是系統(tǒng)調度和資源分配 的基本單位,計算機的CPU不停地在不同進程 之間切換,進程切換現(xiàn)場稱為進程上下文,每 一次切換過程,系統(tǒng)都要對換出進程的上下文 做詳細記錄,然后恢復換入進程的上下文。因 此,系統(tǒng)的
42、進程管理過程要耗費相當多的系統(tǒng) 資源和CPU時間,尤其是對于需要頻繁進程切 換的任務。 針對進程切換的時間和資源耗費問題,為 了減少系統(tǒng)進程切換的時間,提高整個系統(tǒng)的 效率,引入了線程的概念。 5.3 線程 進程調度及進程管理處理機管理50 5.3.1 線程的概念 線程是在一個進程內的基本調度單位。線程可以 看作是一個執(zhí)行流,擁有記錄自己狀態(tài)和運行現(xiàn)場的 少量數(shù)據(jù)(棧段和上下文),但沒有單獨的代碼段和數(shù) 據(jù)段,而是與其他線程共享。 多個線程共享一個進程內部的各種資源,分別按 照不同的路徑執(zhí)行,同時線程也是一個基本調度單位, 可以在一個進程內部進行線程切換,現(xiàn)場保護工作量 小。一方面通過共享進程
43、的基本資源而減輕系統(tǒng)開銷, 另一方面提高了現(xiàn)場切換的效率,因此,線程也被稱 為輕權進程或輕量級進程。許多流行的多任務操作系 統(tǒng)基本都支持線程。 5.3 線程 進程調度及進程管理處理機管理51 按照系統(tǒng)的管理策略,線程可以分為用戶級線程和系 統(tǒng)級線程(內核級線程)兩種基本類型。用戶級線程指不 需要內核支持,在用戶程序中實現(xiàn)的線程都需要用戶程序 自己完成。系統(tǒng)級線程由內核完成線程的調度并提供相應 的系統(tǒng)調用,用戶程序可以通過這些接口函數(shù)對線程進行 一定的控制和管理。 用戶級線程不需要額外的內核開銷,一般只要提供一 個線程庫即可,剩下的工作就主要由用戶自己負責了。但 是由于用戶級線程與系統(tǒng)內核無關,
44、當一個進程因I/O而 被調度程序切換為等待狀態(tài)時,屬于該進程的某個執(zhí)行線 程可能仍然處于執(zhí)行狀態(tài)。 系統(tǒng)級線程的調度由內核完成,不需要更多用戶干預, 但要占用更多的系統(tǒng)開銷,效率相對低一些。 5.3 線程 進程調度及進程管理處理機管理52 線程也是系統(tǒng)中動態(tài)變化的實體,它描述程序的 運行活動,在內存中需要記錄。線程的記錄信息要保 證系統(tǒng)能夠準確地進行線程切換。 在線程的生命周期里,線程作為一個基本的執(zhí)行 單位而存在,不斷地在執(zhí)行和停止的狀態(tài)之間轉換。 線程的基本狀態(tài)是執(zhí)行、就緒和等待。 線程的同步是一個相當關鍵的問題。線程之間的 通信相對容易,而線程間的同步問題需要更仔細地對 待,特別是用戶級
45、線程,這個問題相當突出。 5.3 線程 進程調度及進程管理處理機管理53 5.3.2線程和進程 進程是操作系統(tǒng)資源分配和系統(tǒng)調度的基本單位, 每一個進程都有自己獨立的地址空間和各種資源,線 程也是一種系統(tǒng)調度的基本單位,多個線程可以共享 一個進程的資源,在存儲方面,線程占用的資源更少。 進程的調度主要由操作系統(tǒng)完成,而線程根據(jù)其類型 的不同,可以由系統(tǒng)調度(內核級線程),也可以由用 戶進行調度(用戶級線程)。 5.3 線程 進程調度及進程管理處理機管理54 進程調度的過程中要進行切換,切換現(xiàn)場的保護與恢 復要求對進程上下文做完整的記錄,要消耗一定的存儲資 源和處理機時間;線程共享進程的資源,可以在進程內部 切換,不涉及資源保存和內存地址變換等操作,可以節(jié)約 大量的空間和時間資源。因此,對于切換頻繁的工作任務, 多線程方式比多進程方式可以提供更高的響應速度。多個 線程共享同一進程的資源,線程相互間通訊容易。而進程 間通訊一般必須要通過系統(tǒng)提供的進程間通訊機制。 進程和線程都是用來描述程序的運行活動,是存在于系統(tǒng) 存儲區(qū)中的動態(tài)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度綜合金融服務合同
- 2024年度員工福利費用共享協(xié)議
- 關于2022學生頂崗實習心得范文大全
- 傳統(tǒng)節(jié)日演講稿范文
- 2024年商場美食廣場招商合同
- 2024年度坂田二期公交車消防設備升級及安裝合同
- 2024年工程項目合作框架協(xié)議
- 2024年度玻璃購銷協(xié)議
- 語法副詞課件教學課件
- 2024年度網絡文化傳播合同
- 小學道德與法治六年級上冊第5課《國家機構有哪些》測試題
- PLC控制的自動花樣音樂噴泉系統(tǒng)設計畢業(yè)設計論文
- 建筑公司組織架構及崗位職責
- COPD診療新進展
- 精品資料(2021-2022年收藏的)病案管理制度全套
- 低壓工作票(共3頁)
- 2閥門結構和工作原理(上)
- 基礎圖案設計(課堂PPT)
- 食堂操作工藝流程圖
- 幼兒園參觀學?;顒臃桨?篇
- 關于旅游景區(qū)游客滿意度研究的文獻綜述
評論
0/150
提交評論