3.信號(hào)量與P,V操作
用順序程序設(shè)計(jì)技術(shù)處理同步與互斥是十分困難的,為此引入信號(hào)量概念:信號(hào)量是一種特殊的變量,它的表現(xiàn)形式是一個(gè)整型變量及相應(yīng)的隊(duì)列:除了設(shè)置初值外,對(duì)信號(hào)量只能施加特殊的操作:P操作和V操作,P操作和V操作都是不可分割的原子運(yùn)行,也稱為原語(有時(shí)分別記為down()和up()或wait()和signal())。P操作的作用是將信號(hào)量S的值減1,若S的值成負(fù)數(shù),則調(diào)用P操作的進(jìn)程暫停執(zhí)行,直到另一個(gè)進(jìn)程對(duì)同一信號(hào)量作V操作。V操作的作用是將信號(hào)量S的值加1,若S的值小于等于0,從相應(yīng)隊(duì)列(關(guān)于S的隊(duì)列)中選一個(gè)進(jìn)程,喚醒它。
(1)互斥為了保護(hù)共享資源(如公共變量等),使它們不被多個(gè)進(jìn)程同時(shí)訪問,就要阻止這些進(jìn)程同時(shí)執(zhí)行訪問這些資源的代碼段,這些代碼段稱為臨界區(qū),這些資源稱為臨界資源。對(duì)臨界資源訪問的互斥要求可視作執(zhí)行臨界區(qū)的互斥要求。利用信號(hào)量可以方便地實(shí)現(xiàn)互斥臨界區(qū)的管理要求。例如,令信號(hào)量mutex的初值為1,于是臨界區(qū)就改寫成下列形式的代碼段。P(mutex);臨界區(qū)V(mutex);由于mutex初值為1,P、V是原子操作,確實(shí)可以實(shí)現(xiàn)互斥。
(2)同步最簡(jiǎn)單的同步形式是:進(jìn)程A在另一個(gè)進(jìn)程B已到達(dá)點(diǎn)L2以前,不應(yīng)前進(jìn)到超過點(diǎn)L1。對(duì)此,可以令信號(hào)量proceed初值為0,實(shí)現(xiàn)這種同步的程序形式是: 進(jìn)程A L1:P(proceed); … …進(jìn)程B L2:V(proceed); … …更復(fù)雜一點(diǎn)的同步問題是單緩沖的生產(chǎn)者、消費(fèi)者問題。
4.高級(jí)通信原語
P、V操作是用來協(xié)調(diào)進(jìn)程間關(guān)系的,編程較困難而且沒有信息交換,故常稱為低級(jí)通信原語。此外,P、V操作必須有共享存儲(chǔ)器,而高級(jí)通信原語則提供兩種通信方式:有緩沖區(qū)的通信和無緩沖區(qū)的通信。
(1)有緩沖區(qū)的通信方式中,有原語:
Write(Buffer_Name,Variable) 等緩沖區(qū)空再存入
Read(Buffer_Name,Variable) 等緩沖區(qū)滿再取出
(2)無緩沖區(qū)的通信,又稱為消息傳遞,有原語:
Send(Who,Message) 發(fā)送消息給指定進(jìn)程或一組進(jìn)程
Receive(Who,Message) 從約定進(jìn)程接收消息有的系統(tǒng)還提供帶標(biāo)記的發(fā)送,有Send(Who,Message,Tag)用Tag可指定發(fā)送進(jìn)程是否要等待接收進(jìn)程取到內(nèi)容以后再繼續(xù)運(yùn)行。一般接收者總是要等待消息到達(dá)后才繼續(xù)運(yùn)行。
三、系統(tǒng)核心
操作系統(tǒng)核心位于計(jì)算機(jī)硬件之上,核心的目的是提供一種進(jìn)程賴以生存的環(huán)境,其主要任務(wù)是接收中斷并作基本處理,在進(jìn)程之間切換處理器,處理進(jìn)程之間通信。
1.基本硬件機(jī)構(gòu)
(1)中斷機(jī)構(gòu)
為了使輸入輸出活動(dòng)與處理器活動(dòng)并行進(jìn)行,當(dāng)一臺(tái)外部設(shè)備的傳輸操作結(jié)束時(shí),應(yīng)能中斷正在運(yùn)行的進(jìn)程,由中斷處理程序處理。
(2)特權(quán)指令為使各并發(fā)進(jìn)程不相互干擾,系統(tǒng)的部分指令集應(yīng)保留僅供操作系統(tǒng)使用,這些指令稱為特權(quán)指令,如允許與禁止中斷,執(zhí)行輸入輸出操作等。為了區(qū)分什么時(shí)候可以使用特權(quán)指令,什么時(shí)候不可以使用,系統(tǒng)至少具有兩種工作狀態(tài),它們分別稱為系統(tǒng)態(tài)和用戶態(tài),又稱為管態(tài)和目態(tài)。特權(quán)指令只能在管態(tài)中運(yùn)行。
(3)主存保護(hù)多道程序系統(tǒng)中,必須對(duì)各進(jìn)程使用的主存加以保護(hù),以防止其他進(jìn)程進(jìn)行未經(jīng)許可的操作。保護(hù)機(jī)制應(yīng)包含在主存尋址硬件中。
(4)時(shí)鐘硬件的時(shí)鐘以固定的時(shí)間間隔產(chǎn)生中斷信號(hào),這對(duì)于實(shí)現(xiàn)處理器的調(diào)度以及實(shí)現(xiàn)與時(shí)間有關(guān)的任務(wù)是不可缺少的
2.進(jìn)程
(1)進(jìn)程進(jìn)程是一個(gè)程序關(guān)于某個(gè)數(shù)據(jù)集的一次運(yùn)行。也就是說,進(jìn)程是運(yùn)行中的程序,是程序的一次運(yùn)行活動(dòng)。相對(duì)于程序,進(jìn)程是一個(gè)動(dòng)態(tài)的概念,而程序是靜態(tài)的概念,是指令的集合。因此,進(jìn)程具有動(dòng)態(tài)性和并發(fā)性。在操作系統(tǒng)中進(jìn)程是進(jìn)行系統(tǒng)資源分配、調(diào)度和管理的最小單位,注意,現(xiàn)代操作系統(tǒng)中還引入了線程,它是處理器分配的最小單位。
(2)進(jìn)程的狀態(tài)及其轉(zhuǎn)換多道系統(tǒng)中,進(jìn)程的運(yùn)行是走走停停的,它在處理器上交替運(yùn)行,使它的運(yùn)行狀態(tài)不斷變化,最基本的狀態(tài)有3種:運(yùn)行、就緒和阻塞。?運(yùn)行(running):正占用處理器。?就緒(ready):只要獲得處理器即可運(yùn)行。?阻塞(blocked):正等待某個(gè)事件(I/O完成)的發(fā)生。
(3)進(jìn)程控制塊進(jìn)程是一個(gè)動(dòng)態(tài)的概念,如何表示一個(gè)進(jìn)程?在操作系統(tǒng)中,引入數(shù)據(jù)結(jié)構(gòu)———進(jìn)程控制塊(簡(jiǎn)記為PCB)標(biāo)記進(jìn)程。PCB是進(jìn)程存在的惟一標(biāo)志,PCB描述了進(jìn)程的基本情況。從靜態(tài)的觀點(diǎn)看,進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊組成;從動(dòng)態(tài)的觀點(diǎn)看,是計(jì)算機(jī)狀態(tài)的一個(gè)有序集合。程序是進(jìn)程運(yùn)行所對(duì)應(yīng)的運(yùn)行代碼,一個(gè)進(jìn)程對(duì)應(yīng)于一個(gè)程序;有的程序可以同時(shí)對(duì)應(yīng)于多個(gè)進(jìn)程,這個(gè)程序的代碼在運(yùn)行過程中不會(huì)被改變,常稱為純碼程序或可重入程序,他們是可共享的程序。進(jìn)程控制塊保存進(jìn)程狀態(tài)、進(jìn)程性質(zhì)(如優(yōu)先程序)、與進(jìn)程有關(guān)的控制信息(如參數(shù)、信號(hào)量、消息等)、相應(yīng)隊(duì)列和現(xiàn)場(chǎng)保護(hù)區(qū)域等。進(jìn)程控制塊隨著進(jìn)程的建立而產(chǎn)生,隨著進(jìn)程的完成而撤消。PCB是操作系統(tǒng)核心中最主要的數(shù)據(jù)結(jié)構(gòu)之一,它既是進(jìn)程存在的標(biāo)志和調(diào)度的依據(jù),又是進(jìn)程可以被打斷并能恢復(fù)運(yùn)行的基礎(chǔ)。核心通過PCB管理進(jìn)程,一般PCB是常駐內(nèi)存的,尤其是調(diào)度信息必須常駐內(nèi)存。
3.進(jìn)程管理
在操作系統(tǒng)中有許多進(jìn)程,它們對(duì)應(yīng)著不同的或相同的程序,競(jìng)爭(zhēng)地使用著系統(tǒng)的資源。進(jìn)程管理涉及到進(jìn)程控制、隊(duì)列管理、進(jìn)程調(diào)度等。
(1)進(jìn)程控制
進(jìn)程的生命過程是從它被創(chuàng)建開始,直到任務(wù)終止而撤消,其間會(huì)經(jīng)歷各種狀態(tài)的轉(zhuǎn)換,它們都是在操作系統(tǒng)控制下完成的,為此,操作系統(tǒng)提供了對(duì)進(jìn)程的基本操作,也稱為原語。這些原語包括:創(chuàng)建原語(create),阻塞原語(block),終止原語(terminal),優(yōu)先級(jí)原語(chang_prioriˉty),調(diào)度原語(schedule)。它們可以被系統(tǒng)本身調(diào)用,有的也以軟中斷形式(系統(tǒng)調(diào)用)供用戶進(jìn)程調(diào)用。他們都涉及現(xiàn)場(chǎng)隊(duì)列管理等。當(dāng)一個(gè)進(jìn)程創(chuàng)建一個(gè)新的進(jìn)程時(shí),創(chuàng)建者稱為父進(jìn)程,被創(chuàng)建者稱為子進(jìn)程。通常操作系統(tǒng)中設(shè)置一個(gè)運(yùn)行隊(duì)列,一個(gè)就緒隊(duì)列和若干個(gè)阻塞隊(duì)列。在單處理器系統(tǒng)中運(yùn)行隊(duì)列只有一個(gè)成員。一般阻塞隊(duì)列的個(gè)數(shù)取決于等待事件(原因)的個(gè)數(shù)。調(diào)度原語是按照確定的算法,從就緒隊(duì)列中選擇一個(gè)就緒進(jìn)程,將處理器分配給它,修改這個(gè)進(jìn)程的PCB內(nèi)容。在操作系統(tǒng)中進(jìn)程生命的簡(jiǎn)單活動(dòng)是這樣的:一個(gè)進(jìn)程可以由系統(tǒng)創(chuàng)建(如用戶運(yùn)行一程序),也可以由用戶進(jìn)程用創(chuàng)建原語建立。新建立的進(jìn)程開始時(shí)處于就緒狀態(tài)。該進(jìn)程的運(yùn)行也會(huì)因等待某個(gè)事件(如I/O完成)的發(fā)生而處于阻塞狀態(tài),轉(zhuǎn)入相應(yīng)的阻塞隊(duì)列。一旦相應(yīng)事件發(fā)生后,將被喚醒原語叫醒而回到就緒隊(duì)列。重復(fù)上述過程直至運(yùn)行完畢。經(jīng)終止原語作一些記錄工作并撤消這個(gè)進(jìn)程。
(2)進(jìn)程調(diào)度
進(jìn)程調(diào)度即處理器調(diào)度,它的主要功能是確定在什么時(shí)候分派處理器,并確定分給哪一個(gè)進(jìn)程。在分時(shí)系統(tǒng)中,一般有一個(gè)確定的時(shí)間單位(稱為時(shí)間片),當(dāng)一進(jìn)程用完一個(gè)時(shí)間單位時(shí),就發(fā)生進(jìn)程調(diào)度(又稱上下文轉(zhuǎn)換),即讓正在運(yùn)行的進(jìn)程改變狀態(tài)并轉(zhuǎn)入就緒隊(duì)列尾,再由調(diào)度原語將就緒隊(duì)列的首進(jìn)程取出,投入運(yùn)行。進(jìn)程調(diào)度的方法基本上分為兩類:剝奪調(diào)度與非剝奪調(diào)度。所謂非剝奪調(diào)度是指一旦某個(gè)作業(yè)或進(jìn)程占有了處理器,這個(gè)進(jìn)程就占用處理器直到主動(dòng)放棄處理器為止,相反,如果其他進(jìn)程可獲得處理器的使用權(quán)則是剝奪調(diào)度。在有些進(jìn)程(如高優(yōu)先級(jí)進(jìn)程)需要快速服務(wù)的系統(tǒng)中,剝奪調(diào)度是非常有用的。例如,在實(shí)時(shí)系統(tǒng)中丟失一個(gè)中斷的后果將是災(zāi)難性的。交互式系統(tǒng)中,為保證用戶可接受的響應(yīng)時(shí)間,剝奪調(diào)度也十分重要。在非剝奪系統(tǒng)中,短的作業(yè)常常等待長(zhǎng)的作業(yè),但所有進(jìn)程受到的服務(wù)是公平的,響應(yīng)時(shí)間是可以預(yù)測(cè)的。對(duì)就緒隊(duì)列的處理體現(xiàn)了調(diào)度策略,常用的是按優(yōu)先級(jí)處理。有兩種確定優(yōu)先級(jí)的方法,即靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)。靜態(tài)是指進(jìn)程的優(yōu)先級(jí)在進(jìn)程開始運(yùn)行前確定,運(yùn)行過程中不變,而動(dòng)態(tài)優(yōu)先則可以在進(jìn)程運(yùn)行過程中改變。進(jìn)程調(diào)度的算法是服務(wù)于系統(tǒng)目標(biāo)的策略,對(duì)于不同的系統(tǒng)與系統(tǒng)目標(biāo),常采用不同的調(diào)度算法,如:?先來先服務(wù)(FCFS):又稱先進(jìn)先出(FIFO),就緒隊(duì)列按先來后到原則排隊(duì)。?優(yōu)先數(shù)調(diào)度:優(yōu)先數(shù)反映了進(jìn)程優(yōu)先級(jí),就緒隊(duì)列按優(yōu)先數(shù)排隊(duì)。?輪轉(zhuǎn)法(round robin):就緒隊(duì)列按FCFS方式排隊(duì)。每個(gè)運(yùn)行進(jìn)程一次占有處理器時(shí)間都不超過規(guī)定的時(shí)間單位(時(shí)間片)。若超過,即調(diào)用調(diào)度原語而形成就緒進(jìn)程輪流使用服務(wù)器。
希望與更多計(jì)算機(jī)等級(jí)考試的網(wǎng)友交流,請(qǐng)進(jìn)入計(jì)算機(jī)等級(jí)考試論壇
更多信息請(qǐng)?jiān)L問:考試吧計(jì)算機(jī)等級(jí)考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |