進(jìn)程調(diào)度及進(jìn)程管理處理機管理課件_第1頁
進(jìn)程調(diào)度及進(jìn)程管理處理機管理課件_第2頁
進(jìn)程調(diào)度及進(jìn)程管理處理機管理課件_第3頁
進(jìn)程調(diào)度及進(jìn)程管理處理機管理課件_第4頁
進(jìn)程調(diào)度及進(jìn)程管理處理機管理課件_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、進(jìn)程調(diào)度及進(jìn)程管理處理機管理1 第05講 進(jìn)程調(diào)度及進(jìn)程管理 5.1 作業(yè) 5.2 進(jìn)程 5.3 線程 5.4 小結(jié) 5.5 習(xí)題 進(jìn)程調(diào)度及進(jìn)程管理處理機管理2 提高處理機(CPU)的使用率,使它盡可能處于工 作狀態(tài),是操作系統(tǒng)管理功能的主要目標(biāo)之一。 在Linux系統(tǒng)中,提高處理機使用率的技術(shù)措施主 要是多道和分時,處理機在進(jìn)程之間切換,按照一定 的規(guī)則輪流執(zhí)行每個進(jìn)程。對于單個處理機的系統(tǒng), 這些進(jìn)程宏觀上看似并行執(zhí)行,而微觀上來看仍然是 串行執(zhí)行的,這種執(zhí)行方式被稱為并發(fā)執(zhí)行。操作系 統(tǒng)通過并發(fā)控制機制,對處理機進(jìn)行分配、調(diào)度,在 保證每個進(jìn)程都得到公平合理執(zhí)行的同時,使系統(tǒng)中 的各種

2、資源得到充分的使用。 本講主要圍繞處理機管理展開,著重介紹進(jìn)程的概 念,同時也包括相關(guān)的兩個基本概念:作業(yè)和線程。 進(jìn)程調(diào)度及進(jìn)程管理處理機管理3 作業(yè)是用戶向計算機系統(tǒng)提交一項工作的基本單 位,是用戶在一次事務(wù)處理或計算過程中要求計算機 所做工作的總和。 作業(yè)和程序是兩個相互聯(lián)系而又不同的概念。如 果一次業(yè)務(wù)處理可以由某一個程序完成,就是說這個 業(yè)務(wù)處理只要提交這一個程序就夠了,這種情況下, 這個程序就是一個作業(yè)。通常,完成一次業(yè)務(wù)需要由 多個程序協(xié)同完成,這時,多個程序、這些程序需要 的數(shù)據(jù)以及必要的作業(yè)說明一起構(gòu)成一個作業(yè)。系統(tǒng) 通過作業(yè)說明書(JCB)或者作業(yè)控制語句(JCL)控制程

3、序和相應(yīng)的數(shù)據(jù)執(zhí)行,完成整個業(yè)務(wù)處理。 5.1 作業(yè) 進(jìn)程調(diào)度及進(jìn)程管理處理機管理4 按照對作業(yè)的處理方式,可以分為聯(lián)機、批處理 等作業(yè)。Linux系統(tǒng)中的shell提供了操作系統(tǒng)和用戶之 間的聯(lián)機命令接口。 Linux的shell同時提供了程序級接口。用戶通過提 交一個命令或一個命令序列以批處理方式執(zhí)行特定的 操作。 在Linux分時批處理系統(tǒng)中,也可以根據(jù)對作業(yè)執(zhí) 行時的響應(yīng)特征分為前臺作業(yè)和后臺作業(yè)。 在多用戶系統(tǒng)中,多個用戶、不同類型的作業(yè)可 能同時請求執(zhí)行,控制和管理這些作業(yè),協(xié)調(diào)它們之 間的關(guān)系,就是作業(yè)調(diào)度,作業(yè)調(diào)度是處理機調(diào)度的 一部分。 5.1 作業(yè) 進(jìn)程調(diào)度及進(jìn)程管理處理機

4、管理5 計算機內(nèi)存中同時存放多個相互獨立的已經(jīng)開 始運行的程序?qū)嶓w,大家按照某種規(guī)則輪流使用處 理器,這是現(xiàn)代多道操作系統(tǒng)實現(xiàn)資源共享,提高 系統(tǒng)資源利用率的主要方式。描述這些程序?qū)嶓w的 概念就是進(jìn)程。 在多道情況下,每個進(jìn)程獨立地?fù)碛懈鞣N必要 的資源,占有處理機,獨立地運行。在多道系統(tǒng)中, 同時存在多個進(jìn)程,所以當(dāng)某個進(jìn)程進(jìn)入等待狀態(tài) 時,操作系統(tǒng)將把處理機控制權(quán)拿過來并交給其他 可以運行的進(jìn)程。進(jìn)程之間存在著相互制約、相互 依賴的約束關(guān)系。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理6 一種最糟糕的情況是所有進(jìn)程都擁有部分資源, 同時在等待其他進(jìn)程擁有的資源,這樣,大家都無法 運行,進(jìn)入一

5、種永久等待的狀態(tài),這種情況稱為死鎖, 死鎖是對系統(tǒng)資源極大的浪費,必須設(shè)法避免。 本節(jié)著重討論現(xiàn)代多道操作系統(tǒng)中的核心概念 進(jìn)程,這是理解操作系統(tǒng)工作原理的基礎(chǔ)和關(guān)鍵。 首先介紹單個進(jìn)程的狀態(tài)、狀態(tài)轉(zhuǎn)換的條件和控制原 語、進(jìn)程在系統(tǒng)中的靜態(tài)描述等,接著介紹多個進(jìn)程 之間的約束關(guān)系,由此引出進(jìn)程間通信的概念,通信 是協(xié)調(diào)、解決進(jìn)程間約束關(guān)系的惟一手段,這種約束 關(guān)系處理不當(dāng)造成的最嚴(yán)重的后果就是死鎖。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理7 5.2.1 進(jìn)程的概念 進(jìn)程的概念最早出現(xiàn)在60年代中期,用于多道系 統(tǒng),在Linux系統(tǒng)中,進(jìn)程也稱為任務(wù)(task)。簡單講, 進(jìn)程就是正在運行的

6、程序,更為嚴(yán)謹(jǐn)?shù)谋磉_(dá)是,進(jìn)程 是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的 一次運行活動。 進(jìn)程的概念對于理解操作系統(tǒng)有決定性的意義, 而真正理解進(jìn)程,必須了解它的基本性質(zhì)。 進(jìn)程是操作系統(tǒng)分配資源和進(jìn)行調(diào)度的獨立單位, 具有獨立性、動態(tài)性。多道系統(tǒng)中同時存在多個進(jìn)程, 這些進(jìn)程擁有各自的資源,各自獨立地執(zhí)行,對于單 處理機系統(tǒng),進(jìn)程宏觀上同時運行而微觀上是依次執(zhí) 行,這種情況稱為并發(fā)執(zhí)行。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理8 1. 進(jìn)程和程序 進(jìn)程和程序是一對相互聯(lián)系的概念。程序是指令 的有序集合,是一個靜態(tài)的概念,描述完成某個功能 的一個具體操作過程,而進(jìn)程是程序針對某一組數(shù)據(jù)

7、 的一次執(zhí)行過程,更強調(diào)動態(tài)特征。一個完整的進(jìn)程, 包括程序、執(zhí)行程序所需要的數(shù)據(jù),同時還必須包括 記錄進(jìn)程狀態(tài)的數(shù)據(jù)資料。 在多道分時操作系統(tǒng)中,按照時間片輪流在各個 進(jìn)程間切換。對于單處理器系統(tǒng),每一個時刻只能有 一個進(jìn)程在執(zhí)行,當(dāng)分配給該進(jìn)程的時間片用完之后, 不管該進(jìn)程運行到什么程度,都必須立即停止,然后 讓出處理器資源,下一個進(jìn)程進(jìn)入執(zhí)行狀態(tài)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理9 讓出處理器的進(jìn)程必須記錄好正在運行的狀態(tài), 包括寄存器、堆棧等各種信息,這些信息保證當(dāng)處理 器下次切換到這個進(jìn)程的時候,進(jìn)程能夠正確地從上 次執(zhí)行到的位置繼續(xù)往下執(zhí)行。 一個程序在處理相同或不同的

8、操作數(shù)據(jù)時可以同 時對應(yīng)于多個進(jìn)程。一個進(jìn)程也可以包含多個程序, 某個程序在運行過程中,可能同時會調(diào)用到多個其他 程序,這些具有調(diào)用關(guān)系的多個程序共同構(gòu)成一次完 整的運行活動,即一個完整的進(jìn)程。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理10 舉一個直觀的例子。我們在Linux系統(tǒng)下使用編 輯器vi進(jìn)行編輯,同時打開多個窗口,編輯多個不同 名稱的文件,vi編輯器是一個可執(zhí)行程序,不同的文 件就是不同的操作數(shù)據(jù),而對應(yīng)于這些文件同時打開 的每一個編輯窗口就對應(yīng)著一個進(jìn)程,每一個進(jìn)程都 處于不同的狀態(tài)。 如果說程序是提供計算機操作的一組工作流程的 話,進(jìn)程就是具體的工作過程,按照同樣的工作流程,

9、針對不同的原料,可以同時開始多個工作過程,得到 多種不同的成品。這種工作流程和工作過程的關(guān)系就 可以類比為程序和進(jìn)程的關(guān)系。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理11 2. 進(jìn)程和作業(yè) 作業(yè)是用戶向計算機系統(tǒng)提交一項工作的基本單 位,是用戶在一次事務(wù)處理或計算過程中要求計算機 所做工作的總和。進(jìn)程是一個具有一定獨立功能的程 序關(guān)于某個數(shù)據(jù)集合的一次運行活動,是操作系統(tǒng)分 配資源和進(jìn)行調(diào)度的基本單位。 作業(yè)是描述用戶向系統(tǒng)提交工作任務(wù)的實體單位, 而進(jìn)程是系統(tǒng)完成工作任務(wù)時程序執(zhí)行的實體單位。 從這個角度講,他們處于不同的層次,作業(yè)描述用戶 和操作系統(tǒng)之間的任務(wù)委托關(guān)系,而進(jìn)程描述操作系

10、統(tǒng)內(nèi)部任務(wù)的具體執(zhí)行過程。一個用戶的任務(wù),即作 業(yè),由用戶提交給系統(tǒng),必須以進(jìn)程的形式具體完成。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理12 對于批處理系統(tǒng),通常,作業(yè)放在外存中專門 的作業(yè)隊列中等待進(jìn)入內(nèi)存執(zhí)行,要經(jīng)過一次宏觀 調(diào)度,由外存進(jìn)入內(nèi)存,以進(jìn)程的形式運行。而對 于Linux這樣的分時系統(tǒng),沒有宏觀調(diào)度,作業(yè)不經(jīng) 過調(diào)度,直接進(jìn)入內(nèi)存,以進(jìn)程的形式開始運行。 任何一個進(jìn)程,都存在于內(nèi)存中,并且是已經(jīng)開始 運行的動態(tài)實體。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理13 5.2.2 進(jìn)程描述 進(jìn)程是一個動態(tài)的概念,描述程序的一次運行活 動。它存在于系統(tǒng)的內(nèi)存中,是操作系統(tǒng)可感知、

11、可 控制的動態(tài)實體,是系統(tǒng)分配各種資源、進(jìn)行調(diào)度的 基本單位。 1. 進(jìn)程控制塊 現(xiàn)在我們來討論進(jìn)程在內(nèi)存中的靜態(tài)存在方式。 在多道系統(tǒng)中,處理機在多個進(jìn)程之間來回切換,每 個進(jìn)程都會在暫停、運行這兩種狀態(tài)之間來回轉(zhuǎn)換。 當(dāng)一個進(jìn)程在處理機切換過來重新進(jìn)入運行狀態(tài)時, 它必須嚴(yán)格精確地接著上次運行的位置繼續(xù)進(jìn)行,進(jìn) 程的靜態(tài)描述可以保持切換現(xiàn)場,確保準(zhǔn)確銜接,保 證進(jìn)程調(diào)度的實現(xiàn),順利完成程序所規(guī)定任務(wù)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理14 進(jìn)程切換現(xiàn)場稱為進(jìn)程上下文(context),包含了 一個進(jìn)程所具有的全部信息,一般包括:進(jìn)程控制塊 (Process Control Blo

12、ck,PCB)、有關(guān)程序段和相應(yīng)的 數(shù)據(jù)集,具體組成見圖2.1。程序段是某個進(jìn)程執(zhí)行的 相關(guān)指令集合,和靜態(tài)的程序段有明確的對應(yīng)關(guān)系, 相應(yīng)數(shù)據(jù)集是這個程序段正在操作的那部分?jǐn)?shù)據(jù), PCB是記錄進(jìn)程各種狀態(tài)的數(shù)據(jù)體,PCB是操作系統(tǒng) 管理感知、控制進(jìn)程的數(shù)據(jù)實體,通過它,就可以找 到進(jìn)程的程序段和數(shù)據(jù)集,系統(tǒng)正是通過PCB來控制 進(jìn)程的。一般來講,PCB記錄著進(jìn)程的所有資料,是 全部或部分常駐內(nèi)存的,PCB記錄著程序段和數(shù)據(jù)集 的地址指針,通過這些指針,就可以得到具體的指令 和數(shù)據(jù)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理15 PCB記錄了進(jìn)程的全部控制信息,一般較龐 大而復(fù)雜,它可以按照

13、功能大概分成四個組成部 分:進(jìn)程描述信息、進(jìn)程控制信息、進(jìn)程相關(guān)的 資源信息和CPU現(xiàn)場保護結(jié)構(gòu)(如圖2.1)。 5.2 進(jìn)程 圖2.1 進(jìn)程描述數(shù)據(jù)關(guān)系示意圖(進(jìn)程上下文) 進(jìn)程調(diào)度及進(jìn)程管理處理機管理16 2. Linux的PCB Linux系統(tǒng)的進(jìn)程控制塊PCB用一個稱為task- struct的結(jié)構(gòu)體來描述。 (1) 進(jìn)程描述信息 通過進(jìn)程描述信息,Linux系統(tǒng)可以惟一地確定 某一個進(jìn)程的基本情況,可以了解該進(jìn)程所屬的用戶 及用戶組等信息,同時還能確定這個進(jìn)程與所有其他 進(jìn)程之間的關(guān)系。這些描述信息包括:進(jìn)程號、用戶 和組標(biāo)識以及描述進(jìn)程家族關(guān)系的連接信息。 5.2 進(jìn)程 進(jìn)程調(diào)度及

14、進(jìn)程管理處理機管理17 進(jìn)程號(pid,process identifier) Linux系統(tǒng)為每一個進(jìn)程分配一個標(biāo)識號,通過這 個標(biāo)識號識別、控制、調(diào)度這個進(jìn)程,別的進(jìn)程也通 過這個標(biāo)識號來識別這個進(jìn)程并與之通信,用戶也可 以使用操作命令或系統(tǒng)調(diào)用通過標(biāo)識號來控制該進(jìn)程。 用戶和組標(biāo)識(user and group identifier) Linux系統(tǒng)中有四類不同的用戶和組標(biāo)識,主要用 來控制進(jìn)程對系統(tǒng)文件的訪問權(quán)限,實現(xiàn)系統(tǒng)資源的 安全訪問。 Linux使用組將文件和目錄的訪問特權(quán)授 予一組用戶,一個進(jìn)程可以同時屬于多個組,這些組 都被放在進(jìn)程的task-struct中的group數(shù)組中

15、。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理18 連接信息(Links) Linux系統(tǒng)中的進(jìn)程之間形成樹狀的家族關(guān)系, 連接信息記錄某個進(jìn)程的父進(jìn)程、兄弟進(jìn)程(具有相同 父進(jìn)程的進(jìn)程)以及子進(jìn)程的信息,描述一個進(jìn)程在整 個家族系統(tǒng)中的具體位置。 (2) 進(jìn)程控制信息 進(jìn)程控制信息記錄了進(jìn)程的當(dāng)前狀態(tài)、調(diào)度信息、 記時和時間信息以及進(jìn)程間通信信息,是系統(tǒng)確定進(jìn) 程的狀態(tài)、了解進(jìn)程之間的關(guān)系、進(jìn)行進(jìn)程調(diào)度的主 要依據(jù)。 進(jìn)程當(dāng)前狀態(tài) 進(jìn)程的生命周期中,總是不停地在各種狀態(tài)之間 轉(zhuǎn)換,有關(guān)進(jìn)程的狀態(tài)及轉(zhuǎn)換規(guī)則,在下節(jié)討論。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理19 調(diào)度信息 系統(tǒng)的調(diào)度程序

16、利用這部分信息決定哪一個進(jìn)程 應(yīng)該運行,包括優(yōu)先級、實時優(yōu)先級、計數(shù)器和調(diào)度 策略。 記時信息 包括時間和定時器,給出進(jìn)程占有和利用CPU的 情況,是調(diào)度的依據(jù),也是進(jìn)行統(tǒng)計、分析以及記費 的依據(jù)。 通信信息 多個進(jìn)程之間通信的各種信息也記錄在PCB中。 Linux支持典型的UNIX進(jìn)程間通信機制信號、管 道,也支持System通信機制共享內(nèi)存、信號量 和消息隊列。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理20 (3) 進(jìn)程資源信息 Linux的PCB中包含大量的系統(tǒng)資源信息,這些 信息記錄了與該進(jìn)程有關(guān)的存儲器的各種地址和資料、 文件系統(tǒng)以及打開文件的信息等等。通過這些資料, 進(jìn)程就可以得

17、到運行需要的相關(guān)程序段以及必要的數(shù) 據(jù)。 (4) CPU現(xiàn)場信息 進(jìn)程的靜態(tài)描述必須保證一個進(jìn)程在獲得處理機 并重新進(jìn)入運行狀態(tài)時,能夠精確地接著上次運行的 位置繼續(xù)進(jìn)行。相關(guān)程序段和數(shù)據(jù)集以及處理機現(xiàn)場 (或處理機狀態(tài))都必須保存。處理機(CPU)現(xiàn)場信息 一般包括處理機的內(nèi)部寄存器和堆棧等基本數(shù)據(jù)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理21 task-struct是Linux系統(tǒng)的進(jìn)程控制塊(PCB), 通過對PCB的操作,系統(tǒng)為進(jìn)程分配資源并進(jìn)行調(diào) 度,最終完成進(jìn)程的創(chuàng)建和撤銷。系統(tǒng)利用PCB中 的描述信息來標(biāo)識一個進(jìn)程,根據(jù)PCB中的調(diào)度信 息決定該進(jìn)程是否應(yīng)該運行。如果這個進(jìn)程

18、要進(jìn)入 運行,首先根據(jù)其中的CPU現(xiàn)場信息來恢復(fù)運行現(xiàn) 場,然后根據(jù)資源信息獲取對應(yīng)的程序段和數(shù)據(jù)集, 接著上次的位置開始執(zhí)行,同時通過PCB中的通信 信息和其他進(jìn)程協(xié)同工作。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理22 5.2.3 進(jìn)程狀態(tài)及轉(zhuǎn)換 系統(tǒng)通過PCB對進(jìn)程進(jìn)行控制,進(jìn)程不斷地在不 同的狀態(tài)之間轉(zhuǎn)換。 1. 進(jìn)程的基本狀態(tài) 在分時系統(tǒng)中,一個進(jìn)程擁有了所需要的全部資 源,就可以開始執(zhí)行,當(dāng)分配的時間片結(jié)束,讓出 CPU資源,這種只要能夠占有CPU就能進(jìn)入執(zhí)行的狀 態(tài)稱為就緒狀態(tài)。有時,多個進(jìn)程之間互相制約,某 個進(jìn)程必須等到某個事件發(fā)生才能夠競爭CPU資源, 這是等待狀態(tài),當(dāng)?shù)?/p>

19、待的事件發(fā)生之后,這個進(jìn)程被 喚醒,由等待狀態(tài)進(jìn)入就緒狀態(tài),直到獲得CPU才開 始執(zhí)行。等待狀態(tài)、就緒狀態(tài)和執(zhí)行狀態(tài)是一個進(jìn)程 所具有的最基本的三種狀態(tài),見圖2.2。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理23 圖2.2 進(jìn)程基本狀態(tài)及轉(zhuǎn)換示意圖 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理24 2. Linux系統(tǒng)進(jìn)程狀態(tài) Linux系統(tǒng)的2.2.16版本進(jìn)程共有六種狀態(tài),包 括運行狀態(tài)、可中斷等待狀態(tài)、不可中斷等待狀態(tài)、 僵死狀態(tài)、暫停狀態(tài)和交換狀態(tài),而在2.4.0版本中 取消了交換狀態(tài),加入獨占狀態(tài)。 進(jìn)程狀態(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 進(jìn)程 表2.1 Linux系統(tǒng)(2.2.X2.4.X版本)進(jìn)程狀態(tài)表 進(jìn)程調(diào)度及進(jìn)程管理處理機管理25 (1) 運行狀態(tài)(running) 系統(tǒng)中的運行狀態(tài)實際包含上述基本狀態(tài)中的執(zhí) 行和就緒兩種狀態(tài),進(jìn)程是正在運行還是處于就緒狀 態(tài)準(zhǔn)備運行,要靠當(dāng)前是否占有CPU資源來區(qū)分。 (2) 等待狀態(tài) 系統(tǒng)把基本的等待狀態(tài)進(jìn)一步細(xì)化為可中斷的等 待態(tài)和不可中斷的

21、等待態(tài)兩種。處于這種狀態(tài)的進(jìn)程 都在等待某個事件或某個資源,可中斷等待狀態(tài)的進(jìn) 程可以被信號喚醒而進(jìn)入就緒狀態(tài)等待調(diào)度,而不可 中斷等待狀態(tài)的進(jìn)程是因為硬件資源無法滿足,不能 被信號喚醒,必須等到所等待的資源得到之后由特定 的方式喚醒。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理26 5.2 進(jìn)程 (3) 僵死狀態(tài)(zombie) 由于某些原因進(jìn)程被終止,這個進(jìn)程所擁有的內(nèi)存、 文件等資源全部釋放之后,還保存著PCB信息,這種占 有PCB但已經(jīng)無法運行的進(jìn)程就處于僵死狀態(tài)。 (4) 暫停狀態(tài) 處于暫停狀態(tài)的進(jìn)程,一般都是由運行狀態(tài)轉(zhuǎn)換而 來,等待某種特殊處理。比如處于調(diào)試跟蹤的程序,每 執(zhí)行到

22、一個斷點,就轉(zhuǎn)入暫停狀態(tài),等待新的輸入信號。 (5) 交換狀態(tài) 處于交換狀態(tài)的進(jìn)程正在執(zhí)行內(nèi)存、外存的交換工 作。這個狀態(tài)在2.2.X版本的內(nèi)核中基本已經(jīng)不使用, 在2.4.X版本中沒有這種狀態(tài)。 進(jìn)程調(diào)度及進(jìn)程管理處理機管理27 5.2 進(jìn)程 (6) 獨占狀態(tài) 它應(yīng)該是等待狀態(tài)的一種,處于獨占狀態(tài)的進(jìn)程 位于等待隊列中,當(dāng)?shù)却氖录l(fā)生時,只有處于這 種狀態(tài)的進(jìn)程被喚醒,其他處于可中斷和不可中斷等 待狀態(tài)的進(jìn)程則繼續(xù)等待。Linux 2.4引入獨占狀態(tài)后, 如果事件發(fā)生,只喚醒處于獨占狀態(tài)的那一個進(jìn)程, 這就可以大大提高Apache這類Web應(yīng)用的效率,使 Linux更適合網(wǎng)絡(luò)服務(wù)器的角色。

23、 Linux系統(tǒng)進(jìn)程的狀態(tài)轉(zhuǎn)換情況。采取一定的簡化 措施:按照進(jìn)程是否占有處理機為依據(jù),把進(jìn)程的運 行狀態(tài)分為執(zhí)行和就緒兩種狀態(tài);等待狀態(tài)統(tǒng)一考慮, 不再區(qū)分是否可中斷,獨占狀態(tài)也作為一種等待狀態(tài) 處理;不涉及交換狀態(tài)。見圖2.3。 進(jìn)程調(diào)度及進(jìn)程管理處理機管理28 圖2.3同時也記錄了一個進(jìn)程在整個生命周期的變化過 程。從圖的左下方開始看,系統(tǒng)在某種特定的情況下, 響應(yīng)某個要求,首先分配各種資源,創(chuàng)建一個新的進(jìn) 程,進(jìn)程進(jìn)入就緒隊列。 圖2.3 Linux系統(tǒng)進(jìn)程狀態(tài)及轉(zhuǎn)換示意圖 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理29 所有的進(jìn)程必須在就緒之后,才有資格競爭CPU,進(jìn) 入運行狀態(tài)。這

24、樣,進(jìn)程的整個生命周期中,大致的轉(zhuǎn)換 路徑總是沿著三個閉合回路進(jìn)行。 就緒狀態(tài)和執(zhí)行狀態(tài)形成第一個回路。進(jìn)程進(jìn)入就緒 態(tài),放入可執(zhí)行隊列等待,一旦被調(diào)度函數(shù)選中,就切換 現(xiàn)場,進(jìn)入運行狀態(tài),等自己的時間片耗盡之后,馬上保 護現(xiàn)場,讓出CPU,轉(zhuǎn)入就緒狀態(tài),等待新的調(diào)度。 執(zhí)行狀態(tài)、等待狀態(tài)和就緒狀態(tài)形成第二個回路。處 于執(zhí)行狀態(tài)的進(jìn)程,有時需要等待某個事件或某種資源的 發(fā)生,這時,繼續(xù)占有CPU也無法開展工作,就轉(zhuǎn)入等待 狀態(tài),CPU由下一個被調(diào)度的進(jìn)程占有。當(dāng)?shù)却M(jìn)程所等 待的事件發(fā)生后,等待進(jìn)程被喚醒,進(jìn)入就緒狀態(tài)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理30 執(zhí)行狀態(tài)、暫停狀態(tài)和就緒

25、狀態(tài)構(gòu)成第三個回路。 當(dāng)接收到某種特殊的信號,比如SIGSTOP(Linux的停 止信號)時,處于執(zhí)行狀態(tài)的進(jìn)程放棄CPU,保護現(xiàn)場 之后,進(jìn)入暫停狀態(tài),直到獲得另外一個特殊的信號才 進(jìn)入就緒狀態(tài)。 一個處于執(zhí)行狀態(tài)的進(jìn)程調(diào)用退出函數(shù)exit之后, 進(jìn)程就會進(jìn)入僵死狀態(tài),這種狀態(tài)下,進(jìn)程釋放了PCB 之外的所有系統(tǒng)資源。也就是說,它在系統(tǒng)中只留下這 個進(jìn)程的一個PCB。 僵死進(jìn)程的父進(jìn)程通過PCB了解到該進(jìn)程所處的狀 態(tài)后,采取相應(yīng)的處理措施,回收PCB,這個進(jìn)程就完 成了它的使命,從僵死走向徹底消亡,上圖右上方的虛 箭頭表示了這種結(jié)局。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理31 5.2

26、.4 進(jìn)程控制 進(jìn)程控制,是指對系統(tǒng)中的全部進(jìn)程實施有效的 管理,使得進(jìn)程能夠及時創(chuàng)建、撤銷,正確地完成進(jìn) 程各狀態(tài)之間的轉(zhuǎn)換,使得多個進(jìn)程高效率并發(fā)執(zhí)行, 達(dá)到系統(tǒng)資源高度共享的目的。 進(jìn)程狀態(tài)之間的轉(zhuǎn)換轉(zhuǎn)換通常由三種不同的方式 控制:進(jìn)程控制原語、系統(tǒng)核心函數(shù)(比如調(diào)度)、 和外部事件發(fā)生(比如中斷)。 這里說的所謂原語, 指系統(tǒng)狀態(tài)下執(zhí)行的一些具 有特定功能的程序段, 這些程序段具有“原子性” , 是執(zhí)行過程中不可分割的最小單位。用于進(jìn)程控制的 原語有:創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語 等。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理32 (1) 創(chuàng)建原語 進(jìn)程創(chuàng)建原語用于建立一個

27、新的進(jìn)程,這個新進(jìn)程 可以由內(nèi)核調(diào)用進(jìn)程創(chuàng)建原語建立,也可以由父進(jìn)程執(zhí) 行進(jìn)程創(chuàng)建原語生成一個子進(jìn)程,子進(jìn)程還可以生成子 進(jìn)程,以形成樹形進(jìn)程家族結(jié)構(gòu)。進(jìn)程創(chuàng)建原語的主要 任務(wù)是形成進(jìn)程的PCB, 因此,調(diào)用者必須提供有關(guān) 的參數(shù),例如進(jìn)程名、進(jìn)程優(yōu)先級、進(jìn)程正文段起始地 址、資源清單等。 (2) 撤銷原語 當(dāng)一個進(jìn)程完成了指定的任務(wù)或由于某種錯誤導(dǎo)致 異常終止時,要撤銷這個進(jìn)程以便釋放進(jìn)程占用的資源。 進(jìn)程撤銷原語根據(jù)調(diào)用者提供的信息,找到指定的進(jìn)程, 回收其占用的資源和PCB。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理33 (3) 阻塞原語 當(dāng)正在運行的進(jìn)程需要等待某一事件,由自己調(diào)用

28、阻塞原語把自己阻塞起來成為等待狀態(tài)。阻塞原語主要完 成保護CPU現(xiàn)場的工作, 即首先中斷處理機保存該進(jìn)程 的CPU現(xiàn)場,然后把被阻塞的進(jìn)程置為等待狀態(tài),插入到 相應(yīng)的等待隊列,最后轉(zhuǎn)入進(jìn)程調(diào)度程序,從就緒隊列中 選擇一個進(jìn)程投入運行。 (4) 喚醒原語 當(dāng)處于等待狀態(tài)的進(jìn)程所等待的事件出現(xiàn)時,由發(fā)現(xiàn) 者進(jìn)程調(diào)用喚醒原語喚醒被阻塞的進(jìn)程。 進(jìn)程控制原語由系統(tǒng)執(zhí)行。同時,操作系統(tǒng)還提供了一些 用于進(jìn)程控制的系統(tǒng)調(diào)用和操作命令,用戶可以通過程序 或者命令的方式控制進(jìn)程。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理34 5.2.5 進(jìn)程約束 現(xiàn)代操作系統(tǒng)中,程序并發(fā)執(zhí)行,多個進(jìn)程各自獨 立地運行,同時

29、競爭和共享系統(tǒng)中有限的資源,這種競 爭與合作構(gòu)成了系統(tǒng)進(jìn)程之間的約束關(guān)系。每個進(jìn)程獨 立地申請和釋放系統(tǒng)資源,把申請某一類資源的進(jìn)程稱 為該類資源的消費者,把釋放同類資源的進(jìn)程稱為該類 資源的生產(chǎn)者,就得到描述進(jìn)程約束關(guān)系的一般模型: 生產(chǎn)者消費者問題,也稱為有界緩沖區(qū)問題。 比較簡單的情況,兩進(jìn)程共享一個長度為N(N0) 的有界緩沖區(qū),一個進(jìn)程Pp往緩沖區(qū)中送數(shù)據(jù),是生產(chǎn) 者,另一個進(jìn)程Pc從緩沖區(qū)中讀取數(shù)據(jù),是消費者,如 圖2.4,下面來討論它們間的約束關(guān)系。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理35 圖2.4 簡單的生產(chǎn)者消費者問題 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理36

30、首先,生產(chǎn)者進(jìn)程Pp和消費者進(jìn)程Pc共享同一個 有界緩沖區(qū),對這個緩沖區(qū)的操作必須是獨占的。這 種不允許多個并發(fā)進(jìn)程交叉執(zhí)行的資源稱為臨界資源, 臨界的程序段資源稱為臨界部分或臨界區(qū)。臨界資源 是由于不同并發(fā)進(jìn)程共享某個資源造成的,不可能通 過增加資源的方法解決。這種因為共享某一公有資源 而引起的在臨界資源內(nèi)不允許并發(fā)進(jìn)程交叉執(zhí)行的現(xiàn) 象,稱為進(jìn)程間的間接約束。 由于對臨界資源的共享,而產(chǎn)生了臨界區(qū)問題。 對于有著臨界區(qū)問題的并行進(jìn)程之間必須互斥,以保 證不會同時進(jìn)入臨界區(qū)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理37 其次,對生產(chǎn)者進(jìn)程Pp和消費者進(jìn)程Pc訪問共享有界 緩沖區(qū)的順序有嚴(yán)格

31、的要求。具體來講,這種限制為: (1) 消費者進(jìn)程Pc要接收數(shù)據(jù)時,有界緩沖區(qū)必須至 少有一個單元是滿的; (2) 生產(chǎn)者進(jìn)程Pp要發(fā)送數(shù)據(jù)時,有界緩沖區(qū)必須至 少有一個單元是空的。 這樣存在一組相互獨立的并發(fā)進(jìn)程,各自的執(zhí)行結(jié)果 互為對方的執(zhí)行條件,從而限制各進(jìn)程執(zhí)行速度的過 程,稱為進(jìn)程間的直接制約。存在直接制約關(guān)系,相 互發(fā)送消息進(jìn)行互相合作、互相等待,各自按照一定 的速度向前推進(jìn)的過程稱為同步。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理38 消費者進(jìn)程和生產(chǎn)者進(jìn)程之間因為共享緩沖區(qū), 相互競爭而間接制約,具有互斥關(guān)系,同時相互以 對方的運行結(jié)果為條件而直接制約,也具有同步的 關(guān)系,是

32、一對同時具有競爭和合作的進(jìn)程。 在并發(fā)系統(tǒng)中,進(jìn)程之間相互制約,具有同步 和互斥是相當(dāng)普遍的現(xiàn)象。這種進(jìn)程之間的相互關(guān) 系,依靠單個進(jìn)程自身的力量是無法解決的,必須 以進(jìn)程間的相互通信為基礎(chǔ),互相發(fā)送信息,才能 協(xié)調(diào)解決。具體的同步、互斥實現(xiàn)方案有很多種, 分別基于不同的通信方式。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理39 5.2.6 進(jìn)程通信 進(jìn)程間通信是協(xié)調(diào)解決多個進(jìn)程之間的約束關(guān)系,實現(xiàn) 進(jìn)程共同進(jìn)展的關(guān)鍵技術(shù),是多道系統(tǒng)中控制進(jìn)程并發(fā) 執(zhí)行必不可少的機制。進(jìn)程間的通信有兩種方式:一是 互相發(fā)送少量的控制信息,一般只傳遞一個或者幾個字 節(jié)的數(shù)據(jù),進(jìn)程利用這些簡單的信息,實現(xiàn)互斥和同

33、步, 控制運行速度,這種簡單的通信方式被稱為進(jìn)程間的低 級通信;另外一種方式稱為進(jìn)程間的高級通信,基本不 涉及進(jìn)程執(zhí)行速度控制,用來在進(jìn)程之間傳遞大量的信 息,由于這種通信方式主要用于交換信息, 因此,在開 發(fā)本地進(jìn)程間通信的同時,也為遠(yuǎn)程進(jìn)程間的通信,和 計算機網(wǎng)絡(luò)的開發(fā)及控制奠定了基礎(chǔ)。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理40 1. 進(jìn)程通信類型 按照通信進(jìn)程雙方的地位,可以把進(jìn)程通信分為:主 從式、會話式、消息或郵箱機制以及共享存儲區(qū)四種類型。 (1) 主從式 主進(jìn)程一方在整個通信過程中處于絕對的控制地位, 它可以直接控制從進(jìn)程的動作,自由地使用從進(jìn)程的資源 和數(shù)據(jù)。 (2) 會

34、話式 一方進(jìn)程提供服務(wù),另外一方進(jìn)程在得到服務(wù)方的許 可之后,可以使用其提供的服務(wù)。在通信過程中,雙方的 連接關(guān)系固定,客戶進(jìn)程提出服務(wù)請求,服務(wù)進(jìn)程根據(jù)情 況控制服務(wù)的狀態(tài)和內(nèi)容。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理41 (3) 消息或郵箱機制 通信雙方具有平等的地位,和現(xiàn)實生活中的郵件類 似。通信雙方通過緩沖區(qū)或郵箱存放被傳送的數(shù)據(jù), 不 需要建立雙方直接的連接關(guān)系。申請通信的發(fā)起方進(jìn)程 不管接收方進(jìn)程的狀態(tài),把信息直接送入雙方共享的緩 沖區(qū)(或者郵箱)中,接收進(jìn)程在合適的時機去讀取緩沖 區(qū)(或者郵箱)以接收信息。 (4) 共享存儲區(qū) 共享存儲區(qū)通信方式中,通信雙方進(jìn)程共享內(nèi)存中

