考研王道操作系統(tǒng)單科_第1頁
考研王道操作系統(tǒng)單科_第2頁
考研王道操作系統(tǒng)單科_第3頁
考研王道操作系統(tǒng)單科_第4頁
考研王道操作系統(tǒng)單科_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一章操作系統(tǒng)概述

1.1、操作系統(tǒng)的概念、特征、功能和

結(jié)構(gòu)

1、操作系統(tǒng)的概念

在信息化時(shí)代,軟件被稱為計(jì)算機(jī)系統(tǒng)的靈魂。而作為

軟件核心的操作系統(tǒng),已經(jīng)與現(xiàn)代計(jì)算機(jī)系統(tǒng)密不可分、融

為一體。計(jì)算機(jī)系統(tǒng)自下而上可粗分為四個(gè)部分:硬件、操

作系統(tǒng)、應(yīng)用程序和用戶。操作系統(tǒng)管理各種計(jì)算機(jī)硬件,

為應(yīng)用程序提供基礎(chǔ),并充當(dāng)計(jì)算機(jī)硬件和用戶的中介。

硬件,如中央處理器、內(nèi)存、輸入輸出設(shè)備等,提供了

基本的計(jì)算資源。應(yīng)用程序,如字處理程序、電子制表軟件、

編譯器、網(wǎng)絡(luò)瀏覽器等,規(guī)定了按何種方式使用這些資源來

解決用戶的計(jì)算問題。操作系統(tǒng)控制和協(xié)調(diào)各用戶的應(yīng)用程

序?qū)τ布氖褂谩?/p>

綜上所述,操作系統(tǒng)是指控制和管理整個(gè)計(jì)算機(jī)系統(tǒng)的

硬件和軟件資源,并合理的組織調(diào)度計(jì)算機(jī)的工作和資源的

分配,以提供給用戶和其他軟件方便的接口和環(huán)境集合。計(jì)

算機(jī)操作系統(tǒng)是隨著計(jì)算機(jī)研究和應(yīng)用的發(fā)展逐步形成并

發(fā)展起來的,它是計(jì)算機(jī)系統(tǒng)中最基本的系統(tǒng)軟件。

2、操作系統(tǒng)的特征

操作系統(tǒng)是一種系統(tǒng)軟件,但與其他的系統(tǒng)軟件和應(yīng)用

軟件有很大的不同,他有自己的特殊性即基本特征,操作系

統(tǒng)的基本特征包括并發(fā)、共享、虛擬和異步。這些概念對理

解和掌握操作系統(tǒng)的核心至關(guān)重要,將一直貫穿于各章節(jié)中。

(1)并發(fā)

并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生,在多

道程序環(huán)境下,一段時(shí)間內(nèi)宏觀上有多個(gè)程序在同時(shí)執(zhí)行,

而在同一時(shí)刻,單處理器環(huán)境下實(shí)際上只有一個(gè)程序在執(zhí)行,

故微觀上這些程序還是在分時(shí)的交替進(jìn)行。操作系統(tǒng)的并發(fā)

是通過分時(shí)得以實(shí)現(xiàn)的。操作系統(tǒng)的并發(fā)性是指計(jì)算機(jī)系統(tǒng)

中同時(shí)存在多個(gè)運(yùn)行著的程序,因此它具有處理和調(diào)度多個(gè)

程序同時(shí)執(zhí)行的能力。在操作系統(tǒng)中,引入進(jìn)程的目的實(shí)施

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

(2)共享

資源共享即共享,是指系統(tǒng)中的資源可供內(nèi)存中多個(gè)并

發(fā)執(zhí)行的進(jìn)程共同使用。共享可以分為以下兩種資源共享方

式。

1)互斥共享方式

系統(tǒng)中的某些資源,,如打印機(jī)、磁帶機(jī),雖然他們可

以提供給多個(gè)進(jìn)程使用,但為使所打印的內(nèi)容不致造成混淆,

應(yīng)規(guī)定在同一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程方位該資源。

為此,當(dāng)進(jìn)程a訪問某資源時(shí),必須先提出請求,如果

此時(shí)該資源空閑,系統(tǒng)便可將之分配給進(jìn)程a使用,伺候若

再有其他進(jìn)程也要訪問該資源(只要a未用完)則必須等待。

僅當(dāng)進(jìn)程a訪問完并釋放該資源后,才允許另一進(jìn)城對該資

源進(jìn)行訪問。計(jì)算機(jī)系統(tǒng)中的大所屬物理設(shè)備,以及某些軟

件中所用的棧、變量和表格,都屬于臨界資源,他們都要求

被互斥的共享。

2)同時(shí)訪問方式

系統(tǒng)中還有一種資源,允許在一段時(shí)間內(nèi)由多個(gè)進(jìn)程

“同時(shí)”對它進(jìn)行訪問。這里所謂的“同時(shí)”往往是宏觀上

的,而在微觀上,這些進(jìn)程可能是交替的對該資源進(jìn)行訪問

即“分時(shí)共享二典型的可供多個(gè)進(jìn)程同時(shí)訪問的資源是磁

盤設(shè)備,一些用重入碼編寫的文件也可以被“同時(shí)”共享,

即若干個(gè)用戶同時(shí)訪問該文件。

并發(fā)和共享是操作系統(tǒng)兩個(gè)最基本的特征,這兩者之間

又是互為存在條件的:1資源共享是以程序的并發(fā)為條件的,

若系統(tǒng)不允許程序并發(fā)執(zhí)行,則自然不存在資源共享的問題;

2若系統(tǒng)不能對資源共享實(shí)施有效地管理,也必將影響到程

序的并發(fā)執(zhí)行,甚至根本無法并發(fā)執(zhí)行。

(3)虛擬

虛擬是指把一個(gè)物理上的實(shí)體變?yōu)槿舾蓚€(gè)邏輯上的對

應(yīng)物。物理實(shí)體是實(shí)的,即實(shí)際存在的;而后者是虛的,是

用戶感覺上的事物。相應(yīng)的,用于實(shí)現(xiàn)虛擬的技術(shù),成為虛

擬技術(shù)。在操作系統(tǒng)中利用了多種虛擬技術(shù),分別用來實(shí)現(xiàn)

虛擬處理器、虛擬內(nèi)存和虛擬外部設(shè)備。

在虛擬處理器技術(shù)中,是通過多道程序設(shè)計(jì)技術(shù),讓多

道程序并發(fā)執(zhí)行的方法,來分時(shí)使用一臺(tái)處理器的。此時(shí),

雖然只有一臺(tái)處理器,但他能同時(shí)為多個(gè)用戶服務(wù),是每個(gè)

終端用戶都認(rèn)為是有一個(gè)中央處理器在為他服務(wù)。利用多道

程序設(shè)計(jì)技術(shù),把一臺(tái)物理上的CPU虛擬為多臺(tái)邏輯上的CPU,

稱為虛擬處理器。

類似的,可以通過虛擬存儲(chǔ)器技術(shù),將一臺(tái)機(jī)器的物理

存儲(chǔ)器變?yōu)樘摂M存儲(chǔ)器,一邊從邏輯上來擴(kuò)充存儲(chǔ)器的容量。

當(dāng)然,這是用戶所感覺到的內(nèi)存容量是虛的,我們把用戶

所發(fā)哦絕倒的存儲(chǔ)器程序虛擬存儲(chǔ)器。

還可以通過虛擬設(shè)備技術(shù),將一臺(tái)物理10設(shè)備虛擬為

多臺(tái)邏輯上的10設(shè)備,并允許每個(gè)用戶占用一臺(tái)邏輯上的

10設(shè)備,這樣便可使原來僅允許在一段時(shí)間內(nèi)有一個(gè)用戶訪

問的設(shè)備,變?yōu)樵谝欢螘r(shí)間內(nèi)允許多個(gè)用戶同時(shí)訪問的共享

設(shè)備。

因此操作系統(tǒng)的虛擬技術(shù)可歸納為:時(shí)分復(fù)用技術(shù)和空

分復(fù)用技術(shù)。

(4)異步

在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行,但由于資

源有限,進(jìn)程的執(zhí)行不是一貫到底,而是走走停停,以不可

預(yù)知的速度向前推進(jìn),這就是進(jìn)程的異步性。

異步性使得操作系統(tǒng)運(yùn)行在一種隨機(jī)的環(huán)境下,可能導(dǎo)

致進(jìn)程產(chǎn)生于時(shí)間有關(guān)的錯(cuò)誤。但是只要運(yùn)行環(huán)境相同,操

作系統(tǒng)必須保證多次運(yùn)行進(jìn)程,都獲得相同的結(jié)果。

3、操作系統(tǒng)的目標(biāo)和功能

為了給多道程序提供良好的運(yùn)行環(huán)境,操作系統(tǒng)應(yīng)具有

幾方面的功能:處理器管理、存儲(chǔ)器管理、設(shè)備管理和文件

管理。為了方便用戶使用操作系統(tǒng),還必須向用戶提供接口。

同時(shí)操作系統(tǒng)可用來擴(kuò)充機(jī)器,以提供更方便的服務(wù)、更高

的資源利用率。

(1)操作系統(tǒng)作為計(jì)算機(jī)系統(tǒng)資源的管理者

1)處理器管理

在多道程序環(huán)境下,處理器的分配和運(yùn)行都是以進(jìn)程為

基本單位,因而對處理器的管理可歸結(jié)為對進(jìn)程的管理。進(jìn)

程管理的主要功能有:進(jìn)程控制,進(jìn)程同步,進(jìn)程通信,死

鎖處理,處理器調(diào)度等。

2)存儲(chǔ)器管理

存儲(chǔ)器管理的主要任務(wù)是位多通道程序的運(yùn)行提供良

好的環(huán)境,方便用戶使用以及提高內(nèi)存的利用率。因此,存

儲(chǔ)器管理應(yīng)具備:內(nèi)存分配、地址映射、內(nèi)存保護(hù)與共享和

內(nèi)存擴(kuò)充等。

3)文件管理

文件管理主要包括文件的存儲(chǔ)空間管理、目錄管理及文

件讀寫管理及保護(hù)等。

4)設(shè)備管理

設(shè)備管理的主要任務(wù)就是完成用戶的10請求,方便用

戶使用各種設(shè)備,并提高設(shè)備的利用率,主要包括混充管理、

設(shè)備分配、設(shè)備處理和虛擬設(shè)備等功能。

(2)操作系統(tǒng)作為用戶與計(jì)算機(jī)硬件系統(tǒng)之間的接

為方便用戶使用操作系統(tǒng),操作系統(tǒng)還提供了用戶接口。

操作系統(tǒng)提供的接口主要分為兩類:一類是命令接口,用戶

利用這些操作命令來組織和控制作業(yè)的執(zhí)行;另一類是程序

接口,編程人員可以使用它們來請求操作系統(tǒng)服務(wù)。

1)命令接口

使用命令接口進(jìn)行作業(yè)控制的主要方式有兩種:按作業(yè)

控制方式的不同,可以將命令接口分為聯(lián)機(jī)命令接口和脫機(jī)

命令接口。

2)程序接口

程序接口由一組系統(tǒng)調(diào)用命令組成。用戶通過在程序中

使用這些系統(tǒng)調(diào)用命令拉i請求操作系統(tǒng)提供的服務(wù)。用戶

在程序中可以直接使用這組系統(tǒng)調(diào)用命令向系統(tǒng)提出各種

服務(wù)請求,如使用各種外部設(shè)備,進(jìn)行有關(guān)磁盤文件的操作,

申請分配和收回內(nèi)存以及其他各種控制要求。

所謂系統(tǒng)調(diào)用就是用戶在程序中調(diào)用操作系統(tǒng)所提供

的一些子功能。具體的講,系統(tǒng)調(diào)用就是通過系統(tǒng)調(diào)用命令

中斷現(xiàn)行程序,而轉(zhuǎn)去執(zhí)行響應(yīng)的子程序,以完成特定的系

統(tǒng)功能;系統(tǒng)調(diào)用完成后,返回程序的斷點(diǎn)以繼續(xù)執(zhí)行。

系統(tǒng)調(diào)用命令是作為擴(kuò)充機(jī)器命令提供的,目的是增強(qiáng)

系統(tǒng)功能,方便用戶使用。而起通過系統(tǒng)調(diào)用的方式來使用

系統(tǒng)功能,可以保證系統(tǒng)的穩(wěn)定性和安全性,防止用戶隨意

更改或訪問系統(tǒng)的數(shù)據(jù)或命令。因此,在一些計(jì)算機(jī)系統(tǒng)中,

把系統(tǒng)調(diào)用命令成為廣義指令。廣義指令與機(jī)器指令在性質(zhì)

上是不同的,機(jī)器指令使用硬件電路直接實(shí)現(xiàn)的,而廣義命

令則是由操作系統(tǒng)提供的一個(gè)或多個(gè)子程序模塊實(shí)現(xiàn)的。顯

然,系統(tǒng)調(diào)用屬于核心態(tài)指令。

(3)操作系統(tǒng)做擴(kuò)充機(jī)器

沒有任何軟件支持的計(jì)算機(jī)成為裸機(jī),它僅構(gòu)成計(jì)算機(jī)

系統(tǒng)的物質(zhì)基礎(chǔ),而實(shí)際呈現(xiàn)在用戶面前的計(jì)算機(jī)系統(tǒng)是經(jīng)

過若干層軟件改造的計(jì)算機(jī)。裸機(jī)在最里層,他的外面是操

作系統(tǒng),有操作系統(tǒng)提供的資源管理功能和方便用戶的各種

服務(wù)功能,將裸機(jī)改造成功能更強(qiáng)、使用更方便的機(jī)器,通

常把覆蓋了軟件的機(jī)器成為擴(kuò)充機(jī)器,又稱之為虛擬機(jī)。

4操作系統(tǒng)的結(jié)構(gòu)

像現(xiàn)在操作系統(tǒng)這樣龐大而復(fù)雜的系統(tǒng),為了能正常工

作且容易修改和維護(hù),在實(shí)現(xiàn)前必須認(rèn)真設(shè)計(jì)操作系統(tǒng)的結(jié)

構(gòu)。操作系統(tǒng)發(fā)展至今,其設(shè)計(jì)結(jié)構(gòu)可以分成以下幾類:

(1)簡單結(jié)構(gòu)。

(2)模塊化結(jié)構(gòu)

(3)分層式結(jié)構(gòu)

(4)微內(nèi)核結(jié)構(gòu)

1.2、操作系統(tǒng)的發(fā)展與分類

1、手工操作階段

2、脫機(jī)輸入輸出階段

3、批處理階段

批處理技術(shù)是指計(jì)算機(jī)系統(tǒng)對一批作業(yè)自動(dòng)進(jìn)行處理

的一種技術(shù)。批處理階段的特點(diǎn)是:用戶不用與計(jì)算機(jī)直接

打交道,而是通過專門的操作員來完成作業(yè)的輸入輸出。隨

著外圍設(shè)備的迅速發(fā)展,后來又出現(xiàn)了脫機(jī)批處理系統(tǒng),即

主機(jī)直接與磁盤通信。

(1)單道批處理系統(tǒng)

主要特點(diǎn):自動(dòng)性、順序性、單道性。

(2)多道批處理系統(tǒng)

多道程序設(shè)計(jì)技術(shù)是指在計(jì)算機(jī)內(nèi)存中同時(shí)存放幾道

相互獨(dú)立的程序,它們在管理程序的控制下相互交替的運(yùn)行。

其特征是:多道,宏觀上并行,微觀上串行。

4、分時(shí)操作系統(tǒng)

所謂分時(shí)系統(tǒng)就是把處理器的運(yùn)行時(shí)間分成很短的時(shí)

間片,按時(shí)間片輪流把處理器分配給各聯(lián)機(jī)作業(yè)使用。若某

個(gè)作業(yè)再分配給他的時(shí)間片內(nèi)不能完成其計(jì)算,則改作業(yè)暫

時(shí)停止運(yùn)行,把處理器讓給其他作業(yè)使用,等待下一輪再繼

續(xù)運(yùn)行,由于計(jì)算機(jī)速度很快,作業(yè)運(yùn)行輪轉(zhuǎn)的很快,給每

個(gè)用戶的感覺好像是自己獨(dú)占一臺(tái)計(jì)算機(jī)。

分時(shí)操作系統(tǒng)十多個(gè)用戶通過終端同事共享一臺(tái)主機(jī),

這些終端連接在主機(jī)上,用戶可以同時(shí)與主機(jī)進(jìn)行交互操作

而不互相干擾。所以,實(shí)現(xiàn)分時(shí)系統(tǒng)最關(guān)鍵的問題,是如何

使用戶能與自己的作業(yè)進(jìn)行交互,即當(dāng)用戶在自己的中斷上

輸入命令時(shí),系統(tǒng)應(yīng)能及時(shí)接收并及時(shí)處理該命令,再將結(jié)

果返回用戶。分時(shí)系統(tǒng)也是支持多道程序設(shè)計(jì)的系統(tǒng),但它

不同于多道批處理系統(tǒng)。多道批處理是實(shí)現(xiàn)作業(yè)自動(dòng)控制而

無需人工干預(yù)的系統(tǒng),而分時(shí)系統(tǒng)是實(shí)現(xiàn)人機(jī)交互的系統(tǒng),

這使得分時(shí)系統(tǒng)具有與批處理系統(tǒng)不同的特征,其主要特征

如下:

同時(shí)性,交互性,獨(dú)立性,及時(shí)性。

5、實(shí)時(shí)操作系統(tǒng)

實(shí)時(shí)系統(tǒng)的主要特點(diǎn)是:實(shí)時(shí)性和可靠性。

6、網(wǎng)絡(luò)操作系統(tǒng)和分布式計(jì)算機(jī)系統(tǒng)

7、個(gè)人計(jì)算機(jī)操作系統(tǒng)

1.3、操作系統(tǒng)的運(yùn)行環(huán)境

1、操作系統(tǒng)的運(yùn)行機(jī)制

計(jì)算機(jī)系統(tǒng)中,通常CPU執(zhí)行兩種不同性質(zhì)的程序,一

種是操作系統(tǒng)內(nèi)核程序;另一種是用戶自編程序或系統(tǒng)外城

的應(yīng)用程序。對操作系統(tǒng)而言,這兩種程序的作用不同,前

者是后者的管理者和控制者,因此“管理程序”要執(zhí)行一些

特權(quán)指令,而“被管理程序”出于安全性考慮,不能執(zhí)行這

些指令。所謂特權(quán)指令,是指計(jì)算集中不允許用戶直接使用

的指令,如10指令、置中斷指令。

操作系統(tǒng)在具體實(shí)現(xiàn)上劃分了用戶態(tài)和核心態(tài),以嚴(yán)格

區(qū)分兩種類程序。

一些與硬件關(guān)聯(lián)交緊密的模塊,諸如時(shí)鐘管理程序、中

斷處理程序、設(shè)備驅(qū)動(dòng)程序等處于最底層。其次是運(yùn)行頻率

較高的程序,諸如金城關(guān)里、存儲(chǔ)器管理和設(shè)備管理等。這

兩部分內(nèi)容構(gòu)成了操作系統(tǒng)的內(nèi)核。這部分內(nèi)容的指令操作

工作在核心態(tài)。

內(nèi)核是計(jì)算機(jī)上配置的最底層軟件,是計(jì)算機(jī)功能的眼

神。不同系統(tǒng)對內(nèi)核的定義稍有區(qū)別,大多數(shù)操作系統(tǒng)內(nèi)核

包括四個(gè)方面的內(nèi)容。

(1)時(shí)鐘管理

在計(jì)算機(jī)外部設(shè)備中,時(shí)鐘是最關(guān)鍵的設(shè)備。時(shí)鐘的第

一功能是計(jì)時(shí),操作系統(tǒng)需要通過時(shí)鐘管理,向用戶提供標(biāo)

準(zhǔn)的系統(tǒng)時(shí)間。另外,通過時(shí)鐘中斷的管理,可以實(shí)現(xiàn)京城

的切換。諸如:在分時(shí)操作系統(tǒng)中,采用時(shí)間片輪轉(zhuǎn)調(diào)度的

實(shí)現(xiàn);在實(shí)時(shí)系統(tǒng)中,按截止時(shí)間控制運(yùn)行的實(shí)現(xiàn);在批處

理系統(tǒng)中,通過時(shí)鐘管理來衡量一個(gè)作業(yè)的運(yùn)行程度等。因

此,系統(tǒng)管理的方方面面無不依賴于它。

(2)中斷機(jī)制

引入中斷技術(shù)的初衷是提高多道程序運(yùn)行環(huán)境中CPU的

利用率,而且主要是針對外部設(shè)備的。后來的到發(fā)展,形成

了多種類等,成為操作系統(tǒng)各項(xiàng)操作的基礎(chǔ)。例如鍵盤或鼠

標(biāo)信息的輸入、進(jìn)程的管理和調(diào)度、系統(tǒng)功能的調(diào)用、設(shè)備

驅(qū)動(dòng)、文件訪問等,無不依賴于中斷機(jī)制??梢哉f,現(xiàn)代計(jì)

算機(jī)系統(tǒng)是靠中斷驅(qū)動(dòng)的軟件。

(3)原語

按層次結(jié)構(gòu)涉及的操作系統(tǒng),底層必然是一些可被調(diào)用

的公用小程序,他們各自完成一個(gè)規(guī)定的操作。其特點(diǎn)是:

1.他們處于操作系統(tǒng)的最底層,是最接近硬件的部分。2.這

些程序的運(yùn)行具有原子性一一其操作只能一起合成。3.這些

程序的運(yùn)行時(shí)間都較短,而且調(diào)用頻繁。

通常把具有這些特點(diǎn)的程序成為原語。定義源于的直接

方法是關(guān)閉中斷,讓她的所有動(dòng)作不可分割的進(jìn)行完再打開

中斷。

系統(tǒng)中的設(shè)備驅(qū)動(dòng)、CPU切換、進(jìn)程通信等功能中的部

分操作都可以定義為原語,是他們呢成為內(nèi)核的組成部分。

(4)系統(tǒng)控制的數(shù)據(jù)結(jié)構(gòu)及處理

系統(tǒng)中用來登記狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu)很多。比如作業(yè)控

制塊、進(jìn)程控制塊、設(shè)備控制塊、各類鏈表、消息隊(duì)列、緩

沖區(qū)、空閑區(qū)登記表、內(nèi)存分配表等。為了實(shí)現(xiàn)有效地管理,

系統(tǒng)需要一些基本的操作,常見的操作有以下三種:

1)進(jìn)程管理:進(jìn)程狀態(tài)管理、進(jìn)程調(diào)度和分配、創(chuàng)建與

撤掉進(jìn)程控制塊的隊(duì)列維護(hù)操作等。

2)存儲(chǔ)器管理:存儲(chǔ)器的空間分配和回收管理、內(nèi)存信

息保護(hù)程序、代碼對換程序等。

3)設(shè)備管理:緩沖區(qū)管理、設(shè)備分配和回收等。

從上述內(nèi)容可以了解,核心態(tài)指令實(shí)際上包括系統(tǒng)調(diào)用

類指令和一些針對時(shí)鐘、中斷和原語的操作指令。

2、中斷和異常的概念

在操作系統(tǒng)中引入核心態(tài)和用戶態(tài)這兩匯總工作狀態(tài)

后,就需要考慮這兩種狀態(tài)之間如何切換。操作系統(tǒng)內(nèi)核工

作在核心態(tài),而用戶程序工作在用戶態(tài)。但系統(tǒng)不允許用戶

程序?qū)崿F(xiàn)核心態(tài)的功能,而它們又必須使用這些功能。

中斷(interruption)也成為外中斷,指來自CPU執(zhí)行指

令以外的事件發(fā)生,如設(shè)備發(fā)出的10結(jié)束中斷,表示設(shè)備

輸入輸出處理已經(jīng)完成,希望處理器能夠像設(shè)備發(fā)出下一個(gè)

輸入輸出請求,同事讓王成輸入輸出后的程序繼續(xù)進(jìn)行。時(shí)

鐘中斷,表示一個(gè)固定的事件篇已到,讓處理器處理計(jì)時(shí)、

啟動(dòng)定時(shí)運(yùn)行的任務(wù)。這一類中斷通常是與當(dāng)前運(yùn)行的程序

無關(guān)。中斷可細(xì)分為硬中斷和軟中斷。硬中斷是硬件產(chǎn)生的;

軟中斷是軟件產(chǎn)生的。

異常(Exception)也成為內(nèi)中斷、例外或陷入。指源自

CPU執(zhí)行指令內(nèi)部的時(shí)間,如程序的非法操作碼、地址越界、

算數(shù)一出、虛存系統(tǒng)的缺頁以及專門的陷入指令等引起的時(shí)

間。對異常的處理一般要依賴與當(dāng)前程序的運(yùn)行現(xiàn)場,而且

異常不能被屏蔽,一旦出現(xiàn)異常立即處理,而關(guān)于內(nèi)中斷和

外中斷的聯(lián)系與區(qū)別如下:

這樣,操作系統(tǒng)的運(yùn)行環(huán)境可以理解為:用戶通過操作

系統(tǒng)運(yùn)行上層程序,而這個(gè)上層程序的運(yùn)行以來與操作系統(tǒng)

的底層管理程序提供服務(wù)支持,當(dāng)需要管理程序服務(wù)時(shí),系

統(tǒng)則通過硬件中斷機(jī)制進(jìn)入核心態(tài),運(yùn)行管理程序;另外也

可能是程序運(yùn)行出現(xiàn)異常情況,被動(dòng)的需要管理程序的服務(wù),

這是就通過異常處理來進(jìn)入核心態(tài)。當(dāng)管理程序運(yùn)行結(jié)束時(shí),

用戶程序要繼續(xù)進(jìn)行,則通過相應(yīng)保存程序現(xiàn)場推出中斷處

理程序或異常處理程序,返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行。在操作系統(tǒng)

這一層面上,我們關(guān)心的是系統(tǒng)核心態(tài)和用戶態(tài)的軟件實(shí)現(xiàn)

和切換,對于硬件層面的具體理解,可以結(jié)合“計(jì)算機(jī)組成

原理”課程中有關(guān)中斷的內(nèi)容進(jìn)行學(xué)習(xí)。

下面列舉一些由用戶態(tài)轉(zhuǎn)向核心態(tài)的例子:

1)用戶程序要求操作系統(tǒng)的服務(wù),即系統(tǒng)服務(wù)。

2)發(fā)生一次中斷

3)用戶程序中產(chǎn)生了一個(gè)錯(cuò)誤狀態(tài)

4)用戶程序中企圖執(zhí)行一條特權(quán)指令

5)從核心態(tài)轉(zhuǎn)向用戶態(tài)由一條指令實(shí)現(xiàn),這條指令也

是特權(quán)指令。一般情況是中斷返回指令。

注意,由用戶態(tài)進(jìn)入核心態(tài),不僅僅是狀態(tài)需要切換,

而且,所使用的對戰(zhàn)也可能需要由用戶堆棧切換為系統(tǒng)對戰(zhàn),

但這個(gè)系統(tǒng)對戰(zhàn)也是屬于該進(jìn)程的。

1.4、本章疑難點(diǎn)

1.并行性與并發(fā)性的區(qū)別和聯(lián)系

并行性和并發(fā)性是既相似又有區(qū)別的兩個(gè)概念。并行性

是指兩個(gè)或多個(gè)事件在同一時(shí)刻發(fā)生,并發(fā)性是指兩個(gè)或多

個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生。

2.分時(shí)系統(tǒng)與實(shí)時(shí)系統(tǒng)特征的比較

3.特權(quán)指令的工作機(jī)制

所謂特權(quán)指令是指有特殊權(quán)限的指令,由于這類指令的

全縣最大,如果使用不當(dāng),就會(huì)皮懷系統(tǒng)或其他用戶信息。

為了保證系統(tǒng)安全,這類指令只能用于操作系統(tǒng)或其他系統(tǒng)

軟件,不直接提供給用戶使用,主要用于系統(tǒng)資源的分配和

管理,包括改變系統(tǒng)的工作方式,檢測用戶的訪問權(quán)限,修

改虛擬存儲(chǔ)器管理的段表、頁表和完成人五的創(chuàng)建和切換等。

在某些用戶的計(jì)算機(jī)系統(tǒng)中,為了統(tǒng)一管理各種外部設(shè)備,

輸入輸出指令也作為特權(quán)指令,不允許用戶直接使用。需要

輸入輸出操作時(shí),必須通過系統(tǒng)調(diào)用,經(jīng)由操作系統(tǒng)完成。

特權(quán)指令那個(gè)必須在核心態(tài)之星,核心態(tài)又叫做特權(quán)態(tài)、系

統(tǒng)態(tài)。實(shí)際上,CPU在核心態(tài)的下可以執(zhí)行指令系統(tǒng)的全集。

為了防止用戶系統(tǒng)中使用特權(quán)指令,用戶態(tài)下只能使用

除特權(quán)指令以外的指令,核心態(tài)下可以使用全部指令。所以

把用戶程序放在用戶態(tài)下進(jìn)行,而操作系統(tǒng)中必須使用特權(quán)

指令的那部分程序在核心態(tài)下運(yùn)行,保證了計(jì)算機(jī)系統(tǒng)的安

全可靠。從用戶態(tài)轉(zhuǎn)換為核心態(tài)的唯一途徑就是終端或異常。

4.系統(tǒng)調(diào)用產(chǎn)生的訪管中斷

程序員在編寫程序時(shí),因要求操作系統(tǒng)提供服務(wù)而有意

識(shí)的使用“訪管指令”,從而導(dǎo)致程序中斷,這屬于一種自

愿性的中斷,所以又稱其為“訪管中斷”。“訪管”中斷是由

訪管指令產(chǎn)生,程序員可以使用訪管指令中設(shè)置參數(shù),當(dāng)CPU

執(zhí)行到訪管指令那個(gè)時(shí),將訪管指令中的操作數(shù)存入到主存

中的約定單元,然后產(chǎn)生訪管中斷,引出操作系統(tǒng)來處理訪

管中斷中的具體要求。這種利用訪管指令來實(shí)現(xiàn)的指令成為

廣義指令。當(dāng)初與用戶態(tài)的用戶程序使用訪管指令時(shí),系統(tǒng)

根據(jù)該訪管指令的操作數(shù)執(zhí)行訪管中斷處理程序,訪管中斷

處理程序?qū)聪到y(tǒng)調(diào)用的操作數(shù)和參數(shù)轉(zhuǎn)到響應(yīng)的例行子

程序。完成服務(wù)功能后,退出中斷,返回到用戶程序斷點(diǎn)繼

續(xù)執(zhí)行。

第二章進(jìn)程管理

進(jìn)程管理是操作系統(tǒng)的核心內(nèi)容,也是每年必考的重點(diǎn)。

其中,進(jìn)程概念、進(jìn)程調(diào)度、信號(hào)量機(jī)制實(shí)現(xiàn)同步和互斥、

進(jìn)程死鎖等更是重中之重,要求熟練掌握。此外,需要注意

的是:本章除了選擇題外還很容易考察綜合題,在最近三年

的考研綜合題有兩道題考察了本章的知識(shí)點(diǎn)。其中信號(hào)量實(shí)

現(xiàn)進(jìn)程同步和互斥,進(jìn)程調(diào)度算法和銀行家算法都是可能出

現(xiàn)的綜合題考點(diǎn),需要讀者多加注意。

2.1、進(jìn)程與線程

1、進(jìn)程的概念和特征

(1)進(jìn)程的概念

在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行,此時(shí)他們

將失去封閉性,并具有間斷性和不可再現(xiàn)性的特征。為此引

入了進(jìn)程的概念,以便更好地描述和控制程序的并發(fā)執(zhí)行,

實(shí)現(xiàn)操作系統(tǒng)的并發(fā)行和共享性。為此引入了進(jìn)程的概念,

以便更好地描述和控制程序的并發(fā)執(zhí)行,實(shí)現(xiàn)操作系統(tǒng)的并

發(fā)性和共享性。

為了是參與并發(fā)執(zhí)行的程序能獨(dú)立的運(yùn)行,必須為之配

置一個(gè)專門的數(shù)據(jù)結(jié)構(gòu),稱之為進(jìn)程控制塊(process

controlblock),系統(tǒng)利用PCB來描述進(jìn)程的基本情況和運(yùn)

行狀態(tài),進(jìn)而控制和管理進(jìn)程。

相應(yīng)的,有程序段、相關(guān)數(shù)據(jù)段和PCB三部分構(gòu)成了進(jìn)

程映像(進(jìn)程實(shí)體)。所謂創(chuàng)建進(jìn)程,實(shí)質(zhì)上是創(chuàng)建進(jìn)程映

像中的PCB;而撤銷進(jìn)程,實(shí)質(zhì)上是撤銷進(jìn)程的PCBo指的

注意的是,進(jìn)程影響是靜態(tài)的,晉城市動(dòng)態(tài)的。

從不同的角度,進(jìn)程可以有不同的定義,比較經(jīng)典的定

義有:

1)進(jìn)程是程序的一次執(zhí)行過程

2)進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理器上順序執(zhí)行時(shí)所發(fā)

生的活動(dòng)。

3)進(jìn)程是具有獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的

過程,他是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。

在引入了進(jìn)程實(shí)體的概念后,我們可以吧傳統(tǒng)的操作系

統(tǒng)中的進(jìn)程定義為:”進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程,是系統(tǒng)

進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位”。

(2)進(jìn)程的特征

進(jìn)程是由多程序的并發(fā)執(zhí)行而引出的,他和程序是兩個(gè)

截然不同的概念。進(jìn)程的基本特征是對比單個(gè)程序的順序執(zhí)

行提出的,也是對進(jìn)程管理提出的基本要求。

1)動(dòng)態(tài)性:進(jìn)程是程序的一次執(zhí)行,他有著創(chuàng)建、活動(dòng)、

暫停、終止等過程,具有一定的生命周奇奇,是動(dòng)態(tài)

的產(chǎn)生、變化和消亡的。動(dòng)杰性是進(jìn)程最基本的特征。

2)并發(fā)性:至多個(gè)進(jìn)程實(shí)體,同存于內(nèi)存中,能在一段

時(shí)間內(nèi)同時(shí)運(yùn)行,并發(fā)性是進(jìn)程的重要特征,同時(shí)也

是操作系統(tǒng)的重要特征,引入進(jìn)程的目的就是為了是

程序能與去其他進(jìn)程的程序并發(fā)執(zhí)行,以提高資源利

用率。

3)獨(dú)立性:指進(jìn)程實(shí)體是一個(gè)能獨(dú)立運(yùn)行、獨(dú)立獲得資

源和獨(dú)立接收調(diào)度的基本單位。范圍建立PCB的程序

都不能作為一個(gè)獨(dú)立的單位參與運(yùn)行。

