版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版工程清包合同:工程設(shè)計(jì)變更與施工方案調(diào)整
- 2024某企業(yè)與咨詢公司之間的管理咨詢服務(wù)合同
- 2025年度香菇食品產(chǎn)品線擴(kuò)展與市場拓展合同3篇
- 二零二五版智慧交通系統(tǒng)開發(fā)與技術(shù)支持協(xié)議2篇
- 二零二五版二手房買賣合同公證與節(jié)能環(huán)保改造服務(wù)協(xié)議2篇
- 2025年度跨國企業(yè)集團(tuán)財(cái)務(wù)合并報(bào)表編制合同3篇
- 2024年銷售代理協(xié)議(意向)3篇
- 個(gè)性化活動(dòng)策劃方案協(xié)議2024規(guī)格版A版
- 2024版地暖安裝工程承包合同書
- 2024版企業(yè)業(yè)務(wù)外包人員協(xié)議模板版B版
- 前列腺增生藥物治療
- 人工智能知識(shí)圖譜(歸納導(dǎo)圖)
- 滴滴補(bǔ)貼方案
- 民宿建筑設(shè)計(jì)方案
- 干部基本信息審核認(rèn)定表
- 2023年11月外交學(xué)院(中國外交培訓(xùn)學(xué)院)2024年度公開招聘24名工作人員筆試歷年高頻考點(diǎn)-難、易錯(cuò)點(diǎn)薈萃附答案帶詳解
- 春節(jié)行車安全常識(shí)普及
- 電機(jī)維護(hù)保養(yǎng)專題培訓(xùn)課件
- 汽車租賃行業(yè)利潤分析
- 春節(jié)拜年的由來習(xí)俗來歷故事
- 2021火災(zāi)高危單位消防安全評估導(dǎo)則
評論
0/150
提交評論