35、的一段存儲空間,共同操作這個存儲區(qū),達(dá)到數(shù)據(jù)共享 的目的。通信過程中,數(shù)據(jù)一直存放在共享存儲區(qū)中, 不需要移動,因此特別適用于大量數(shù)據(jù)的傳遞。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理42 2. Linux系統(tǒng)的進(jìn)程通信 Linux系統(tǒng)提供了多種通信機制,利用這些機制, 可以方便地進(jìn)行進(jìn)程之間的相互協(xié)調(diào),實現(xiàn)進(jìn)程的互 斥和同步。 (1) 信號(signal) 信號屬于Linux系統(tǒng)的低級通信,主要用于在進(jìn)程 之間傳遞控制信號。 信號可以發(fā)給一個或多個進(jìn)程,可以是由某個進(jìn) 程發(fā)出,也可以由鍵盤中斷產(chǎn)生,還可以是由shell程 序向其子進(jìn)程發(fā)送任務(wù)控制命令時產(chǎn)生。進(jìn)程在某些 系統(tǒng)錯誤環(huán)境下也會有

36、信號產(chǎn)生。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理43 除了兩個信號外,進(jìn)程可以忽略這些信號中的絕大 部分,這兩個信號是引起進(jìn)程終止執(zhí)行的SIGSTOP信 號和引起進(jìn)程退出的SIGKILL信號。至于其他信號,進(jìn) 程可以選擇處理它們的具體方式。信號沒有固有的相對 優(yōu)先級。 并不是系統(tǒng)中每個進(jìn)程都可以向所有其他進(jìn)程發(fā)送 信號,只有核心和超級用戶具有此權(quán)限。普通進(jìn)程只能 向具有相同uid和gid的進(jìn)程或者在同一進(jìn)程組中的進(jìn)程 發(fā)送信號。信號是通過設(shè)置task-struct結(jié)構(gòu)中signal域里 的某一位來產(chǎn)生的。如果進(jìn)程沒有阻塞信號并且處于可 中斷的等待狀態(tài),則可以將其狀態(tài)改成running,若

37、確 認(rèn)進(jìn)程還處在運行隊列中,就可以通過信號喚醒它。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理44 (2) 管道(pipe) 管道是UNIX操作系統(tǒng)傳統(tǒng)的進(jìn)程通信技術(shù)。 Linux管道通信包括無名管道和有名管道兩種,通過文 件系統(tǒng)來實現(xiàn)。管道也是一種特殊的文件類型,實際 上是通過文件系統(tǒng)的高速緩沖實現(xiàn)的。 兩個進(jìn)程通過管道進(jìn)行通信時,兩個進(jìn)程分別進(jìn) 行讀和寫操作,都指向緩沖區(qū)中同樣的物理單元,一 個進(jìn)程寫入數(shù)據(jù),另一個進(jìn)程從緩沖區(qū)中讀取數(shù)據(jù), 從而實現(xiàn)信息傳遞。管道方式只能按照先進(jìn)先出方式 單向傳遞信息。管道方式可以用來進(jìn)行大規(guī)模的數(shù)據(jù) 傳遞。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理45

38、(3) SYSTEM 進(jìn)程間通信 信號量、消息隊列和共享內(nèi)存是UNIX/Linux系統(tǒng) 常用的通信方式。 消息隊列用來在進(jìn)程之間傳遞分類的格式化數(shù)據(jù), 共享內(nèi)存方式可以使不同進(jìn)程共同訪問一塊虛擬存儲 空間,通過對該存儲區(qū)的共同操作來實現(xiàn)數(shù)據(jù)傳遞, 信號量主要用于進(jìn)程之間的同步控制,通常和共享內(nèi) 存共同使用。 這三種方式在系統(tǒng)中是作為一個整體實現(xiàn)的。共 享內(nèi)存是這三種方式中通信效率最高的,它在進(jìn)程的 虛擬空間中進(jìn)行,而且不需要數(shù)據(jù)的移動也可以實現(xiàn) 大規(guī)模的數(shù)據(jù)傳遞。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理46 (4) 套接字(socket) 套接字是用來通過網(wǎng)絡(luò)實現(xiàn)運行于不同計算機上的進(jìn) 程

39、之間通信的機制。它可以實現(xiàn)數(shù)據(jù)的雙向規(guī)模傳遞, 是整個網(wǎng)絡(luò)通信的基礎(chǔ)。具體的原理和實現(xiàn)與網(wǎng)絡(luò)協(xié) 議等有關(guān),不做具體的介紹。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理47 5.2.7 死鎖 死鎖,是指所有并發(fā)進(jìn)程都擁有部分資源,同時都在等 待其他進(jìn)程擁有的資源,而且在得到對方資源之前不會釋放 自己占有的資源,所有進(jìn)程都進(jìn)入永久等待狀態(tài)而無法運行 的情況。死鎖是并發(fā)進(jìn)程約束關(guān)系處理不當(dāng)造成的最嚴(yán)重的 后果,是對系統(tǒng)資源極大的浪費,必須設(shè)法避免。 死鎖出現(xiàn)的根本原因是系統(tǒng)資源的有限性。并發(fā)進(jìn)程競 爭資源,調(diào)度不當(dāng),就可能出現(xiàn)死鎖的情況,因此必須采取 適當(dāng)?shù)拇胧﹣硐梨i。 產(chǎn)生死鎖的必要條件有四個

40、:并發(fā)進(jìn)程之間是互斥關(guān)系, 每個進(jìn)程必須獨占某個系統(tǒng)資源;進(jìn)程占有的資源在未結(jié)束 使用之前,不能被強行剝奪,只能由該進(jìn)程自己釋放;進(jìn)程 需要的資源采用部分分配的方式,在等待新資源的 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理48 同時,繼續(xù)占有已分配的資源;各占有資源的進(jìn)程形成環(huán)路, 每一個進(jìn)程已獲得的資源同時被下一個進(jìn)程請求。 解決死鎖的方案就是破壞死鎖產(chǎn)生的必要條件。方法分 為預(yù)防、回避、檢測恢復(fù)三種。預(yù)防指采取某種策略,控制 并發(fā)進(jìn)程對資源的請求,保證死鎖的四個必要條件在系統(tǒng)運 行的任何時刻都無法滿足。避免指系統(tǒng)采取某種算法,對資 源使用情況進(jìn)行預(yù)測,使資源分配盡可能合理,避免死鎖的 發(fā)