4)異步性:由于進(jìn)程的相互制約,是進(jìn)程具有執(zhí)行的問

斷性。也即進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前

推進(jìn)。異步性會(huì)導(dǎo)致執(zhí)行結(jié)果不可再現(xiàn)性,為此,在

操作系統(tǒng)中必須配置相應(yīng)的進(jìn)程同步機(jī)制。

5)結(jié)構(gòu)性:每個(gè)進(jìn)程都配置一個(gè)PCB對其進(jìn)行描述。從

結(jié)構(gòu)上來看,進(jìn)程實(shí)體是由程序段、數(shù)據(jù)段和進(jìn)程控

制端三部分組成的。

2、進(jìn)程的狀態(tài)與轉(zhuǎn)換

進(jìn)程在其生命周期內(nèi),由于系統(tǒng)中個(gè)進(jìn)程之間的相互制

約關(guān)系以及系統(tǒng)的運(yùn)行環(huán)境的變化,使的進(jìn)程的狀態(tài)也在不

斷地發(fā)生著變化。通常進(jìn)程有以下五種狀態(tài)。前三種是進(jìn)程

的基本狀態(tài)。

1)運(yùn)行狀態(tài):進(jìn)程正在處理器上運(yùn)行。在單處理

器的環(huán)境下,每一時(shí)刻最多只有一個(gè)進(jìn)程處于

運(yùn)行狀態(tài)。

2)就緒狀態(tài):進(jìn)程已處于準(zhǔn)備運(yùn)行的狀態(tài),即進(jìn)

程獲得了除CPU之外的一切所需資源,一旦得

到處理器即可運(yùn)行。

3)阻塞狀態(tài):又稱為等待狀態(tài):進(jìn)程正在等待某

一事件而暫停運(yùn)行,如等待某資源為可用(不

包括處理器),或等待輸入輸出的完成。及時(shí)處

理器空閑,該進(jìn)程也不能運(yùn)行。

4)創(chuàng)建狀態(tài):進(jìn)程正在被創(chuàng)建,尚未轉(zhuǎn)到就緒狀

態(tài)。創(chuàng)建進(jìn)程通常需要多個(gè)步驟:首先申請一

個(gè)空白的PCB,并向PCB中填寫一些控制和管

理進(jìn)程的信息;然后由系統(tǒng)為該進(jìn)程分配運(yùn)行

時(shí)所必須的資源;最后把該進(jìn)程轉(zhuǎn)入到就緒狀

態(tài)。

5)結(jié)束狀態(tài):進(jìn)程正在從系統(tǒng)中消失,這可能是

進(jìn)程正常結(jié)束或其他原因中斷退出運(yùn)行。當(dāng)進(jìn)

程需要結(jié)束運(yùn)行時(shí),系統(tǒng)首先必須置該進(jìn)程為

結(jié)束狀態(tài),然后再進(jìn)一步處理資源釋放和回收

工作。

注意區(qū)別就緒狀態(tài)和等待狀態(tài):就緒狀態(tài)是指進(jìn)程僅缺

少處理器,只要活得處理器資源就立即執(zhí)行;而等待狀態(tài)是

指進(jìn)程需要其他資源或等待某一事件,及時(shí)處理器空閑也不

能運(yùn)行。

3、進(jìn)程控制

進(jìn)程控制的主要功能是對系統(tǒng)中所有進(jìn)程實(shí)施有效地

管理,她具有創(chuàng)建新進(jìn)程、撤銷已有進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)

換等功能。在操作系統(tǒng)中,一般把進(jìn)程控制用的程序段成為

原語,原語的特點(diǎn)是執(zhí)行期間不允許中斷,他是一個(gè)不可分

割的基本單位。

(1)進(jìn)程的穿件

允許一個(gè)進(jìn)程創(chuàng)建另一個(gè)進(jìn)程。

操作系統(tǒng)創(chuàng)建一個(gè)新進(jìn)程的過程如下(創(chuàng)建原語):

1)為新進(jìn)程分配一個(gè)為我一個(gè)進(jìn)程標(biāo)示號(hào),并申請一個(gè)

空白的PCB。

2)為進(jìn)程分配資源,為新進(jìn)程的程序和數(shù)據(jù),以及用戶

占分配必要的空間。

3)初始化PCB,主要包括初始化標(biāo)識(shí)信息、初始化處理

器狀態(tài)信息和初始化處理器控制信息,以及設(shè)置進(jìn)程

的空閑及。

4)如果進(jìn)程就緒隊(duì)列能夠接納新進(jìn)程,就將新進(jìn)程插入

到就緒隊(duì)列,等待被調(diào)度運(yùn)行。

(2)進(jìn)程的終止

引起進(jìn)程終止的時(shí)間主要有:正常結(jié)束、表示進(jìn)程的任

務(wù)已經(jīng)完成和準(zhǔn)備退出運(yùn)行。異常結(jié)束是指進(jìn)程在運(yùn)行時(shí),

發(fā)生了某種異常事件,是程序無法繼續(xù)運(yùn)行,如:存儲(chǔ)區(qū)越

界、保護(hù)措、非法指令、特權(quán)指令錯(cuò)、10故障等。外界干預(yù)

是指進(jìn)程外界的請求而終止,如操作員或操作系統(tǒng)干預(yù)、父

進(jìn)程請求和父進(jìn)程終止。

操作系統(tǒng)終止進(jìn)程的過程如下:(撤消原語)

1)根據(jù)被終止進(jìn)程的標(biāo)示符,檢索PCB,從中讀出該進(jìn)

程的狀態(tài)。

2)若被終止進(jìn)程處于執(zhí)行狀態(tài),立即終止該進(jìn)程的執(zhí)行,

將處理器資源分配給其他進(jìn)程。

3)若該進(jìn)程還有子進(jìn)程,則應(yīng)將其所有子進(jìn)程終止。

4)將該進(jìn)程所擁有的資源、或歸還給父進(jìn)程或歸還給操

作系統(tǒng)。

5)將該P(yáng)CB從所在隊(duì)列(鏈表)中刪除。

(3)進(jìn)程的阻塞和喚醒

正在執(zhí)行的進(jìn)程,猶豫期待的某些時(shí)間為發(fā)生,如請求

系統(tǒng)資源失敗、等待某種操作的完成、新數(shù)據(jù)尚未到達(dá)或無

心工作可做等,則由系統(tǒng)自動(dòng)執(zhí)行阻塞原語,使自己由運(yùn)行

狀態(tài)變?yōu)樽枞麪顟B(tài)??梢姡M(jìn)程的阻塞是進(jìn)程自身的一種主

動(dòng)行為。

阻塞原語的執(zhí)行過程為:找到將要被阻射進(jìn)城的標(biāo)識(shí)號(hào)

對應(yīng)的PCB,如果該進(jìn)程為運(yùn)行狀態(tài),則保護(hù)其現(xiàn)場,將其

狀態(tài)改為阻塞狀態(tài),停止運(yùn)行,并把該P(yáng)CB插入響應(yīng)時(shí)間的

等待隊(duì)列中去;若為就緒狀態(tài),則將其狀態(tài)改為阻塞狀態(tài),

把它溢出就緒隊(duì)列,插入到等待隊(duì)列中去。

當(dāng)阻塞進(jìn)程所期待的時(shí)間出現(xiàn)時(shí),如它所啟動(dòng)的10操

作已完成或其所期待的數(shù)據(jù)已到達(dá),則有關(guān)進(jìn)程(比如,提

供數(shù)據(jù)的進(jìn)程),調(diào)用喚醒原語,將等待該事件的進(jìn)程喚醒,

喚醒原語的執(zhí)行過程是:在該事件的等待隊(duì)列中找到相應(yīng)進(jìn)

程的PCB,然后把該P(yáng)CB插入到就緒隊(duì)列中,等待調(diào)度程序

調(diào)度。

需要注意的是,Block原語和Wakeup原語是一對作用剛

好相反的原語,必須成對使用。Block原語是由被阻塞進(jìn)程

自我調(diào)用實(shí)現(xiàn)的,而Wakeup原語則是由一個(gè)與被喚醒進(jìn)程

相合作或被其他相關(guān)進(jìn)程調(diào)用實(shí)現(xiàn)的。

(4)進(jìn)程的切換

無論什么樣的進(jìn)程操作,都是在內(nèi)核執(zhí)行的。

進(jìn)程切換是指當(dāng)前正在運(yùn)行的進(jìn)程被轉(zhuǎn)換到其他狀態(tài)

后,再回到運(yùn)行繼續(xù)執(zhí)行的過程,這個(gè)過程中,進(jìn)程的運(yùn)行

環(huán)境產(chǎn)生了實(shí)質(zhì)性的變化。進(jìn)程切換的過程如下:

1)保存處理器上下文,包括程序計(jì)數(shù)器和其他寄存器。

2)更新PCB信息。

3)把進(jìn)程的PCB移入相應(yīng)的隊(duì)列,如就緒、在某時(shí)間阻

塞等隊(duì)列。

4)選擇另一個(gè)進(jìn)程執(zhí)行,并更新其PCBo更新內(nèi)存管理

的數(shù)據(jù)結(jié)構(gòu)。

5)恢復(fù)處理器的上下文。

4、進(jìn)程的組織

進(jìn)程是操作系統(tǒng)的資源分配和獨(dú)立運(yùn)行的基本單位。

(1)進(jìn)程控制塊

進(jìn)程創(chuàng)建時(shí),操作系統(tǒng)就新建一個(gè)PCB結(jié)構(gòu),它之后就

常駐內(nèi)存,任意時(shí)刻可以存取。在進(jìn)程結(jié)束時(shí)刪除。PCB是

進(jìn)程實(shí)體的一部分,是進(jìn)程存在的唯一標(biāo)識(shí)。

PCB主要包括:進(jìn)程描述信息、進(jìn)程控制和管理信息、

資源分配清單和處理器相關(guān)信息等。

在一個(gè)系統(tǒng)中,通常存在這許多進(jìn)程,有的處于就緒狀

態(tài),有的處于阻塞狀態(tài),而且阻塞的原因各不相同。為了方

便進(jìn)程的調(diào)度和管理,需要將各進(jìn)程的PCB用適當(dāng)?shù)姆椒ńM

織起來。目前,常用的組織方式有連接方式和索引方式兩種。

連接方式將同一狀態(tài)的PCB連接成一個(gè)隊(duì)列,不同狀態(tài)對應(yīng)

不同的隊(duì)列,也可以把處于阻塞狀態(tài)的進(jìn)程的PCB,根據(jù)其

阻塞原因的不同,排成多個(gè)阻塞隊(duì)列。索引方式是將同一狀

態(tài)的進(jìn)程組織在一個(gè)索引表中,索引表的表項(xiàng)只想相應(yīng)的

PCB,不同狀態(tài)對應(yīng)不同的索引表,如就緒索引表和阻塞索

引表等。

(2)程序段

程序段就是能北京城調(diào)度程度調(diào)度到CPU執(zhí)行的程序代

碼段。注意,程序可以被多個(gè)進(jìn)程共享,就是說多個(gè)進(jìn)程可

以運(yùn)行同一個(gè)程序。

(3)數(shù)據(jù)段

一個(gè)進(jìn)程的數(shù)據(jù)段,可以是進(jìn)程對應(yīng)的程序加工處理的

原始數(shù)據(jù),也可以是程序執(zhí)行時(shí)產(chǎn)生的中間或最終結(jié)果。

5、進(jìn)程的通信

進(jìn)程通信就是進(jìn)程之間的數(shù)據(jù)交換。PV操作時(shí)低級(jí)通信

方式2,高級(jí)通信方式是指以較高的效率傳輸大量數(shù)據(jù)的通

信方式。高級(jí)通信方法可分為共享存儲(chǔ)、消息傳遞和管道通

信三大類。

(1)共享存儲(chǔ)

在通信的進(jìn)程之間存在著一款可以直接訪問的共享空

見,通過對這塊共享空間的讀寫操作時(shí)間進(jìn)程之間的信息交

換。在共享存儲(chǔ)方法中,需要使用同步互斥工具。

需要注意的是:用戶進(jìn)程空間一般都是相互獨(dú)立的,要

想讓兩個(gè)用戶進(jìn)程共享空間,必須通過特殊系統(tǒng)調(diào)用實(shí)現(xiàn),

而進(jìn)程內(nèi)的線程是自然共享進(jìn)程空間的。

(2)消息傳遞

在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換,是以格式化的

小心Message為單位的。

(3)管道通信

管道通信是消息傳遞的一種特殊方式。。所謂管道,就

是用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程以實(shí)現(xiàn)他們之間通信

的一個(gè)共享文件,又名為pipe文件。向管道或共享文件提

供輸入的發(fā)送進(jìn)程,以字符流的形勢將大量的數(shù)據(jù)送入寫管

道;而接收管道輸出的接收進(jìn)城,則從管道中接受數(shù)據(jù)。為

了協(xié)調(diào)雙方的通信,關(guān)到極致必須他提供以下撒按方面的協(xié)

調(diào)能力:互斥、同步和確定對方存在。

6、線程概念和多線程模型

(1)線程的基本概念

引入進(jìn)程的目的,是為了是多道程序能并發(fā)執(zhí)行,以提

高資源利用率和系統(tǒng)吞吐量;而引入線程,則是為了減小程

序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開銷,提高操作系統(tǒng)的并發(fā)性

能。

線程最直接的理解就是“輕量級(jí)進(jìn)程”,它是一個(gè)基本

的CPU執(zhí)行單元,也是程序執(zhí)行流的最小單元,由線程ID、

程序計(jì)數(shù)器、寄存器集合和堆棧組成。線程是進(jìn)程中的一個(gè)

實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。進(jìn)程只作為除

CPU以外的系統(tǒng)資源的分配單元,線程則作為處理器的分配

單元。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。

(2)線程和進(jìn)程的比較

1)調(diào)度:在引入線程的操作系統(tǒng)中,線程是獨(dú)立調(diào)度的

基本單位,進(jìn)程是資源擁有的基本單位。

2)擁有資源:進(jìn)程是擁有資源的基本單位,而線程不擁

有系統(tǒng)資源,單線程可以防偽其隸屬進(jìn)程的系統(tǒng)資源。

3)并發(fā)性:在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可

以并發(fā)執(zhí)行,線程之間也可以并發(fā)執(zhí)行,從而是操作

系統(tǒng)具有更好的并發(fā)性,大大提高了系統(tǒng)的吞吐量。

4)系統(tǒng)開銷:線程開銷極小。

5)地址空間和其他資源:進(jìn)程的地址空間之間相互獨(dú)立,

同一進(jìn)程的各線程間共享進(jìn)程的資源,進(jìn)程內(nèi)的線程

對進(jìn)程外的其他進(jìn)程不可見。

6)通信方面:進(jìn)程間通信需要進(jìn)程同步和互斥手段的輔

助,以保證數(shù)據(jù)的一致性,而線程間可以直接讀寫進(jìn)

程數(shù)據(jù)段來進(jìn)行通信。

(3)線程的屬性

在多線程操作系統(tǒng)中,八仙城作為獨(dú)立運(yùn)行的基本單位。

此時(shí)的進(jìn)程已不是一個(gè)基本可執(zhí)行的實(shí)體。線程的主要屬性

如下:

1)線程是一個(gè)輕型實(shí)體,它不擁有系統(tǒng)資源,但每個(gè)線

程都應(yīng)有一個(gè)唯一的標(biāo)識(shí)符和一個(gè)線程控制塊,線程

控制塊記錄了線程執(zhí)行的寄存器和棧等現(xiàn)場情況。

2)不同的線程可以執(zhí)行相同的程序,即同一個(gè)服務(wù)程序

被不同的用戶調(diào)用時(shí),操作系統(tǒng)為他們創(chuàng)建不同的線

程。

3)統(tǒng)一進(jìn)程中的各個(gè)線程共享該進(jìn)程所擁有的系統(tǒng)資源。

4)線城市處理器的獨(dú)立調(diào)度單位,多個(gè)線程是可以并發(fā)

執(zhí)行的。

5)一個(gè)縣城被創(chuàng)建后便開始了它的生命周期,直至終止,

線程在生命周期內(nèi)會(huì)經(jīng)歷等待態(tài)、就緒態(tài)和運(yùn)行態(tài)等

各種狀態(tài)變化。

(4)線程的實(shí)現(xiàn)方法

線程的實(shí)現(xiàn)可以分為兩類:用戶級(jí)線程和內(nèi)核級(jí)線程。

(5)多線程模型

有些系統(tǒng)同時(shí)支持用戶線程和內(nèi)核線程,由此產(chǎn)生了不

同的多線程模型,即實(shí)現(xiàn)用戶級(jí)線程和內(nèi)核級(jí)線程的連接方

式。

1)多對一模型。多對一模型將多個(gè)用戶級(jí)線程映射到一

個(gè)內(nèi)核級(jí)線程。線程管理在用戶空間完成。

2)一對一模型。

3)多對多模型。

特點(diǎn):克服了多對一模型的并發(fā)度不高的缺點(diǎn),又克服

了一對一模型中一個(gè)用戶進(jìn)程占用太多內(nèi)核級(jí)線程,開銷太

大的缺點(diǎn)。

2.2、線程的調(diào)度

1、調(diào)度的概念

(1)調(diào)度的基本概念

在多道程序系統(tǒng)中,進(jìn)程的數(shù)量往往多于處理器的個(gè)數(shù),

進(jìn)程爭用處理器的情況在所難免。處理器調(diào)度是對處理器進(jìn)

行分配,就是從就緒隊(duì)列中,按照一定的算法,選擇一個(gè)進(jìn)

程并將處理器分配給他運(yùn)行,以實(shí)現(xiàn)進(jìn)程的并發(fā)執(zhí)行。

處理器調(diào)度是多道程序操作系統(tǒng)的基礎(chǔ),它是操作系統(tǒng)

設(shè)計(jì)的核心問題。

(2)調(diào)度的層次

一個(gè)作業(yè)從提交開始知道完成,往往要經(jīng)歷一下三級(jí)調(diào)

度:

1)作業(yè)調(diào)度。作業(yè)調(diào)度又稱高級(jí)調(diào)度:其主要任務(wù)是

按一定的原則從外存上處于后備狀態(tài)的作業(yè)中挑選一個(gè)或

多個(gè)作業(yè),給他們分配內(nèi)存、輸入輸出設(shè)備等必要的資源。

并建立相應(yīng)的進(jìn)程,以使他們獲得競爭處理器的權(quán)利。

多道批處理系統(tǒng)中大多配有作業(yè)調(diào)度,而其它系統(tǒng)中通

常不需要配置作業(yè)調(diào)度。作業(yè)調(diào)度的執(zhí)行頻率較低,通常為

幾分鐘一次。

2)中級(jí)調(diào)度。中級(jí)調(diào)度又稱內(nèi)存調(diào)度。引入中級(jí)調(diào)度

視為了提高內(nèi)存利用率和系統(tǒng)吞吐率,為此,應(yīng)使那些暫時(shí)

不能運(yùn)行的進(jìn)程調(diào)至外存等待,把此時(shí)的進(jìn)程狀態(tài)稱為掛起

狀態(tài)。當(dāng)他們已具備運(yùn)行條件且內(nèi)存有稍有空閑時(shí),由中級(jí)

調(diào)度來決定,吧外存上那些已具備運(yùn)行條件的就緒進(jìn)程,在

重新調(diào)入內(nèi)存,并修改其狀態(tài)為就緒狀態(tài),掛在就緒隊(duì)列上

等待。

3)進(jìn)程調(diào)度。進(jìn)程調(diào)度又稱為低級(jí)調(diào)度,其主要任務(wù)

是按照某種方法和策略從就緒隊(duì)列中選取一個(gè)進(jìn)程,將處理

器分配給它。進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一中調(diào)度,在

一般操作系統(tǒng)中都不需配置進(jìn)程調(diào)度。進(jìn)程調(diào)度的頻率很高,

一般幾十毫秒一次。

(3)三級(jí)調(diào)度的聯(lián)系

作業(yè)調(diào)度從外存的后備隊(duì)列中選擇一批作業(yè)進(jìn)入內(nèi)存,

為他們建立進(jìn)程。這些進(jìn)程被送入就緒隊(duì)列。進(jìn)程調(diào)度從就

緒隊(duì)列中選出一個(gè)進(jìn)程,并把其狀態(tài)改為運(yùn)行狀態(tài),把CPU

分配給它。中級(jí)調(diào)度是位于高級(jí)調(diào)度和低級(jí)調(diào)度之間的一種

調(diào)度。為了提高內(nèi)存的利用率,系統(tǒng)將那些暫時(shí)不能運(yùn)行的

進(jìn)程掛起來。當(dāng)內(nèi)存空間寬松式,通過中級(jí)調(diào)度選擇具備運(yùn)

行條件的進(jìn)程,將其喚醒。

2、調(diào)度的時(shí)機(jī)、切換與過程

進(jìn)程調(diào)度和切換程序是操作系統(tǒng)內(nèi)核程序。當(dāng)請求調(diào)度

的事件發(fā)生后,才可能會(huì)運(yùn)行進(jìn)程調(diào)度程序,當(dāng)調(diào)度了新的

就緒進(jìn)程后,才會(huì)去進(jìn)行進(jìn)程間的切換。

現(xiàn)在操作系統(tǒng)中,不能進(jìn)行進(jìn)程的調(diào)度與切換的情況有

以下幾種:

1)在處理中斷的過程中:中斷處理過程復(fù)雜,在

實(shí)現(xiàn)上很難做到,而且中斷處理時(shí)系統(tǒng)工作的

一部分,邏輯上不屬于某一進(jìn)城,不應(yīng)被剝奪

處理器資源。

2)進(jìn)程在操作系統(tǒng)內(nèi)核程序臨界區(qū)中:進(jìn)入臨界

區(qū)后,需要獨(dú)占式的訪問共享數(shù)據(jù),理論上必

須加鎖,以防止其他并行程序的進(jìn)入,在解鎖

前不應(yīng)該切換到其他進(jìn)程,以加快該共享數(shù)據(jù)

的釋放。

3)其他需要完全屏蔽中斷的原子操作過程中:如

加鎖、解鎖、中斷現(xiàn)場保護(hù)、恢復(fù)等等源自操

作。在原子過程中,連中斷都要屏蔽,更不應(yīng)

該進(jìn)行進(jìn)程的切換。

如果在上述過程中發(fā)生了引起調(diào)度的條件,并不能馬上

進(jìn)行調(diào)度和切換,應(yīng)置系統(tǒng)請求調(diào)度標(biāo)志,知道上述過程結(jié)

束后才能進(jìn)行相應(yīng)的調(diào)度和切換。

應(yīng)該進(jìn)行進(jìn)程的調(diào)度與切換的情況有:

1)當(dāng)發(fā)生引起調(diào)度條件且當(dāng)前進(jìn)程無法繼續(xù)運(yùn)行下去時(shí),

可以馬上進(jìn)行調(diào)度與切換。如果操作系統(tǒng)只在這種情

況下進(jìn)行進(jìn)程調(diào)度,就是非剝奪調(diào)度。

2)當(dāng)中斷處理結(jié)束后或自陷處理結(jié)束后,返回被中斷進(jìn)

程的用戶態(tài)程序執(zhí)行現(xiàn)場前,若置上請求調(diào)度標(biāo)志,