41、生。這兩種方法需要大量的系統(tǒng)開銷,而且系統(tǒng)的資源也 無法得到充分的利用。因此,一般系統(tǒng)都采取檢測恢復(fù)的方 法,這種方法是在死鎖發(fā)生之后,根據(jù)系統(tǒng)情況,檢測死鎖 發(fā)生的位置和原因,使用外力,重新分配資源,破壞死鎖發(fā) 生的條件,系統(tǒng)就可以從死鎖狀態(tài)恢復(fù)正常運行,這樣的方 法只要使用少量的系統(tǒng)資源,尤其是CPU時間就可以排除死 鎖。 5.2 進(jìn)程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理49 多道處理系統(tǒng)中,進(jìn)程是系統(tǒng)調(diào)度和資源分配 的基本單位,計算機的CPU不停地在不同進(jìn)程 之間切換,進(jìn)程切換現(xiàn)場稱為進(jìn)程上下文,每 一次切換過程,系統(tǒng)都要對換出進(jìn)程的上下文 做詳細(xì)記錄,然后恢復(fù)換入進(jìn)程的上下文。因 此,系統(tǒng)的

42、進(jìn)程管理過程要耗費相當(dāng)多的系統(tǒng) 資源和CPU時間,尤其是對于需要頻繁進(jìn)程切 換的任務(wù)。 針對進(jìn)程切換的時間和資源耗費問題,為 了減少系統(tǒng)進(jìn)程切換的時間,提高整個系統(tǒng)的 效率,引入了線程的概念。 5.3 線程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理50 5.3.1 線程的概念 線程是在一個進(jìn)程內(nèi)的基本調(diào)度單位。線程可以 看作是一個執(zhí)行流,擁有記錄自己狀態(tài)和運行現(xiàn)場的 少量數(shù)據(jù)(棧段和上下文),但沒有單獨的代碼段和數(shù) 據(jù)段,而是與其他線程共享。 多個線程共享一個進(jìn)程內(nèi)部的各種資源,分別按 照不同的路徑執(zhí)行,同時線程也是一個基本調(diào)度單位, 可以在一個進(jìn)程內(nèi)部進(jìn)行線程切換,現(xiàn)場保護工作量 小。一方面通過共享進(jìn)程

43、的基本資源而減輕系統(tǒng)開銷, 另一方面提高了現(xiàn)場切換的效率,因此,線程也被稱 為輕權(quán)進(jìn)程或輕量級進(jìn)程。許多流行的多任務(wù)操作系 統(tǒng)基本都支持線程。 5.3 線程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理51 按照系統(tǒng)的管理策略,線程可以分為用戶級線程和系 統(tǒng)級線程(內(nèi)核級線程)兩種基本類型。用戶級線程指不 需要內(nèi)核支持,在用戶程序中實現(xiàn)的線程都需要用戶程序 自己完成。系統(tǒng)級線程由內(nèi)核完成線程的調(diào)度并提供相應(yīng) 的系統(tǒng)調(diào)用,用戶程序可以通過這些接口函數(shù)對線程進(jìn)行 一定的控制和管理。 用戶級線程不需要額外的內(nèi)核開銷,一般只要提供一 個線程庫即可,剩下的工作就主要由用戶自己負(fù)責(zé)了。但 是由于用戶級線程與系統(tǒng)內(nèi)核無關(guān),

44、當(dāng)一個進(jìn)程因I/O而 被調(diào)度程序切換為等待狀態(tài)時,屬于該進(jìn)程的某個執(zhí)行線 程可能仍然處于執(zhí)行狀態(tài)。 系統(tǒng)級線程的調(diào)度由內(nèi)核完成,不需要更多用戶干預(yù), 但要占用更多的系統(tǒng)開銷,效率相對低一些。 5.3 線程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理52 線程也是系統(tǒng)中動態(tài)變化的實體,它描述程序的 運行活動,在內(nèi)存中需要記錄。線程的記錄信息要保 證系統(tǒng)能夠準(zhǔn)確地進(jìn)行線程切換。 在線程的生命周期里,線程作為一個基本的執(zhí)行 單位而存在,不斷地在執(zhí)行和停止的狀態(tài)之間轉(zhuǎn)換。 線程的基本狀態(tài)是執(zhí)行、就緒和等待。 線程的同步是一個相當(dāng)關(guān)鍵的問題。線程之間的 通信相對容易,而線程間的同步問題需要更仔細(xì)地對 待,特別是用戶級

45、線程,這個問題相當(dāng)突出。 5.3 線程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理53 5.3.2線程和進(jìn)程 進(jìn)程是操作系統(tǒng)資源分配和系統(tǒng)調(diào)度的基本單位, 每一個進(jìn)程都有自己獨立的地址空間和各種資源,線 程也是一種系統(tǒng)調(diào)度的基本單位,多個線程可以共享 一個進(jìn)程的資源,在存儲方面,線程占用的資源更少。 進(jìn)程的調(diào)度主要由操作系統(tǒng)完成,而線程根據(jù)其類型 的不同,可以由系統(tǒng)調(diào)度(內(nèi)核級線程),也可以由用 戶進(jìn)行調(diào)度(用戶級線程)。 5.3 線程 進(jìn)程調(diào)度及進(jìn)程管理處理機管理54 進(jìn)程調(diào)度的過程中要進(jìn)行切換,切換現(xiàn)場的保護與恢 復(fù)要求對進(jìn)程上下文做完整的記錄,要消耗一定的存儲資 源和處理機時間;線程共享進(jìn)程的資源,可以在進(jìn)程內(nèi)部 切換,不涉及資源保存和內(nèi)存地址變換等操作,可以節(jié)約 大量的空間和時間資源。因此,對于切換頻繁的工作任務(wù), 多線程方式比多進(jìn)程方式可以提供更高的響應(yīng)速度。多個 線程共享同一進(jìn)程的資源,線程相互間通訊容易。而進(jìn)程 間通訊一般必須要通過系統(tǒng)提供的進(jìn)程間通訊機制。 進(jìn)程和線程都是用來描述程序的運行活動,是存在于系統(tǒng) 存儲區(qū)中的動態(tài)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論