即可馬上進(jìn)行進(jìn)程調(diào)度與切換。如果操作系統(tǒng)支持這

種情況下的運(yùn)行調(diào)度程序,就實(shí)現(xiàn)了剝奪方式的調(diào)度。

進(jìn)程切換往往在調(diào)度完成后立刻發(fā)生,它要求保存源進(jìn)

程當(dāng)前切換點(diǎn)的縣城信息,恢復(fù)被調(diào)度進(jìn)程的現(xiàn)場信息?,F(xiàn)

場切換時(shí),操作系統(tǒng)內(nèi)核將遠(yuǎn)近程的現(xiàn)場信息推入到當(dāng)前進(jìn)

程的內(nèi)核對戰(zhàn)來保存他們,并更新堆棧指針。內(nèi)核完成從新

進(jìn)程的內(nèi)核棧中裝入新進(jìn)程的縣城信息、更新當(dāng)前運(yùn)行進(jìn)程

空間指針、重設(shè)PC寄存器等相關(guān)工作之后,開始運(yùn)行新的

進(jìn)程。

3、進(jìn)程調(diào)度方式

所謂進(jìn)程調(diào)度方式是指當(dāng)某一個(gè)進(jìn)程正在處理器上執(zhí)

行時(shí),若有某個(gè)更為重要或緊迫的進(jìn)程需要處理,既有優(yōu)先

權(quán)更高的進(jìn)程進(jìn)入就緒隊(duì)列,此時(shí)應(yīng)如何分配處理器。通常

有一下兩種進(jìn)程調(diào)度方式:

(1)非剝奪調(diào)度方式

非剝奪調(diào)度方式又稱為非搶占調(diào)度方式,是指當(dāng)一個(gè)進(jìn)

程正在處理器上執(zhí)行時(shí),即使有某個(gè)更為重要或緊迫的進(jìn)程

進(jìn)入就緒狀態(tài),仍然讓正在執(zhí)行的進(jìn)程繼續(xù)執(zhí)行,知道該進(jìn)

程完成或發(fā)生某種時(shí)間而進(jìn)入阻塞狀態(tài)時(shí),才把處理器分配

給更為重要或緊迫的進(jìn)程。

(2)剝奪調(diào)度方式

剝奪調(diào)度方式又稱為搶占方式,是指當(dāng)一個(gè)進(jìn)程正在處

理器上執(zhí)行時(shí),若有某個(gè)更為重要或緊迫的進(jìn)程需要使用處

理器,則立即暫停正在執(zhí)行的進(jìn)程,將處理器分配給這個(gè)更

為重要或緊迫的進(jìn)程。

“剝奪”不是一種任意性行為,必須遵循一定的原貝I:

優(yōu)先權(quán)原則,短進(jìn)程優(yōu)先原則和時(shí)間片原則。

4、調(diào)度的基本準(zhǔn)則

不同的調(diào)度算法具有不同的特性,在選擇調(diào)度算法時(shí),

必須考慮算法所具有的特性。為了比較處理器調(diào)度算法的性

能,人們提出很多評價(jià)準(zhǔn)則,下面介紹主要的幾種準(zhǔn)則:

(1)CPU利用率

CPU是計(jì)算機(jī)系統(tǒng)中最重要的資源之一,所以應(yīng)盡可能

使CPU保持在忙狀態(tài),是這一資源利用率最高。

(2)系統(tǒng)吞吐量

系統(tǒng)吞吐量表示單位時(shí)間內(nèi)CPU完成作業(yè)的數(shù)量。長作

業(yè)需要消耗較長的處理器時(shí)間,因此會(huì)降低系統(tǒng)的吞吐量。

而對于短作業(yè),他們所需要消耗的處理器時(shí)間端,因此能提

高系統(tǒng)的吞吐量。調(diào)度算法和方式的不同,也會(huì)對系統(tǒng)的吞

吐量產(chǎn)生較大的影響。

(3)周轉(zhuǎn)時(shí)間

周轉(zhuǎn)時(shí)間是指從作業(yè)提交到作業(yè)完成所經(jīng)歷的時(shí)間,包

括作業(yè)等待、在就緒隊(duì)列中排隊(duì)、在處理器上運(yùn)行以及進(jìn)行

輸入輸出操作所花費(fèi)的時(shí)間的總和。

作業(yè)的周轉(zhuǎn)時(shí)間二作業(yè)完成時(shí)間-作業(yè)提交時(shí)間

(4)等待時(shí)間

等待時(shí)間是指進(jìn)程處于等處理器狀態(tài)時(shí)間之和,等待時(shí)

間越長,用戶滿意度越低。處理器調(diào)度算法實(shí)際上并不影響

作業(yè)執(zhí)行或輸入輸出操作時(shí)間,只影響作業(yè)在就緒隊(duì)列中等

待所花的時(shí)間。因此,衡量一個(gè)調(diào)度算法優(yōu)劣常常只需簡單

地考察等待時(shí)間。

(5)響應(yīng)時(shí)間

響應(yīng)時(shí)間是指從用戶提交請求到系統(tǒng)首次產(chǎn)生響應(yīng)所

有的時(shí)間。在交互式系統(tǒng)中,周轉(zhuǎn)時(shí)間不可能是最好的評測

準(zhǔn)則,一般采用響應(yīng)時(shí)間作為衡量調(diào)度算法的重要準(zhǔn)則之一。

從用戶的角度來看,調(diào)度策略應(yīng)盡量降低響應(yīng)時(shí)間,使響應(yīng)

時(shí)間處在用戶能夠接受的范圍之內(nèi)。

5、典型的調(diào)度算法

通常系統(tǒng)的設(shè)計(jì)目標(biāo)不同,所采用的調(diào)度算法也不同。

在操作系統(tǒng)中存在多種調(diào)度算法,其中有的調(diào)度算法適用于

作業(yè)調(diào)度,有的調(diào)度算法適用于進(jìn)程調(diào)度,有的調(diào)度算法兩

者都適用。下面介紹幾種常用的調(diào)度算法:

(1)FIFS先來先服務(wù)調(diào)度算法

特點(diǎn):算法簡單,但是效率低;有利于長作業(yè),不利于

短作業(yè);有利于CPU繁忙型作業(yè)而不利于10繁忙型作業(yè)。

(2)SJF短作業(yè)優(yōu)先調(diào)度算法

短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法是指對短作業(yè)禍端進(jìn)程優(yōu)

先調(diào)度的算法。短作業(yè)優(yōu)先調(diào)度算法是從后備隊(duì)列中選擇一

個(gè)或若干個(gè)估計(jì)運(yùn)算時(shí)間最短的作業(yè),將他們呢掉入內(nèi)存運(yùn)

行。

SJF調(diào)度算法的缺點(diǎn):

1)該算法對長作業(yè)不理。

2)該算法完全未考慮作業(yè)的緊迫程度

3)由于作業(yè)的長短只根據(jù)用戶所提供的估計(jì)執(zhí)行時(shí)

間而定的,而用戶又可能會(huì)有意或無意的縮短其作

業(yè)的估計(jì)運(yùn)行時(shí)間,致使該算法不一定能真正做到

算作業(yè)優(yōu)先調(diào)度。

4)注意:SJF調(diào)度算法的平均等待時(shí)間、平均周轉(zhuǎn)時(shí)

間最少。

(3)優(yōu)先級(jí)調(diào)度算法

(4)高響應(yīng)比優(yōu)先調(diào)度算法

高響應(yīng)比優(yōu)先調(diào)度算法主要用于作業(yè)調(diào)度。同時(shí)考慮從

每個(gè)作業(yè)的等待時(shí)間和估計(jì)需要運(yùn)行的時(shí)間。

(5)時(shí)間片輪轉(zhuǎn)調(diào)度算法

時(shí)間片輪轉(zhuǎn)調(diào)度算法主要適用于分時(shí)系統(tǒng)。

(6)多級(jí)反饋隊(duì)列調(diào)度算法

多級(jí)反饋隊(duì)列調(diào)度算法主要是時(shí)間片輪轉(zhuǎn)調(diào)度算法和

優(yōu)先級(jí)調(diào)度算法的綜合和發(fā)展。通過動(dòng)態(tài)調(diào)整進(jìn)程優(yōu)先級(jí)和

時(shí)間片大小,多級(jí)反饋隊(duì)列調(diào)度算法可以兼顧多方面的系統(tǒng)

目標(biāo)。

2.3、進(jìn)程同步

1、進(jìn)程同步的基本概念

多道程序環(huán)境下,進(jìn)程是并發(fā)執(zhí)行的,不同進(jìn)程間存在

著不同的相互制約關(guān)系。為了協(xié)調(diào)進(jìn)程之間的相互制約關(guān)系,

達(dá)到資源共享和進(jìn)程協(xié)作,避免進(jìn)程之間的沖突,引入了進(jìn)

程同步的概念。

(1)臨界資源

多個(gè)進(jìn)程可以共享系統(tǒng)中的各種資源,但其中許多資源

一次只能為一個(gè)進(jìn)程所使用,我們把一次只允許一個(gè)進(jìn)程使

用的資源成為臨界資源。

對臨界資源的訪問,必須互斥的進(jìn)行。每個(gè)進(jìn)程中,訪

問臨界資源的那段代碼成為臨界區(qū)。

為了保證臨界資源的正確使用,可以把臨界資源的訪問

過程分為四個(gè)部分。

1)進(jìn)入?yún)^(qū)。為了進(jìn)入臨界區(qū)使用臨界資源,在進(jìn)入去要

檢查可否進(jìn)入臨界區(qū)。

2)臨界區(qū)。進(jìn)程中訪問臨界資源的那段代碼。

3)退出區(qū)。將正在訪問臨界區(qū)的標(biāo)志清除。

4)剩余區(qū)。代碼中的其余部分。

do{

entrysection;

criticalsection;

exitsection;

remaindersection;

}while(true)

(2)同步

同步已成為直接制約關(guān)系,它是為完成某種任務(wù)而建立

的兩個(gè)或多個(gè)進(jìn)程。這些進(jìn)程因?yàn)樾枰谀承┪恢蒙蠀f(xié)調(diào)他

們的工作次序而等待、傳遞信息所產(chǎn)生的制約關(guān)系。進(jìn)程間

的直接制約關(guān)系就是它們之間的相互合作。

(3)互斥

互斥亦稱間接制約關(guān)系。當(dāng)一個(gè)進(jìn)程進(jìn)入臨界區(qū)使用臨

界資源時(shí),另一個(gè)進(jìn)程必須等待,當(dāng)占用臨界資源的進(jìn)程退

出臨界區(qū)后,另一個(gè)進(jìn)程才允許去訪問此臨界資源。

2、實(shí)現(xiàn)臨界區(qū)互斥的基本方法

(1)軟件實(shí)現(xiàn)方法

在進(jìn)入?yún)^(qū)設(shè)置和檢查一些標(biāo)志來表名是否有進(jìn)程在臨

界區(qū)中,如果已有進(jìn)程在臨界區(qū),則在進(jìn)入?yún)^(qū)通過循環(huán)檢查

進(jìn)行等待,進(jìn)程離開臨界區(qū)后則在退出區(qū)修改標(biāo)志。

(3)硬件實(shí)現(xiàn)方法

本節(jié)對硬件實(shí)現(xiàn)的具體理解對后面的信號(hào)量學(xué)習(xí)很有

幫助。計(jì)算機(jī)提供了特殊的硬件指令,允許對一個(gè)字中的內(nèi)

容進(jìn)行檢測和修正,活著是對兩個(gè)字的內(nèi)容進(jìn)行交換等。通

過硬件支持實(shí)現(xiàn)臨界段問題的低級(jí)方法或稱為元方法。

1)中斷屏蔽方法。當(dāng)一個(gè)進(jìn)程正在使用處理器執(zhí)行他的

臨界區(qū)代碼時(shí),要防止去其他進(jìn)程在進(jìn)入其臨界區(qū)訪

問的最簡單方法就是禁止一切中斷的發(fā)生,或稱之為

屏蔽中斷、關(guān)中斷。因?yàn)镃PU只有在發(fā)生中斷時(shí)引起

進(jìn)程的調(diào)度和切換,這樣屏蔽中斷就能保證當(dāng)前運(yùn)行

進(jìn)程將臨界區(qū)代碼順利的執(zhí)行完,然后再開中斷。

這種方法限制了處理器交替執(zhí)行程序的能力,因此執(zhí)行

的效率將會(huì)明顯降低。對內(nèi)核來說,當(dāng)它執(zhí)行更新變量或列

表的幾條指令期間關(guān)中斷是很方便的,但將關(guān)中斷的權(quán)力交

給用戶則很不明智,若一個(gè)進(jìn)程關(guān)中斷之后不再打開終端,

則系統(tǒng)可能會(huì)因此終止。

2)硬件愛你指令法。

TestAndSet指令:這條指令是原子操作。及執(zhí)行該代碼

是不允許被中斷。其功能是獨(dú)處制定標(biāo)志后把該標(biāo)志設(shè)置為

真。

BooleanTestAndSet(Boolean*lock){

Booleanold;

01d=*lock;

*lock=true;

Returnold;

Lock為每個(gè)臨界資源設(shè)置的共享布爾變量,true表示

正在被占用,false表示沒被占用。

WhileTestAndSet(&lock);

進(jìn)程的臨界區(qū)代碼;

Lock=false;

進(jìn)程剩余代碼;

Swap指令:該指令的功能是交換兩個(gè)字的內(nèi)容。

Swap(Boolean*a,Boolean*b){

Booleantemp;

Temp=*a;

*a二*b;

*b=temp;

}

以上對TestAndSet和Swap指令僅僅是功能實(shí)現(xiàn),并非

軟件實(shí)現(xiàn)定義,事實(shí)上他們是由硬件邏輯直接實(shí)現(xiàn)的,不會(huì)

被中斷。

硬件方法優(yōu)點(diǎn):使用與任意數(shù)目的進(jìn)程,不管是單處理

器還是多處理器:簡單、容易驗(yàn)證其正確性??梢灾С诌M(jìn)程

內(nèi)有多個(gè)臨界區(qū),只需要為每個(gè)臨界區(qū)設(shè)立一個(gè)布爾變量。

硬件方法的缺點(diǎn):進(jìn)程等待進(jìn)入臨界區(qū)時(shí)要耗費(fèi)處理器

時(shí)間,不能實(shí)現(xiàn)讓權(quán)等待。從等待進(jìn)程中隨機(jī)選擇一個(gè)進(jìn)入

臨界區(qū),有的進(jìn)程可能一直選不上,從而導(dǎo)致“饑餓”現(xiàn)象。

3、信號(hào)量

信號(hào)量機(jī)構(gòu)是一種功能較強(qiáng)的機(jī)制,可用來解決互斥與

同步的問題,它只能被兩個(gè)標(biāo)準(zhǔn)原語wait和signal來訪問,

也可以記作p操作和v操作。

原語是指完成某種功能且不被分割不被中斷執(zhí)行的操

作序列,有時(shí)也成為原子操作,通??捎糜布韺?shí)現(xiàn)完成某

種功能的不可分割執(zhí)行特性。

(1)整形信號(hào)量

整形信號(hào)量被定義為一個(gè)用于表示資源個(gè)數(shù)的整型量So

(2)記錄性信號(hào)量

記錄性信號(hào)量是不存在“忙等”現(xiàn)象的進(jìn)程同步機(jī)制。

除了需要一個(gè)用于代表資源數(shù)的整型變量value外,再增加

一個(gè)進(jìn)程鏈表L,用于連接所有等待該資源的進(jìn)程,記錄型

信號(hào)量是由于采用了記錄型的數(shù)據(jù)結(jié)構(gòu)得名。記錄型信號(hào)量

可描述為:

Typedefstruct{

Intvalue;

Structprocess*L;

}semaphore;

Wait操作,表示進(jìn)程請求一個(gè)該類資源,當(dāng)S.valueVO

時(shí),表示該類資源已分配完畢,因此進(jìn)程調(diào)用block原語,

進(jìn)行自我阻塞,放棄處理器,并插入到S.L中,可見該機(jī)制

遵循了“讓權(quán)等待”的原則。Signal操作,表示進(jìn)程釋放

一個(gè)資源,使系統(tǒng)中可供分配資源數(shù)增加一,故S.value++o

若加1后仍是S.value〈二0,則表示S.L中仍有等待該資源的

進(jìn)程被阻塞,故還應(yīng)調(diào)用wakeup原語,將S.L中的第一個(gè)

等待進(jìn)程喚醒。

(3)利用信號(hào)量實(shí)現(xiàn)同步

信號(hào)量機(jī)構(gòu)能用于解決進(jìn)程間各種同步問題。

(4)利用信號(hào)量實(shí)現(xiàn)互斥

信號(hào)量機(jī)構(gòu)能很方便的解決進(jìn)程互斥問題。

互斥的實(shí)現(xiàn)是不同進(jìn)程對同一信號(hào)量進(jìn)行P操作和V操

作,一個(gè)進(jìn)程在成功地對信號(hào)量執(zhí)行了P操作后進(jìn)入臨界區(qū),

并在退出臨界區(qū)后,由該進(jìn)程本身對該信號(hào)量執(zhí)行V操作,

表示當(dāng)前沒有進(jìn)城進(jìn)入臨界區(qū),可讓其他進(jìn)程進(jìn)入。

(5)利用信號(hào)量實(shí)現(xiàn)前驅(qū)關(guān)系

信號(hào)量也可以用來描述程序之間或者語句之間的前驅(qū)

關(guān)系。

(6)分析進(jìn)程同步或互斥問題的方法步驟

1)關(guān)系分析。找出問題中的進(jìn)程數(shù),并且分析它們之間

的同步和互斥關(guān)系。同步、互斥、前去關(guān)系直接按照

上面例子中的經(jīng)典犯事改寫。

2)整體思路。找出解決問題的關(guān)鍵點(diǎn),并且根據(jù)做過的

題目找出解決的思路。根據(jù)進(jìn)程的操作流程確定P操

作、V操作的大致順序。

3)設(shè)置信號(hào)量。根據(jù)上面兩步,設(shè)置需要的信號(hào)量,確

定初值,完善整理。

4、管程

(1)管程的定義

管程是一組數(shù)據(jù)以及定義在這組數(shù)據(jù)之上的對這組數(shù)

據(jù)的操作組成的軟件模塊,這組操作能初始化并改變管程中

的數(shù)據(jù)和同步進(jìn)程。

(2)管程的組成

1)局部與管程的共享結(jié)構(gòu)數(shù)據(jù)說明

2)對該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一組過程

3)對局部于管程的共享數(shù)據(jù)設(shè)置初始值的語句

(3)管程的基本特性

1)局部于管程的數(shù)據(jù)只能被局部于管程內(nèi)的過程訪問。

2)一個(gè)進(jìn)程只有通過調(diào)用管程內(nèi)的過程才能進(jìn)入廣成

訪問的共享數(shù)據(jù)。

3)每次僅允許一個(gè)進(jìn)程在管程內(nèi)執(zhí)行某個(gè)內(nèi)部過程。

由于管程是一個(gè)語言成分,所以管程的互斥訪問完全由

編譯程序在編譯時(shí)自動(dòng)添加,無需程序員關(guān)注,而且保證正

確。

5、經(jīng)典同步問題

(1)生產(chǎn)者-消賽者問題

問題描述:一組生產(chǎn)者進(jìn)程和一組消賽者進(jìn)程共享一個(gè)

初始為空、大小為n的緩沖區(qū),只有緩沖區(qū)沒滿時(shí),生產(chǎn)者

才能把消息放入到緩沖區(qū),否則必須等待;只有緩沖區(qū)不為

空時(shí),消費(fèi)者才能從中取出消息,否則必須等待。由于緩沖

區(qū)是臨界資源,它只允許一個(gè)生產(chǎn)者放入消息,或一個(gè)消費(fèi)

者從中取出消息。

問題分析:

1)關(guān)系分析。生產(chǎn)者和消費(fèi)者對緩沖區(qū)互斥訪問是互

斥關(guān)系,同時(shí)生產(chǎn)者和消費(fèi)者又是一個(gè)相互協(xié)作的關(guān)系,只

有生產(chǎn)者生產(chǎn)之后,消費(fèi)者才能消賽,他們也是同步關(guān)系。

2)整理思路。這里比較簡單,只有生產(chǎn)者和消賽者兩

個(gè)進(jìn)程,正好是這兩個(gè)進(jìn)程存在著互斥關(guān)系和同步關(guān)系。那

么需要解決的是胡吃喝同步PV操作的位置。

3)信號(hào)量的設(shè)置。信號(hào)量mutex作為互斥信號(hào)量,它

用于控制互斥訪問緩沖池,互斥信號(hào)量初始為1;信號(hào)量full

用于記錄當(dāng)前緩沖池中“滿”緩沖區(qū)數(shù),初值為0.信號(hào)量

empty用于記錄當(dāng)前緩沖池中空緩沖區(qū),初值為n。

下面再看一個(gè)較為復(fù)雜的生產(chǎn)者-消費(fèi)者問題:

問題描述:桌子上有一只盤子,每次孩子能向其中放入

一個(gè)水果。爸爸專向盤子中放入蘋果,媽媽專向盤子中放入

橘子,女兒專等吃盤子中的蘋果,兒子專等吃盤子中的橘子。

只有盤子為空時(shí),爸爸或媽媽就可向盤子中放一只水果2;

僅當(dāng)盤子中有自己需要的水果時(shí),兒子或女兒可以從盤子中

取出。

問題分析:

1)關(guān)系分析。這里的關(guān)系略微復(fù)雜一些,首先由每次

只能向其中放入一只水果可知爸爸和媽媽是互斥關(guān)系。爸爸

和女兒、媽媽和兒子是同步關(guān)系,而且這兩對進(jìn)城必須連起

來,兒子和女兒之間沒有互斥和同步關(guān)系,因?yàn)樗麄兪沁x擇

條件執(zhí)行,不可能并發(fā)。

2)整理思路。這里有4個(gè)進(jìn)程,實(shí)際上可以抽象為兩

個(gè)生產(chǎn)者和兩個(gè)消費(fèi)者被連接到大小為1的緩沖區(qū)上。

3)信號(hào)量設(shè)置。首先設(shè)置信號(hào)量plate為互斥信號(hào)量,

表示是否允許想盤子放水果,初值為1,表示允許放入,且

只允許放一只。信號(hào)量apple表示盤子里是否有蘋果,初值

為0,表示盤子中無2蘋果;信號(hào)量orange表示盤子中是否

有橘子,初始量為0,表示盤子中無橘子。

(2)讀者-寫著問題

問題描述:有讀者和寫者兩組并發(fā)進(jìn)程,共享一個(gè)文件,

當(dāng)兩個(gè)以上的讀進(jìn)程同事訪問共享數(shù)據(jù)時(shí)不會(huì)產(chǎn)生副作用,

但若某個(gè)寫進(jìn)程和其他進(jìn)程(讀進(jìn)程或?qū)戇M(jìn)程)同時(shí)訪問共

享數(shù)據(jù)時(shí)則可能導(dǎo)致數(shù)據(jù)不一致的錯(cuò)誤。因此要求:1)允

許多個(gè)讀者同時(shí)對文件執(zhí)行讀操作;2)只允許一個(gè)寫者往

文件中寫信息;3)任一寫者在完成寫操作之前不允許其他

讀者或?qū)懻吖ぷ鳎?)寫者執(zhí)行完寫操作前,應(yīng)讓已有的讀

者或?qū)懻呷客顺觥?/p>

問題分析:

1)關(guān)系分析。由題目分析讀者和寫者是互斥的,寫者

和寫者也是互斥的,而讀者和讀者不存在互斥關(guān)系。

2)整理思路。兩個(gè)進(jìn)程,即讀者和寫者。寫者比較簡

凡,它和任何進(jìn)程互斥,用互斥信號(hào)量p操作、v操作即可

解決。讀者的問題比較復(fù)雜,它必須實(shí)現(xiàn)與寫著互斥的關(guān)系,

還要實(shí)現(xiàn)和其他讀者同步的關(guān)系。因此,緊急簡單的一對PV

操作時(shí)無法解決的。那么在這里用到了一個(gè)計(jì)數(shù)器,用它來

判斷當(dāng)前是否有讀者讀文件。當(dāng)有讀者的時(shí)候,寫著是無法

寫文件的,此時(shí)讀者會(huì)一直占用文件,當(dāng)沒有讀者的時(shí)候,

寫者才可以寫文件。同事這里不同讀者對計(jì)數(shù)器的訪問也是

互斥的。

3)信號(hào)量的設(shè)置。首先設(shè)置信號(hào)量count為計(jì)數(shù)器,

用來記錄當(dāng)前讀者數(shù)量,初值為0;設(shè)置mutex為互斥信號(hào)

量,用于保護(hù)更新count變量時(shí)的互斥;設(shè)置互斥信號(hào)量rw

用于保證讀者和寫者的互斥訪問。

(3)哲學(xué)家進(jìn)餐問題

問題描述:一張圓桌上坐著五個(gè)哲學(xué)家,每兩個(gè)哲學(xué)家

之間的桌子上擺著一根筷子,桌子的中間是一碗米飯。哲學(xué)

家們傾注畢生精力用于思考和進(jìn)餐,哲學(xué)家在思考是,并不

影響其他人。只有當(dāng)哲學(xué)家饑餓的時(shí)候,才視圖拿起左右兩

根筷子。如果筷子已經(jīng)在他人手上,則需等待。饑餓的哲學(xué)

家只有同時(shí)拿到了兩根筷子才可以開始進(jìn)餐,當(dāng)今參悟你比

猴,放下筷子繼續(xù)思考。

問題分析:

1)關(guān)系分析。五個(gè)哲學(xué)家與左右鄰居對其中的筷子的

訪問是互斥關(guān)系。

2)整理思路。顯然這五個(gè)進(jìn)程,要解決的問題有兩個(gè):

一個(gè)是讓他們同時(shí)拿起兩個(gè)筷子;而是對每個(gè)哲學(xué)家的動(dòng)作

執(zhí)行規(guī)則,避免饑餓或者死鎖現(xiàn)象發(fā)生。

3)信號(hào)量設(shè)置。定義互斥信號(hào)組chopsticks[5]

={1,1,1,1,1}用于對五個(gè)筷子的互斥訪問。

對哲學(xué)家按順序0~4編號(hào),哲學(xué)家i左邊的筷子編號(hào)為

i,哲學(xué)家右邊的筷子編號(hào)為(i+1)%5O

(4)吸煙者問題

問題描述:假設(shè)一個(gè)系統(tǒng)有三個(gè)吸煙者進(jìn)程和一個(gè)供應(yīng)

者進(jìn)程。每個(gè)抽煙者不停的卷煙并抽調(diào)他,但是要卷起并抽

掉一支煙,抽煙者必須要有三種材料:煙草、紙和膠水。三

個(gè)抽煙者中,第一個(gè)有煙草,第二個(gè)有紙,第三個(gè)有膠水。

供應(yīng)者進(jìn)程無線地提供提供三種材料。

供應(yīng)者每次將兩種材料放到桌子上,擁有剩下那種材料

的抽煙者卷一根煙并抽掉它,并給供應(yīng)者一個(gè)信號(hào)告訴完成

了,供應(yīng)者就會(huì)放另外兩種材料在桌子上,這種過程一直重

復(fù)。

問題分析:

1)關(guān)系分析。供應(yīng)者與三個(gè)抽煙者分別是同步關(guān)系。

由于供應(yīng)者無法同時(shí)滿足兩個(gè)或兩個(gè)以上的抽煙者,三個(gè)抽

煙者對抽煙這個(gè)動(dòng)作是互斥關(guān)系。

2)整理思路。顯然這里有四個(gè)進(jìn)程。供應(yīng)者作為生產(chǎn)

者向三個(gè)抽煙者提供材料。

3)信號(hào)量設(shè)置。信號(hào)量offerl、offer2>offer3分別

表示煙草和紙組合的資源、煙草和膠水組合的資源、紙和膠

水組合的資源。信號(hào)量finish用于互斥進(jìn)行抽煙動(dòng)作。

2.4、死鎖

1、死鎖的概念

(1)死鎖的定義

在多道程序系統(tǒng)中,由于多個(gè)進(jìn)程的并發(fā)執(zhí)行,改善了

系統(tǒng)資源的利用率并提高了系統(tǒng)的處理能力。然而,多個(gè)進(jìn)

程的并發(fā)執(zhí)行也帶來了新的問題一一死鎖。所謂死鎖是指多

個(gè)進(jìn)程因競爭資源而造成的一種僵局,若無外力作用,這些

進(jìn)程都將無法向前推進(jìn)。

(2)死鎖產(chǎn)生的原因

1)系統(tǒng)資源的競爭

通常系統(tǒng)中擁有的不可剝奪資源,其數(shù)量不足一滿足多

個(gè)進(jìn)程運(yùn)行的需要,似的進(jìn)程在運(yùn)行過程中會(huì)因爭奪資源而

陷入僵局。只有對不可剝奪資源的競爭才可能產(chǎn)生死鎖,對

可剝奪資源的競爭是不會(huì)引起死鎖的。

2)進(jìn)程推進(jìn)順序非法

進(jìn)程在運(yùn)行過程中,請求和釋放資源的順序不當(dāng),同樣

會(huì)導(dǎo)致死鎖。

信號(hào)量使用不當(dāng)也會(huì)造成死鎖。進(jìn)程間相互等待對方發(fā)

來的消息,結(jié)果也會(huì)造成某些進(jìn)程間無法繼續(xù)向前推進(jìn)。

3)死鎖產(chǎn)生的必要條件

產(chǎn)生死鎖必須同時(shí)滿足以下四個(gè)條件,只要其中任一個(gè)

條件不成立,死鎖就不會(huì)發(fā)生。

互斥條件:進(jìn)程要求對所分配的資源進(jìn)行排他性控制,

即在一段時(shí)間內(nèi)某資源僅為一個(gè)進(jìn)程所占用。此時(shí)若有其他

進(jìn)程請求該資源,則請求進(jìn)程只能等待。

不剝奪條件:進(jìn)程所獲得的資源在未使用完畢之前,不

能被其他進(jìn)程強(qiáng)行奪走,即只能由獲得該資源的進(jìn)程自己來

釋放。

請求和保持條件:進(jìn)程已經(jīng)保持了至少一個(gè)資源,但又

提出了新的資源請求,而該資源已被其他進(jìn)程占有,此時(shí)請

求進(jìn)程被阻塞,但對自己已獲得的資源保持不放。

循環(huán)等待條件:存在一種進(jìn)程資源的循環(huán)等待鏈,連中

每一個(gè)進(jìn)程已獲得的資源同時(shí)被鏈中下一個(gè)進(jìn)程所請求。

2、死鎖的處理策略

為使系統(tǒng)不發(fā)生死鎖,必須設(shè)法破壞產(chǎn)生死鎖的四個(gè)必

要條件之一,或者允許死鎖產(chǎn)生,但當(dāng)死鎖發(fā)生時(shí)能檢測出

思索,并有能力實(shí)現(xiàn)恢復(fù)。

死鎖處理策略有:

(1)死鎖預(yù)防。

破壞死鎖的四個(gè)必要條件之一。

(2)死鎖避免。

用某種方式防止系統(tǒng)進(jìn)入不安全狀態(tài)。

(3)死鎖的檢測及解除

允許進(jìn)程在運(yùn)行過程中發(fā)生死鎖,通過系統(tǒng)的檢測機(jī)構(gòu)

及時(shí)地檢測出死鎖的發(fā)生,然后采取某種措施解除死鎖。

3、死鎖預(yù)防

防止死鎖發(fā)生只需要破壞死鎖產(chǎn)生的四個(gè)必要條件之

一即可。

(1)破壞互斥條件

允許系統(tǒng)資源都能共享使用。(不太可行)

(2)破壞不剝奪條件

當(dāng)一個(gè)以保持了某些不可剝奪資源的進(jìn)程,請求新的資

源時(shí)得不到滿足,它必須釋放已經(jīng)保持的所有資源,待以后

需要時(shí)再重新申請。這種方法常用于狀態(tài)易于保存和恢復(fù)的

資源,如CPU的寄存器及內(nèi)存資源,一般不能用于打印機(jī)之

類的資源。

(3)破壞請求和保持條件

采用預(yù)先靜態(tài)分配方法,即進(jìn)程在運(yùn)行前一次申請完

他所需要的全部資源,在他的資源未滿足前,不把它投入運(yùn)

行。一旦運(yùn)行后,這些資源就一直歸它所有,也不再提出其

他資源請求,這樣就可以保證系統(tǒng)不會(huì)發(fā)生死鎖。

這種方式實(shí)現(xiàn)簡單,但缺點(diǎn)也顯而易見,系統(tǒng)資源被嚴(yán)

重浪費(fèi),其中有些資源可能僅在運(yùn)行初期或末期才使用,甚

至根本不使用。而且還會(huì)導(dǎo)致“饑餓”現(xiàn)象,當(dāng)由于個(gè)別資

源長期被個(gè)別資源占用時(shí),將只是等待該資源的進(jìn)程遲遲不

能開始運(yùn)行。

(4)破壞循環(huán)等待條件

為了破壞循環(huán)等待條件,可采用順序資源分配法。首先

給系統(tǒng)中的資源編號(hào),規(guī)定每個(gè)進(jìn)程,必須按編號(hào)遞增的順

序請求資源,同類資源一次申請完。也就是說,只要進(jìn)程提

出申請分配資源,則該進(jìn)程在以后的資源申請中,只能申請

編號(hào)比之前大的資源。

4、死鎖避免

避免思索同樣是屬于事先預(yù)防的策略,但并不是事先采

取某種限制措施破壞死鎖的必須條件,而是在資源動(dòng)態(tài)分配

過程中,防止系統(tǒng)進(jìn)入不安全狀態(tài),以避免死鎖發(fā)生。這種

方法所施加的限制條件較弱,可以獲得較好的系統(tǒng)性能。

(1)系統(tǒng)安全狀態(tài)

避免死鎖的方法中,允許進(jìn)程動(dòng)態(tài)的申請資源,但系統(tǒng)

在進(jìn)行資源分配前,應(yīng)先計(jì)算此次資源分配的安全性。若此

次分配不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則將資源你分配給進(jìn)

程,否則,讓進(jìn)程等待。

所謂安全狀態(tài),是指系統(tǒng)能按某種進(jìn)程推進(jìn)順序,為每

個(gè)進(jìn)程分配其所需的資源,直至滿足每個(gè)進(jìn)程對資源的最大

需求,是每個(gè)進(jìn)程都可以順序的完成。此時(shí)成PlP2P3oo為

安全序列,如果系統(tǒng)無法找到一個(gè)安全序列,則稱系統(tǒng)處于

不安全狀態(tài)。

并非所有的

溫馨提示

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

評論

0/150

提交評論