版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)原理及應(yīng)用(Linux)1.1操作系統(tǒng)的地位電腦系統(tǒng)是分層次的,最低層是未配置任何軟體的硬體裸機(jī),硬體之上是軟體,軟體又分為若干層次,最低層是操作系統(tǒng)。操作系統(tǒng)是覆蓋在裸機(jī)之上的第一層軟體,它直接控制、管理各種硬體資源。所以操作系統(tǒng)是整個(gè)電腦系統(tǒng)的控制管理中心。21.2操作系統(tǒng)的功能操作系統(tǒng)是電腦系統(tǒng)中具有一定功能的軟體系統(tǒng)。操作系統(tǒng)的目標(biāo)是方便用戶使用電腦系統(tǒng)和提高電腦系統(tǒng)資源利用率。31.2.1提供人機(jī)介面1.作業(yè)控制級介面作業(yè):用戶上機(jī)所作的一系列順序相關(guān)的工作。一道作業(yè)由若干順序相關(guān)的作業(yè)步構(gòu)成。例如,我們上機(jī)編程要經(jīng)歷如下步驟:4
5編輯編譯連接運(yùn)行根源程式目標(biāo)程式可執(zhí)行程式以上作業(yè)的工作流程要由用戶按自己的需求進(jìn)行控制,因此要提供給用戶控制作業(yè)工作流程的手段,這是由操作系統(tǒng)提供的,稱為作業(yè)級介面。作業(yè)級介面由一組用戶可直接使用控制作業(yè)運(yùn)行的命令和命令解釋器構(gòu)成。該介面又可進(jìn)一步分為聯(lián)機(jī)用戶介面和脫機(jī)用戶介面。6(1)聯(lián)機(jī)用戶介面由一組鍵盤字元命令(或滑鼠命令)和命令解釋器組成,使用戶可以聯(lián)機(jī)交互方式使用電腦。用戶每次鍵入一個(gè)合法命令(解釋器能執(zhí)行的命令),啟動(dòng)一個(gè)作業(yè)步;一個(gè)作業(yè)步運(yùn)行完畢後,再鍵入下一個(gè)命令名,啟動(dòng)下一個(gè)作業(yè)步。在一個(gè)作業(yè)步結(jié)束後,若發(fā)現(xiàn)錯(cuò)誤,可以由用戶修正錯(cuò)誤,然後重新啟動(dòng)該作業(yè)步。用戶可根據(jù)作業(yè)運(yùn)行情況隨時(shí)進(jìn)行作業(yè)步的調(diào)整。7(2)脫機(jī)用戶介面操作命令的形式為作業(yè)控制語言,用戶以脫機(jī)批處理方式使用電腦。用戶對作業(yè)流程的控制意圖是利用作業(yè)控制語言書寫成一份作業(yè)說明書來表達(dá)的。上機(jī)時(shí),用戶將作業(yè)控制說明書交給系統(tǒng),系統(tǒng)逐條解釋執(zhí)行說明書中的命令。在這種方式下,用戶一旦提交了作業(yè),作業(yè)流程就由操作系統(tǒng)根據(jù)作業(yè)控制說明書自動(dòng)控制,用戶無法干預(yù)該作業(yè)的運(yùn)行。因此,用戶必須事先設(shè)計(jì)好作業(yè)流程,還要預(yù)測作業(yè)運(yùn)行過程中可能出現(xiàn)的錯(cuò)誤,並給出發(fā)生錯(cuò)誤時(shí)的處理方法。82.程式級介面操作系統(tǒng)提供的程式級介面由一組系統(tǒng)功能調(diào)用命令以及完成這些命令的程式模組組成。為方便用戶編程,提高編程效率,規(guī)範(fàn)編程,操作系統(tǒng)提供了完成某些通用功能的程式提供用戶在開發(fā)應(yīng)用程式時(shí)調(diào)用。不同的操作系統(tǒng)提供了不同的系統(tǒng)功能調(diào)用以及調(diào)用方式。如DOS的系統(tǒng)功能調(diào)用主要是進(jìn)行硬體驅(qū)動(dòng),以軟中斷INT21H的方式提供。9Windows中的系統(tǒng)功能調(diào)用要比DOS豐富,且層次要高,不只局限於硬體驅(qū)動(dòng),以用戶可在編程語言中使用的應(yīng)用編程介面函數(shù)的方式提供,稱為API——ApplicationProgrammingInterface。使用Windows的API函數(shù),可以提高編程效率,並規(guī)範(fàn)Windows環(huán)境下的編程,如可開發(fā)具有統(tǒng)一風(fēng)格的應(yīng)用程式窗口介面,這會(huì)使得軟體用戶能很快熟悉該軟體的窗口介面而不必重新學(xué)習(xí)。101.2.2管理電腦資源電腦系統(tǒng)中的資源包括硬體資源和軟體資源。硬體資源有:處理機(jī)、記憶體、外部設(shè)備;軟體資源有:程式和數(shù)據(jù)。111.處理機(jī)管理處理機(jī)的任務(wù)是運(yùn)行程式,我們把程式在某個(gè)數(shù)據(jù)對象上的一次運(yùn)行過程稱為進(jìn)程,處理機(jī)管理又稱為進(jìn)程管理。在單處理機(jī)系統(tǒng)中,程式有兩種運(yùn)行方式:單道程式順序執(zhí)行,多道程序併發(fā)執(zhí)行。12單道程式順序執(zhí)行:要執(zhí)行的多個(gè)程式按一定次序依次執(zhí)行,一個(gè)程式運(yùn)行完畢才能運(yùn)行下一個(gè)程式,即在一個(gè)程式運(yùn)行期間不插入運(yùn)行其他程式。這種運(yùn)行方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單,不需要在多個(gè)進(jìn)程之間進(jìn)行轉(zhuǎn)換;缺點(diǎn)是資源利用率低。多道程序併發(fā)執(zhí)行:在內(nèi)存中同時(shí)存放多道程序,按一定策略調(diào)度多道程序交叉運(yùn)行,形成“微觀上串行、宏觀上並行”的情況。這使得處理機(jī)和設(shè)備可以並行工作,當(dāng)某個(gè)進(jìn)程在進(jìn)行輸入輸出操作時(shí),可以同時(shí)有另一個(gè)進(jìn)程在處理機(jī)上進(jìn)行計(jì)算。
132.存儲(chǔ)管理電腦系統(tǒng)採用了馮·諾依曼提出的存儲(chǔ)程式原理,即把要運(yùn)行的程式先一次性存放在記憶體中,然後由處理機(jī)自動(dòng)從記憶體中依次取出程式指令運(yùn)行,處理機(jī)的運(yùn)行過程就是不斷地取指令、執(zhí)行指令循環(huán)往復(fù)的過程,每次取一條指令,執(zhí)行一條指令。則記憶體是電腦系統(tǒng)中的重要資源與處理機(jī)一起稱為電腦系統(tǒng)中的主機(jī)。因此,程式的運(yùn)行機(jī)構(gòu)不只是處理機(jī),而是由處理機(jī)和記憶體構(gòu)成的主機(jī)。14在多道程序環(huán)境中,要在內(nèi)存中同時(shí)存放多道程序,則必須對內(nèi)存進(jìn)行合理管理以保證程式的順利運(yùn)行,並提高記憶體的利用率。操作系統(tǒng)提供如下存儲(chǔ)管理功能:(1)記憶體分配(2)地址轉(zhuǎn)換(3)記憶體保護(hù)(4)記憶體擴(kuò)充153.設(shè)備管理設(shè)備管理的任務(wù)是:接受用戶程式提出的I/O請求,為用戶程式分配I/O設(shè)備;使CPU和I/O設(shè)備並行操作,提高CPU和I/O設(shè)備的利用率;提高I/O速度;方便用戶程式使用I/O設(shè)備。為完成以上任務(wù),操作系統(tǒng)的設(shè)備管理子系統(tǒng)應(yīng)該具有設(shè)備分配、緩衝管理、設(shè)備驅(qū)動(dòng)、設(shè)備無關(guān)性等功能。
16設(shè)備無關(guān)性又稱設(shè)備獨(dú)立性。即用戶編寫的應(yīng)用程式與實(shí)際使用的物理設(shè)備無關(guān)。用戶編寫的應(yīng)用程式中不直接指定使用哪臺(tái)具體的物理設(shè)備,而是使用操作系統(tǒng)提供的邏輯設(shè)備,然後由操作系統(tǒng)把用戶程式中使用的邏輯設(shè)備映射到具體的物理設(shè)備,實(shí)施具體的I/O操作。這樣做的一個(gè)明顯好處是用戶應(yīng)用進(jìn)程的運(yùn)行不取決於某臺(tái)具體物理設(shè)備的狀態(tài),而由操作系統(tǒng)為其分配一臺(tái)合適的設(shè)備完成I/O操作。這樣會(huì)避免出現(xiàn)有設(shè)備可用但進(jìn)程卻無法運(yùn)行的情況。174.檔管理電腦系統(tǒng)中的軟體資源(程式和數(shù)據(jù)的集合)不是一次性用品,用了一次後就再也不用了,而是要反復(fù)利用的,因此要永久保存(相對於記憶體的暫時(shí)存儲(chǔ)而言)起來,如銀行中的存貸款數(shù)據(jù)、學(xué)校的學(xué)籍管理軟體和學(xué)籍?dāng)?shù)據(jù)等等。軟體資源以檔的形式存放在外部存儲(chǔ)介質(zhì)中,供用戶反復(fù)使用。18操作系統(tǒng)中對檔進(jìn)行管理的子系統(tǒng)稱為檔系統(tǒng),檔系統(tǒng)的任務(wù)是:為用戶提供一種簡便的、統(tǒng)一的存取和管理檔的方法,對用戶而言,按名存取是一種簡便的存取檔的手段;實(shí)現(xiàn)檔的共用;維護(hù)檔的秘密和安全。19檔管理具體有如下功能:(1)檔存儲(chǔ)空間的管理(2)目錄管理(3)檔操作(4)檔的存取許可權(quán)控制根據(jù)以上所述操作系統(tǒng)的功能,我們可以給操作系統(tǒng)下一個(gè)描述性的定義:操作系統(tǒng)是一個(gè)軟體系統(tǒng),它控制和管理電腦系統(tǒng)內(nèi)各種硬體和軟體資源,提供用戶與電腦系統(tǒng)之間的介面。201.3操作系統(tǒng)的發(fā)展過程1.3.1推動(dòng)操作系統(tǒng)發(fā)展的主要?jiǎng)恿?.不斷提高電腦資源利用率的需要2.方便用戶3.器件的不斷更新?lián)Q代4.電腦體系結(jié)構(gòu)的不斷發(fā)展211.3.2無操作系統(tǒng)的電腦系統(tǒng)此時(shí),人們採用手工方式使用電腦,用戶一個(gè)挨一個(gè)地輪流使用電腦。每個(gè)用戶的工作過程大致是:先把程式紙帶(或卡片)裝到輸入機(jī)上,然後啟動(dòng)輸入機(jī)把程式和數(shù)據(jù)輸入電腦記憶體,接著利用控制臺(tái)開關(guān)啟動(dòng)程式開始執(zhí)行。計(jì)算結(jié)束,用戶取走列印出來的結(jié)果,並卸下紙帶.22在這個(gè)過程中,需要人工裝卸紙帶、人工控制程式運(yùn)行。手工操作速度相對於電腦的運(yùn)行速度而言是很慢的,因此在使用電腦完成某一工作的整個(gè)過程中,手工操作時(shí)間占了很大的比例,而電腦運(yùn)行時(shí)間所占比例較小,這就形成了明顯的人機(jī)矛盾,致使電腦資源利用率很低,從而使電腦工作效率很低。在早期電腦運(yùn)行速度較慢的時(shí)候,這種狀況還是可以容忍的。231.3.3單道批處理系統(tǒng)單道批處理系統(tǒng)在當(dāng)時(shí)稱為監(jiān)督程式,是操作系統(tǒng)的雛形。監(jiān)督程式常駐記憶體,在它的控制下,實(shí)現(xiàn)了作業(yè)的自動(dòng)過渡,從而去掉了原先的作業(yè)過渡時(shí)的手工操作。此時(shí),出現(xiàn)了組合語言、高級語言編程工具,每一種語言編譯程序(如組合語言或某種高級語言的編譯程序)、實(shí)用程式(如連接程式)都作為監(jiān)督程式的子例程,當(dāng)需要用到它們時(shí)由監(jiān)督程式進(jìn)行調(diào)用。24早期的批處理分為聯(lián)機(jī)批處理和脫機(jī)批處理兩種。1.聯(lián)機(jī)批處理操作員把一批作業(yè)裝到輸入設(shè)備上(紙帶輸入機(jī)/卡片閱讀機(jī)),然後由監(jiān)督程式控制把這批作業(yè)輸入到磁帶上,之後在監(jiān)督程式的控制下,使這批作業(yè)一個(gè)接一個(gè)的連續(xù)執(zhí)行,直至磁帶上的所有作業(yè)運(yùn)行完畢。2526輸入帶主機(jī)輸出帶輸入帶讀卡機(jī)印表機(jī)輸出帶衛(wèi)星機(jī)卡片1.3.4多道批處理系統(tǒng)為了進(jìn)一步提高資源利用率,從而最終提高系統(tǒng)吞吐量(系統(tǒng)在單位時(shí)間內(nèi)完成的總工作量),在60年代中期引入了多道程序併發(fā)執(zhí)行技術(shù),從而形成了多道批處理系統(tǒng)。多道程序併發(fā)執(zhí)行的基本思想是:在內(nèi)存中同時(shí)存放多道程序,在操作系統(tǒng)的控制下交替執(zhí)行。在多道批處理系統(tǒng)中,用戶提交的作業(yè)都先存放在外存中並排成一個(gè)佇列,稱為後備佇列,然後由作業(yè)調(diào)度程式按一定的策略從後備佇列中選擇若干作業(yè)調(diào)入記憶體,使它們併發(fā)運(yùn)行,從而共用系統(tǒng)中的各種資源,提高資源利用率,最終提高系統(tǒng)吞吐量。27多道程序併發(fā)執(zhí)行系統(tǒng)的特徵:(1)多道性(2)調(diào)度性(3)宏觀上並行,微觀上串行(4)非同步性281.3.5分時(shí)系統(tǒng)在分時(shí)系統(tǒng)中,雖然若干用戶通過各自的終端共用一臺(tái)主機(jī),但是在操作系統(tǒng)的管理下,每個(gè)用戶都感覺自己在獨(dú)佔(zhàn)一臺(tái)主機(jī)。分時(shí)系統(tǒng)採用的策略是:基於主機(jī)的高速運(yùn)行,分時(shí)為終端用戶服務(wù)。即主機(jī)按一定次序輪流為各終端用戶服務(wù),每個(gè)用戶一次僅使用主機(jī)很短的一段時(shí)間(稱為時(shí)間片,毫秒級),在分得的時(shí)間片內(nèi)若用戶沒有完成工作則暫時(shí)中斷,將處理機(jī)分配給下一個(gè)用戶。雖然在一個(gè)用戶使用主機(jī)時(shí)其他用戶處於等待狀態(tài),但是等待的時(shí)間很短,用戶感覺不到,從而每個(gè)用戶的各次請求都能得到快速回應(yīng),給每個(gè)用戶的印象是:他獨(dú)佔(zhàn)一臺(tái)電腦。29分時(shí)系統(tǒng)具有以下特徵:(1)多個(gè)用戶同時(shí)聯(lián)機(jī)操作(2)各用戶獨(dú)立(3)交互性301.3.6即時(shí)系統(tǒng)1.即時(shí)控制當(dāng)把電腦用於生產(chǎn)過程的控制,以形成以電腦為中心的控制系統(tǒng)時(shí),系統(tǒng)要求能即時(shí)採集現(xiàn)場數(shù)據(jù),並對所採集的數(shù)據(jù)進(jìn)行及時(shí)處理,進(jìn)而自動(dòng)地控制相應(yīng)的執(zhí)行機(jī)構(gòu),使某些(個(gè))參數(shù)(如溫度、壓力、方位等)能按預(yù)定的規(guī)律變化。類似地,也可將電腦用於武器的控制,如火炮自動(dòng)控制系統(tǒng)、飛機(jī)的自動(dòng)駕駛系統(tǒng),以及導(dǎo)彈的制導(dǎo)系統(tǒng)等。通常把要求進(jìn)行即時(shí)控制的系統(tǒng)稱為即時(shí)控制系統(tǒng)。312.即時(shí)資訊處理通常,我們把要求對資訊進(jìn)行即時(shí)處理的系統(tǒng),稱為即時(shí)資訊處理系統(tǒng)。該系統(tǒng)由一臺(tái)或多臺(tái)主機(jī)通過通信線路連接成百上千個(gè)遠(yuǎn)程終端,電腦接收從遠(yuǎn)程終端發(fā)來的服務(wù)請求,對數(shù)據(jù)進(jìn)行檢索和處理,並及時(shí)將結(jié)果回饋給用戶。典型的即時(shí)資訊處理系統(tǒng)有:飛機(jī)訂票系統(tǒng)、情報(bào)檢索即時(shí)系統(tǒng)的特徵:(1)及時(shí)性(2)可靠性321.3.7微機(jī)操作系統(tǒng)1.單用戶單任務(wù)操作系統(tǒng)
單用戶單任務(wù)是指,只允許一個(gè)用戶上機(jī),用戶要運(yùn)行的多個(gè)程式要按一定次序依次執(zhí)行,不能交替執(zhí)行。這是最簡單的微機(jī)操作系統(tǒng),代表性產(chǎn)品是:CP/M和MS-DOS。332.單用戶多任務(wù)操作系統(tǒng)單用戶多任務(wù)是指,只允許一個(gè)用戶上機(jī),但是可以併發(fā)執(zhí)行多道程序,從而充分利用系統(tǒng)資源,滿足用戶同時(shí)執(zhí)行多個(gè)任務(wù)的需求,如一邊打字一邊聽音樂。代表性產(chǎn)品是OS/2和Windows。343.多用戶多任務(wù)操作系統(tǒng)微機(jī)是面向個(gè)人用戶而開發(fā)的,所以一般由單個(gè)用戶使用,配置單用戶操作系統(tǒng)。但是這並不意味著微機(jī)不可由多個(gè)用戶同時(shí)聯(lián)機(jī)使用,特別是現(xiàn)在的微機(jī)與小型機(jī)的差距已經(jīng)很小,只要在微機(jī)上配置多用戶操作系統(tǒng)就可以使微機(jī)同時(shí)為多個(gè)用戶服務(wù)。具有代表性的產(chǎn)品是UNIX、LINUX。351.3.8網(wǎng)路操作系統(tǒng)為了實(shí)現(xiàn)電腦之間的數(shù)據(jù)通信和資源共用,把分佈在各處的電腦通過通信線路連接在一起,構(gòu)成一個(gè)系統(tǒng),這就是電腦網(wǎng)絡(luò)。電腦網(wǎng)絡(luò)要有一個(gè)網(wǎng)路操作系統(tǒng)對整個(gè)網(wǎng)路實(shí)施管理,並為用戶提供統(tǒng)一的、方便的網(wǎng)路介面。網(wǎng)路操作系統(tǒng)一般建立在各個(gè)主機(jī)的本地操作系統(tǒng)基礎(chǔ)之上,其功能是:實(shí)現(xiàn)網(wǎng)路通信、資源共用和保護(hù),提供網(wǎng)路服務(wù)和網(wǎng)路介面。361.3.9分佈式操作系統(tǒng)大量的實(shí)際應(yīng)用要求一個(gè)完整的一體化的系統(tǒng)。在分佈式系統(tǒng)中,有一個(gè)全局的分佈式操作系統(tǒng),它負(fù)責(zé)整個(gè)系統(tǒng)的資源分配和調(diào)度、任務(wù)劃分、資訊傳輸、控制協(xié)調(diào)等工作,並為用戶提供一個(gè)統(tǒng)一的介面。用戶通過這一介面實(shí)現(xiàn)所需的操作和使用系統(tǒng)資源,至於操作是在哪一臺(tái)電腦上資源是系統(tǒng)的事,用戶不必知道,即系統(tǒng)對用戶是透明的。371.4操作系統(tǒng)的特性併發(fā)性共用性非同步性虛擬性其中,併發(fā)性是操作系統(tǒng)的最基本的特徵。381.5操作系統(tǒng)的體系結(jié)構(gòu)
一般而言,操作系統(tǒng)有兩種結(jié)構(gòu):層次結(jié)構(gòu)、微內(nèi)核結(jié)構(gòu)。1.5.1層次結(jié)構(gòu)層次結(jié)構(gòu)操作系統(tǒng)的設(shè)計(jì)思想是:按照操作系統(tǒng)各模組的功能和相互依存關(guān)係,把系統(tǒng)中的模組分為若干層次,其中任一層(除底層模組)都建立在它下麵一層的基礎(chǔ)上,每一層僅使用其下層所提供的服務(wù)。391.5.2微內(nèi)核結(jié)構(gòu)微內(nèi)核結(jié)構(gòu)是20世紀(jì)90年代發(fā)展起來的。其基本思想是:把操作系統(tǒng)中的基本功能模組組織為微內(nèi)核,其他功能模組儘量放到核外,通過調(diào)用微內(nèi)核來實(shí)現(xiàn)。微內(nèi)核結(jié)構(gòu)是對傳統(tǒng)內(nèi)核的提煉,它有如下優(yōu)點(diǎn):1.簡化內(nèi)核代碼維護(hù)工作2.建構(gòu)靈活3.安全性高4.方便移植401.6LINUX介紹Linux現(xiàn)在是個(gè)人電腦和工作站上的UNIX類操作系統(tǒng)。按照層次結(jié)構(gòu)的觀點(diǎn),在同一種硬體平臺(tái)上面,Linux可以提供和UNIX相同的服務(wù),即相同的用戶級和程式員級介面。同時(shí),Linux絕不是簡化的UNIX。相反,Linux是強(qiáng)有力和具有創(chuàng)新意義的UNIX操作系統(tǒng)。它不僅繼承了UNIX的特徵,而且在許多方面超過了UNIX。作為UNIX類操作系統(tǒng),它具有下列基本特徵:41(1)是真正的多用戶、多任務(wù)操作系統(tǒng);(2)是符合POSIX標(biāo)準(zhǔn)的系統(tǒng);(3)提供具有內(nèi)置安全措施的分層的檔系統(tǒng);(4)提供shell命令解釋程式和編程語言;(5)提供強(qiáng)大的管理功能,包括遠(yuǎn)程管理功能;(6)具有內(nèi)核的編程介面;(7)具有圖形用戶介面;(8)具有大量有用的實(shí)用程式和通信、聯(lián)網(wǎng)工具;(9)具有面向螢?zāi)坏木幘冘涹w。422.1進(jìn)程的基本概念
2.1.1程式的順序執(zhí)行及其特徵1.程式的順序執(zhí)行
程式是人們要電腦完成的一些指令序列,是一個(gè)按嚴(yán)格次序、順序執(zhí)行的操作序列,是一個(gè)靜態(tài)的概念。我們把一個(gè)具有獨(dú)立功能的程式獨(dú)佔(zhàn)處理機(jī),直到最後結(jié)束的過程稱為程式的順序執(zhí)行。2.程式順序執(zhí)行時(shí)的特徵(1)順序性。(2)封閉性。(3)可再現(xiàn)性。432.1.2程式的併發(fā)執(zhí)行及其特徵1.併發(fā)執(zhí)行的概念
所謂程式的併發(fā)性,是指多道程序在同一時(shí)間間隔內(nèi)同時(shí)發(fā)生。程式的併發(fā)執(zhí)行可總結(jié)為:一組在邏輯上互相獨(dú)立的程式或程式段在執(zhí)行過程中,其執(zhí)行時(shí)間在客觀上互相重疊,即一個(gè)程式段的執(zhí)行尚未結(jié)束,另一個(gè)程式段的執(zhí)行已經(jīng)開始的一種執(zhí)行方式。442.程式併發(fā)執(zhí)行時(shí)的特徵(1)間斷性程式在併發(fā)執(zhí)行時(shí),由於它們共用系統(tǒng)資源,以及為完成同一項(xiàng)任務(wù)而相互合作,致使這些併發(fā)執(zhí)行的程式之間,形成了相互制約的關(guān)係。相互制約將導(dǎo)致併發(fā)程式具有“執(zhí)行——暫停——執(zhí)行”這種間斷性的活動(dòng)規(guī)律。(2)失去封閉性某程式在執(zhí)行時(shí),必然會(huì)受到其他程式的影響。(3)不可再現(xiàn)性在併發(fā)環(huán)境下,同一個(gè)程式執(zhí)行多次,執(zhí)行的過程可能不同。用程式作為描述其執(zhí)行過程以及共用資源的基本單位是不合適的。因此引入了進(jìn)程作為描述程式的執(zhí)行過程、共用資源的基本單位。452.1.3進(jìn)程的定義與特徵1.進(jìn)程的定義人們對進(jìn)程下過許多定義?,F(xiàn)列舉其中的幾種:(1)進(jìn)程是程式的一次執(zhí)行。(2)進(jìn)程是可以和別的進(jìn)程併發(fā)執(zhí)行的計(jì)算。(3)進(jìn)程就是一個(gè)程式在給定活動(dòng)空間和初始條件下,在一個(gè)處理機(jī)上的執(zhí)行過程。(4)進(jìn)程是程式在一個(gè)數(shù)據(jù)集合上的運(yùn)行過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位(5)進(jìn)程是動(dòng)態(tài)的,有生命週期的活動(dòng)。內(nèi)核可以創(chuàng)建一個(gè)進(jìn)程,最終將由內(nèi)核終止該進(jìn)程使其消亡。46進(jìn)程和程式之間的關(guān)係
進(jìn)程和程式是兩個(gè)完全不同的概念,但又有密切的聯(lián)繫。它們之間的主要區(qū)別是:(1)程式是靜態(tài)的概念,;而進(jìn)程則是程式的一次執(zhí)行過程。它是動(dòng)態(tài)的概念。(2)進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的單位,能與其它進(jìn)程併發(fā)執(zhí)行;而程式是不能作為一個(gè)獨(dú)立運(yùn)行的單位而併發(fā)執(zhí)行的。(3)程式和進(jìn)程無一一對應(yīng)的關(guān)係。(4)各個(gè)進(jìn)程在併發(fā)執(zhí)行過程中會(huì)產(chǎn)生相互制約關(guān)係,而程式本身是靜態(tài)的,不存在這種非同步特徵。472.進(jìn)程的特徵從進(jìn)程與程式的區(qū)別可以看出,進(jìn)程具有如下特徵:(1)動(dòng)態(tài)性動(dòng)態(tài)性是進(jìn)程最基本的特性。進(jìn)程由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,因得不到資源而暫停執(zhí)行,以及因撤銷而消亡。(2)併發(fā)性這是指多個(gè)進(jìn)程實(shí)體,同存於記憶體中,能在一段時(shí)間段內(nèi)同時(shí)執(zhí)行。併發(fā)性是進(jìn)程的重要特徵,同時(shí)也是操作系統(tǒng)的重要特徵。提高併發(fā)性,可以提高系統(tǒng)的效率。(3)獨(dú)立性進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)中獨(dú)立獲得資源和獨(dú)立調(diào)度的基本單位。(4)非同步性這是指進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn);或者說,進(jìn)程按非同步方式運(yùn)行。(5)結(jié)構(gòu)特徵從結(jié)構(gòu)上看,進(jìn)程實(shí)體是由程式段、數(shù)據(jù)段及進(jìn)程控制塊三部分組成,也稱這三部分為進(jìn)程映像。482.1.4進(jìn)程的基本狀態(tài)及轉(zhuǎn)換1.進(jìn)程的三個(gè)基本狀態(tài)進(jìn)程通常至少有三種基本狀態(tài):(1)就緒狀態(tài)(ready)進(jìn)程運(yùn)行所需的外部條件滿足,但因?yàn)槠渌M(jìn)程已佔(zhàn)用CPU,所以暫時(shí)不能運(yùn)行。(2)執(zhí)行狀態(tài)(running)
外部條件滿足,進(jìn)程已獲得CPU,其程式正在執(zhí)行。在單處理機(jī)系統(tǒng)中,只有一個(gè)進(jìn)程處於執(zhí)行狀態(tài)。(3)阻塞狀態(tài)(blocked)
進(jìn)程因等待某種事件發(fā)生,而暫時(shí)不能運(yùn)行的狀態(tài),稱為阻塞狀態(tài),也稱為等待狀態(tài)。系統(tǒng)中處於這種狀態(tài)的進(jìn)程可能有多個(gè),通常將它們排成一個(gè)佇列,也有的系統(tǒng)則根據(jù)阻塞原因的不同將這些進(jìn)程排成多個(gè)佇列。492.進(jìn)程狀態(tài)的轉(zhuǎn)換
對於一個(gè)系統(tǒng)中處於就緒狀態(tài)的進(jìn)程,在調(diào)度程式為之分配了處理機(jī)之後,該進(jìn)程便可執(zhí)行,相應(yīng)地,它由就緒態(tài)轉(zhuǎn)變?yōu)閳?zhí)行狀態(tài)。正在執(zhí)行的進(jìn)程也稱為當(dāng)前進(jìn)程,如果因分配給它的時(shí)間片已用完而被暫停執(zhí)行時(shí),該進(jìn)程便由執(zhí)行狀態(tài)又回到就緒狀態(tài);一個(gè)處在執(zhí)行狀態(tài)的進(jìn)程,如果因發(fā)生某事件而使進(jìn)程的執(zhí)行受阻,使之無法繼續(xù)執(zhí)行,該進(jìn)程將由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)。一個(gè)處於阻塞狀態(tài)的進(jìn)程,當(dāng)它所需的外部事件滿足,它應(yīng)由阻塞狀態(tài)變?yōu)榫途w狀態(tài)。50程執(zhí)行完成或撤銷阻塞狀態(tài)就緒狀態(tài)調(diào)度用片間時(shí)進(jìn)程創(chuàng)建進(jìn)等待某事件發(fā)生如I/O請求外部事件發(fā)生圖2-1進(jìn)程的基本狀態(tài)及轉(zhuǎn)換圖完513.引入掛起狀態(tài)時(shí)的進(jìn)程狀態(tài)
所謂掛起狀態(tài),實(shí)際上就是一種靜止的狀態(tài)。一個(gè)進(jìn)程被掛起後,不管它是否在就緒狀態(tài),系統(tǒng)都不分配給它處理機(jī)。在引入掛起狀態(tài)後,進(jìn)程之間的狀態(tài)轉(zhuǎn)換除了四種基本狀態(tài)轉(zhuǎn)換以外,又增加了以下幾種:(1)活動(dòng)就緒——靜止就緒。(2)活動(dòng)阻塞——靜止阻塞。(3)靜止就緒——活動(dòng)就緒。(4)靜止阻塞——活動(dòng)阻塞。52執(zhí)行外部事件滿足外掛起啟動(dòng)掛起掛啟動(dòng)活動(dòng)就緒靜止就緒活動(dòng)阻塞靜止阻塞調(diào)度圖2-2具有掛起狀態(tài)的進(jìn)程狀態(tài)轉(zhuǎn)換等部事件外待起部條件滿足完成或撤銷532.1.5Linux進(jìn)程的狀態(tài)
Linux系統(tǒng)的一個(gè)任務(wù)總體上有以下幾種狀態(tài):(1)運(yùn)行狀態(tài)(running)該狀態(tài)對應(yīng)state取值為TASK_RUNNING。(2)等待狀態(tài)(waiting)(3)中斷處理狀態(tài)(interruptroutine)此狀態(tài)對應(yīng)state取值TASK_RUNNING。(4)系統(tǒng)調(diào)用期間(systemcall)此狀態(tài)對應(yīng)state取值TASK_RUNNING。(5)從系統(tǒng)調(diào)用返回(returnfromsystemcall)54(6)就緒態(tài)(ready)
處於此狀態(tài)的進(jìn)程正在競爭處理機(jī),但此刻處理機(jī)正在為另一個(gè)進(jìn)程服務(wù)。此狀態(tài)對應(yīng)state取值TASK_RUNNING。
Linux系統(tǒng)內(nèi)核在進(jìn)程控制塊中用state成員描述進(jìn)程當(dāng)前的狀態(tài),並明確定義了5種進(jìn)程狀態(tài)。它們分別是:(1)TASK-RUNNING狀態(tài),Linux系統(tǒng)中的運(yùn)行狀態(tài)實(shí)際包含了上述基本狀態(tài)中的執(zhí)行和就緒兩種狀態(tài)。(2)TASK-INTERRUPTIBLE狀態(tài),可中斷的等待態(tài)。進(jìn)程正在等待某些事件。(3)TASK-UNINTERRUPTIBLE狀態(tài),等待態(tài),不可中斷。(4)TASK-ZOMBIE狀態(tài),僵死態(tài)。(5)TASK-STOPPED狀態(tài),暫停態(tài)。55
Linux任務(wù)狀態(tài)轉(zhuǎn)換圖
運(yùn)行態(tài)從系統(tǒng)調(diào)用返回中斷例程系統(tǒng)調(diào)用等待就緒調(diào)度中斷用戶態(tài)系統(tǒng)態(tài)圖2-3Linux任務(wù)狀態(tài)轉(zhuǎn)換圖2.2進(jìn)程的描述
進(jìn)程實(shí)體通常是由程式、數(shù)據(jù)集合和PCB這三部分構(gòu)成,也稱為“進(jìn)程映象”。
PCB程式部分?jǐn)?shù)據(jù)集合57圖2-4進(jìn)程的一般組成模型2.2.1進(jìn)程控制塊PCB
PCB集中反映一個(gè)進(jìn)程的動(dòng)態(tài)特徵,當(dāng)系統(tǒng)創(chuàng)建了一個(gè)新進(jìn)程時(shí),就為它建立一個(gè)PCB;當(dāng)進(jìn)程終止後,系統(tǒng)回收其PCB,該進(jìn)程在系統(tǒng)中就不存在了。所以,PCB是進(jìn)程存在的惟一標(biāo)誌。可以按照功能將PCB分成四個(gè)組成部分:進(jìn)程識別字、處理機(jī)狀態(tài)、進(jìn)程調(diào)度資訊、進(jìn)程控制資訊。581.進(jìn)程識別字進(jìn)程識別字用於惟一地標(biāo)識一個(gè)進(jìn)程。一個(gè)進(jìn)程通常有兩種識別字:(1)進(jìn)程內(nèi)部識別字。(2)進(jìn)程外部識別字。2.處理機(jī)狀態(tài):由各種寄存器中的內(nèi)容組成。3.進(jìn)程調(diào)度資訊(1)進(jìn)程狀態(tài)。(2)進(jìn)程優(yōu)先順序。(3)進(jìn)程調(diào)度所需要的其他資訊。(4)事件,或阻塞原因。4.進(jìn)程控制資訊,包括:(1)程式和數(shù)據(jù)的地址;(2)進(jìn)程同步和通信機(jī)制;(3)資源清單;(4)鏈接指針。592.2.2進(jìn)程控制塊的組織方式各進(jìn)程的PCB有如下幾種組織方式:線性方式、鏈接方式和索引方式。1.線性方式將各進(jìn)程的PCB依次放入一個(gè)表中,結(jié)構(gòu)如下圖所示。PCB1PCB2PCB3……PCBn-1PCBn60圖2-5PCB的線性組織方式2.鏈接方式
鏈接方式是經(jīng)常採用的方式。其原理是:按照進(jìn)程的不同狀態(tài)分別將其放在不同的佇列。Linux操作系統(tǒng)就是應(yīng)用這種進(jìn)程控制塊組織方式。運(yùn)行佇列指針就緒佇列指針PCBPCBPCB0阻塞佇列1指針阻塞佇列2指針PCB0PCBPCBPCB0PCBPCBPCB0圖2-6PCB鏈接佇列示意圖613.索引方式系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài)建立幾張索引表。阻塞索引表就緒索引表執(zhí)行指針就緒表指針阻塞表指針PCB1PCB2PCB3PCB4PCB5PCB6PCB7圖2-7PCB索引結(jié)構(gòu)示意圖622.2.3Linux進(jìn)程的PCBLinux系統(tǒng)中的進(jìn)程稱為任務(wù)。該系統(tǒng)的進(jìn)程控制塊PCB用一個(gè)稱為task-struct的結(jié)構(gòu)體來描述,Linux系統(tǒng)PCB包含以下資訊:1.進(jìn)程描述資訊(1)進(jìn)程標(biāo)識號(pid,processidentifier)(2)用戶和組標(biāo)識(userandgroupidentifier)(3)連接資訊(Links)2.進(jìn)程控制資訊(1)進(jìn)程當(dāng)前狀態(tài)(2)調(diào)度資訊(3)記時(shí)資訊(4)通信資訊63Linux支持典型的UNIX進(jìn)程間通信機(jī)制——信號、管道,也支持SystemⅤ通信機(jī)制——共用記憶體、信號量和消息佇列。3.進(jìn)程資源資訊記錄了與該進(jìn)程有關(guān)的記憶體的各種地址和資料、檔系統(tǒng)以及打開檔的資訊等等。4.CPU現(xiàn)場資訊642.3進(jìn)程控制
所謂進(jìn)程控制,就是系統(tǒng)使用一引起具有特定功能的程式段來創(chuàng)建、撤銷進(jìn)程以及完成進(jìn)程各狀態(tài)間的轉(zhuǎn)換,從而達(dá)到多進(jìn)程高效率併發(fā)執(zhí)行和協(xié)調(diào)、實(shí)現(xiàn)資源共用的目的。原語:把系統(tǒng)態(tài)下執(zhí)行的某些具有特定功能並且不可被中斷的程式段稱為原語。原語的特點(diǎn)是:系統(tǒng)程式、不可被中斷。系統(tǒng)在創(chuàng)建、撤銷一個(gè)進(jìn)程以及要改變進(jìn)程的狀態(tài)時(shí),都要調(diào)用相應(yīng)的程式段來完成這些功能。用於進(jìn)程控制的原語有:創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語等。652.3.1進(jìn)程的創(chuàng)建與終止1.進(jìn)程的創(chuàng)建導(dǎo)致進(jìn)程創(chuàng)建的事件有:用戶登錄、作業(yè)調(diào)度、為用戶提供服務(wù)等。創(chuàng)建原語Creat(),通過下述步驟創(chuàng)建一個(gè)進(jìn)程。(1)申請空白PCB。(2)為新進(jìn)程分配資源。(3)初始化進(jìn)程控制塊。(4)將新建進(jìn)程插入就緒態(tài)佇列。2.進(jìn)程的終止過程在進(jìn)程中,操作系統(tǒng)調(diào)用進(jìn)程終止原語,終止本進(jìn)程。過程如下:(1)根據(jù)被終止進(jìn)程的識別字,從PCB佇列中檢索出該進(jìn)程的PCB,從中讀出該進(jìn)程的狀態(tài)。。(2)若被終止進(jìn)程正處於執(zhí)行狀態(tài),應(yīng)立即終止該進(jìn)程的執(zhí)行,該進(jìn)程被終止後應(yīng)重新進(jìn)程調(diào)度。(3)檢查該進(jìn)程有無子孫進(jìn)程,若有,則應(yīng)將其所有子孫進(jìn)程終止。(4)釋放終止的進(jìn)程所佔(zhàn)有的資源,將其歸還它的父進(jìn)程或者系統(tǒng)。(5)將被終止的進(jìn)程從它的PCB佇列中移出。663.進(jìn)程阻塞與進(jìn)程喚醒
進(jìn)程狀態(tài)的轉(zhuǎn)換需要通過進(jìn)程之間的同步或通信機(jī)構(gòu)來實(shí)現(xiàn),也可直接使用“阻塞原語”和“喚醒原語”來實(shí)現(xiàn)。(1)進(jìn)程的阻塞當(dāng)一個(gè)進(jìn)程所等待的某一事件尚未發(fā)生時(shí),該進(jìn)程調(diào)用阻塞原語block()將自己阻塞,轉(zhuǎn)換為等待狀態(tài)。(2)進(jìn)程的喚醒處於等待狀態(tài)的進(jìn)程,只有當(dāng)該進(jìn)程所等待的外部事件發(fā)生時(shí),才由發(fā)生該事件的進(jìn)程調(diào)用喚醒原語wakeup()將它喚醒。672.3.2幾個(gè)相關(guān)的Linux系統(tǒng)調(diào)用
在Linux系統(tǒng)中,系統(tǒng)向用戶提供了一些對進(jìn)程進(jìn)行控制的系統(tǒng)調(diào)用。常用的有:1.fork()系統(tǒng)調(diào)用
Linux利用fork()系統(tǒng)調(diào)用創(chuàng)建一個(gè)新進(jìn)程。2.Exec系統(tǒng)調(diào)用利用exec系統(tǒng)調(diào)用執(zhí)行另一個(gè)程式。3.exit()系統(tǒng)調(diào)用父進(jìn)程在創(chuàng)建子進(jìn)程時(shí),應(yīng)在進(jìn)程的末尾寫一條exit,使子進(jìn)程自我終止。4.wait系統(tǒng)調(diào)用將調(diào)用進(jìn)程掛起,直至其子進(jìn)程因暫?;蚪K止而發(fā)來軟中斷信號為止。682.3.3進(jìn)程的阻塞與喚醒
實(shí)現(xiàn)進(jìn)程的執(zhí)行狀態(tài)到等待狀態(tài),又由等待狀態(tài)到就緒狀態(tài)轉(zhuǎn)換的兩種原語,分別為阻塞原語與喚醒原語。入口保存該進(jìn)程的CPU現(xiàn)場字置該進(jìn)程的狀態(tài)阻塞進(jìn)程PCB進(jìn)入等待佇列轉(zhuǎn)進(jìn)程調(diào)度入口從等待佇列取被喚醒進(jìn)程將被喚醒進(jìn)程置為就緒態(tài)被喚醒進(jìn)程插入就緒佇列轉(zhuǎn)進(jìn)程調(diào)度或返回圖2-8阻塞原語的實(shí)現(xiàn)圖2-9喚醒原語的實(shí)現(xiàn)692.4進(jìn)程的同步與互斥2.4.1臨界資源的概念1.臨界資源
兩個(gè)或兩個(gè)以上的進(jìn)程不能同時(shí)使用的資源為臨界資源。臨界資源可能是一些獨(dú)佔(zhàn)設(shè)備,如印表機(jī)、磁帶機(jī)等;也可能是一些共用變數(shù)、表格、鏈表等。702.臨界區(qū)
每個(gè)進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)。在臨界區(qū)前面增加一段用於進(jìn)行檢查的代碼,把這段代碼稱為進(jìn)入?yún)^(qū);相應(yīng)地,在臨界區(qū)後面再加一段用於退出臨界區(qū)的代碼,稱為退出區(qū)。進(jìn)程中除去上述進(jìn)入?yún)^(qū)和退出區(qū),其他部分的代碼,稱為剩餘區(qū)。這樣,可將一個(gè)訪問臨界資源的進(jìn)程描述如下:repeat
進(jìn)入?yún)^(qū);臨界區(qū);退出區(qū);剩餘區(qū);untilfalse;712.4.2進(jìn)程的互斥與同步1.同步與互斥的概念所謂進(jìn)程互斥,是指多個(gè)進(jìn)程不能同時(shí)使用同一個(gè)臨界資源CR。即兩個(gè)或兩個(gè)以上的進(jìn)程必須互斥地使用臨界資源,或不能同時(shí)進(jìn)入臨界區(qū)CS。兩個(gè)邏輯上完全獨(dú)立、毫無關(guān)係的進(jìn)程,由於競爭同一個(gè)資源而相互制約,就稱為進(jìn)程的互斥。所謂進(jìn)程同步,是指有協(xié)作關(guān)係的進(jìn)程之間,要不斷地調(diào)整它們之間的相對速度或執(zhí)行過程,以保證臨界資源的合理利用和進(jìn)程的順利執(zhí)行。實(shí)現(xiàn)進(jìn)程同步的機(jī)制稱為進(jìn)程同步機(jī)制。2.同步機(jī)制應(yīng)遵循的規(guī)則所有同步機(jī)制都應(yīng)遵循下列準(zhǔn)則:(1)空閒讓進(jìn)。(2)忙則等待。(3)有限等待。(4)讓權(quán)等待。722.4.3鎖機(jī)制
實(shí)現(xiàn)互斥的一種軟體是採用鎖機(jī)制,即提供一對上鎖(Lock)和開鎖(UnLock)原語,以及一個(gè)鎖變數(shù)w(或者是鎖位1個(gè)bit)。加鎖及解鎖原語可描述如下:加鎖原語:
Lockw:
L:ifw=1thengotoLElsew:=1開鎖原語:UnLockw:
w:=0;732.4.4信號量機(jī)制
申請和釋放臨界資源的兩個(gè)原語操作:wait操作和signal操作,有時(shí)也稱為P操作和V操作。信號量(Semaphore),也叫做信號燈,它是在信號量同步機(jī)制中用於實(shí)現(xiàn)進(jìn)程的同步和互斥的有效數(shù)據(jù)結(jié)構(gòu)。我們可以為每類資源設(shè)置一個(gè)信號量。它有多種類型的數(shù)據(jù)結(jié)構(gòu),即:整型信號量、記錄型信號量、AND型信號量及信號量集等。741.整型信號量
整型信號量的數(shù)值表示當(dāng)前系統(tǒng)中可用的該類臨界資源的數(shù)量。如設(shè)置整型信號量s,則s的值意義為:s>0,則s的值表示系統(tǒng)中空閑的該類臨界資源的個(gè)數(shù);s=0,則表示系統(tǒng)中該類臨界資源剛好全部被佔(zhàn)用,而且沒有進(jìn)程在等待該臨界資源;s<0,則s的絕對值表示系統(tǒng)中的進(jìn)程等待該類臨界資源的個(gè)數(shù);752.記錄型信號量
記錄型信號量的數(shù)據(jù)結(jié)構(gòu)由兩部分構(gòu)成。例如:定義記錄型信號量S,則:s的值表示系統(tǒng)中可用的該類臨界資源的數(shù)量,而L為進(jìn)程鏈表指針,指向等待該類資源的PCB佇列。設(shè)變數(shù)S為記錄型信號量,則wait(S)操作和signal(S)操作的流程如下圖所示:76Wati(S)是Wati(S)s=s-1申請到資源本進(jìn)程繼續(xù)本進(jìn)程入阻塞佇列s≥0否轉(zhuǎn)進(jìn)程調(diào)度圖2-10Wait操作原語流是signal(S)s=s+1喚醒一阻塞態(tài)進(jìn)程s≤0否圖2-11signal操作原語流釋放該類資源本進(jìn)程繼續(xù)77申請臨界資源的原語wait操作可描述為:procedurewait(S)
varS:semaphore;
begin
s:=s-1;
ifs≥0then本進(jìn)程繼續(xù);else{將本進(jìn)程放入阻塞態(tài)佇列;轉(zhuǎn)進(jìn)程調(diào)度;}
end
釋放臨界資源的原語signal操作可描述為:
proceduresignal(S)
varS:semaphore;
begin
s:=s+1;
ifs≤0then喚醒指針L所指的阻塞態(tài)進(jìn)程;
end
783.AND型信號量
AND同步機(jī)制的基本思想是:將進(jìn)程在整個(gè)運(yùn)行過程中需要的所有資源,一次性全部地分配給進(jìn)程,待進(jìn)程使用完成後再一起釋放。只要有一個(gè)資源尚未能分配給進(jìn)程,其他所有可能分配的資源,也不能分配給它。也稱為AND同步。AND型信號量集機(jī)制可描述如下:79Swait(S1,S2,…,Sn)
ifSi≥1and…andSn≥1then
fori:=1tondo
Si:=Si-1;
endfor
else
將該進(jìn)程放入阻塞態(tài)佇列;
endif
Ssignal(S1,S2,…,Sn)
fori:=1tondo
Si=Si+1;
喚醒所有因Si不滿足而進(jìn)入阻塞佇列的進(jìn)程;
endfor;804.信號量集
信號量集機(jī)制的基本思想是:在AND型信號量集的基礎(chǔ)上進(jìn)行擴(kuò)充,進(jìn)程對信號量Si的測試值為ti(用於信號量的判斷,即Si>=ti,表示資源數(shù)量低於ti時(shí),便不予分配),佔(zhàn)用值為di(用於信號量的增減,即Si=Si-d1和Si=Si+d1)Swait(S1,t1,d1;...;Sn,tn,dn);Ssignal(S1,d1;...;Sn,dn);一般“信號量集”的幾種特定情況:(1)Swait(S,d,d)表示每次申請d個(gè)資源,當(dāng)少於d個(gè)時(shí),便不分配;(2)Swait(S,1,1)表示互斥信號量;(3)Swait(S,1,0)作為一個(gè)可控開關(guān)(當(dāng)S≥1時(shí),允許多個(gè)進(jìn)程進(jìn)入臨界區(qū);當(dāng)S=0時(shí),禁止任何進(jìn)程進(jìn)入臨界區(qū));(4)“信號量集”未必成對使用Swait和Ssignal。如:一起申請,但可以不一起釋放。812.5進(jìn)程同步問題舉例
2.5.1生產(chǎn)者—消費(fèi)者問題1.問題的描述
有一批生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品,並將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi)。為方便生產(chǎn)者進(jìn)程與消費(fèi)者進(jìn)程能併發(fā)執(zhí)行,在兩者之間設(shè)置了一個(gè)具有n個(gè)緩衝區(qū)的緩衝池,生產(chǎn)者進(jìn)程將它所生產(chǎn)的產(chǎn)品放入一個(gè)緩衝區(qū)中;消費(fèi)者進(jìn)程可從一個(gè)緩衝區(qū)中取走產(chǎn)品去消費(fèi)。82012……i………n-2n-1
假設(shè)初始情況下緩衝池為空,即counter=0。為在生產(chǎn)者—消費(fèi)者問題中實(shí)現(xiàn)各進(jìn)程的同步,可設(shè)下列信號量:(假設(shè)初始情況下沒有進(jìn)程使用緩衝池,且緩衝池中各緩衝區(qū)都是空的。)mutex:互斥使用緩衝池信號量,由於初始情況下無進(jìn)程使用緩衝池,故初值mutex=1;empty:使用緩衝池中空緩衝區(qū)的信號量,由於初始情況下所有緩衝區(qū)為空,故初值empty=n;full:使用緩衝池中滿緩衝區(qū)的信號量,由於初始情況下沒有緩衝區(qū)存放產(chǎn)品,故初值full=0。
設(shè)開始時(shí)生產(chǎn)者進(jìn)程存放產(chǎn)品和消費(fèi)者進(jìn)程取產(chǎn)品時(shí),都從第0號緩衝區(qū)開始,並設(shè)這些生產(chǎn)者和消費(fèi)者地位相當(dāng),只要緩衝池未滿,生產(chǎn)者便可將消息送入緩衝池;只要緩衝池未空,消費(fèi)者便可從緩衝池中取走一個(gè)消息。83inout圖2-12生產(chǎn)者—消費(fèi)者問題中的緩衝池演算法及程式Var
mutex,empty,full:semaphore∶=1,n,0;/*定義信號量並賦初值*/
buffer:array[0,…,n-1]ofitem;
in,out:integer∶=0,0;/*定義存取指針的初始位置*/
begin
parbegin
生產(chǎn)者進(jìn)程proceduer:begin
repeat
…
生產(chǎn)一件產(chǎn)品;
…
wait(empty);
wait(mutex);
將產(chǎn)品放入下一個(gè)緩衝區(qū);
in∶=(in+1)modn;
signal(mutex);
signal(full);
untilfalse;
end
84消費(fèi)者進(jìn)程consumer:begin
repeat
wait(full);
wait(mutex);
從下一個(gè)緩衝區(qū)中取走一件產(chǎn)品;
out∶=(out+1)modn;
signal(mutex);
signal(empty);
消費(fèi)這件產(chǎn)品;
untilfalse;
end
parend
end854.在生產(chǎn)者—消費(fèi)者問題中應(yīng)注意:
(1)在每個(gè)程式中用於實(shí)現(xiàn)互斥的wait(mutex)和signal(mutex)必須成對地出現(xiàn)。(2)對資源信號量empty和full的wait和signal操作,同樣需要成對地出現(xiàn),但它們分別處於不同的進(jìn)程中,這樣保證生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程的同步及交替執(zhí)行。(3)在每個(gè)進(jìn)程中,多個(gè)wait操作順序不能顛倒,而signal操作的次序是無關(guān)緊要的。862.5.2讀者—寫者問題
1.問題的提出一檔F可以被多個(gè)併發(fā)進(jìn)程共用,將這些訪問該檔的進(jìn)程按訪問方式分為兩類:一類只能讀共用對象的內(nèi)容,把這類進(jìn)程稱為讀進(jìn)程或讀者;另一類進(jìn)程則要更新(寫)共用對象檔F,將這些進(jìn)程稱為寫進(jìn)程或?qū)懻?。試用Wait、Signal操作解決各進(jìn)程間的同步問題。2.問題的分析顯然,多個(gè)讀者同時(shí)讀一個(gè)共用對象是可以的,然而一個(gè)寫者不能與其它任何讀者或?qū)懻咄瑫r(shí)共用該檔。亦即:在使用共用檔時(shí),一個(gè)寫進(jìn)程與其它所有進(jìn)程都是互斥的。但多個(gè)讀進(jìn)程之間不存在互斥的現(xiàn)象。如圖2-13所示。87共用檔F寫進(jìn)程W讀進(jìn)程R1讀進(jìn)程Rn…圖2-13
讀者—寫者問題
設(shè)讀進(jìn)程為reader,寫進(jìn)程為writer。為實(shí)現(xiàn)reader與writer進(jìn)程間的同步與互斥,設(shè)如下變數(shù)及信號量:
wmutex:互斥使用該共用檔信號量。如:寫進(jìn)程write與讀進(jìn)程reader在使用檔時(shí)是互斥的;共用檔只有一個(gè),設(shè)初始情況未被使用,則初值為1。
readcount:整型變數(shù),表示正在讀的進(jìn)程個(gè)數(shù)。初值為0。該變數(shù)屬臨界資源。
rmutex:計(jì)數(shù)器readcount的信號量。因?yàn)閞eadcount是一個(gè)可被多個(gè)reader進(jìn)程訪問的臨界資源,為此設(shè)一信號量。設(shè)初始狀態(tài)下無進(jìn)程讀和寫,故rmutex的初值設(shè)為1。88
由於多個(gè)進(jìn)程可以同時(shí)讀,因此只要有一個(gè)reader進(jìn)程在讀,其他reader進(jìn)程便不必申請?jiān)摴灿脵n,直接讀即可;若無檔在讀,則第一個(gè)讀檔的進(jìn)程必須做申請?jiān)摍n的操作。只要有read進(jìn)程在執(zhí)行,則不允許writer進(jìn)程去寫。因此,僅當(dāng)readcount=0,即無reader進(jìn)程在讀時(shí),reader進(jìn)程才需要執(zhí)行wait(wmutex)操作。若wait(wmutex)操作成功,reader進(jìn)程便可去讀,相應(yīng)地,做readcount+1操作。同理,僅當(dāng)reader進(jìn)程在執(zhí)行了readcount減1操作後其值為0時(shí),才須執(zhí)行signal(wmutex)操作,以便讓writer進(jìn)程寫。893.演算法及程式
讀者—寫者問題可描述如下:Var:rmutex,wmutex:semaphore:=1,1;
Readcount:integer:=0;
begin
parbegin
讀者進(jìn)程:Reader:begin
repeat
wait(rmutex);
ifreadcount=0thenwait(wmutex);
readcount:=Readcount+1;
signal(rmutex);
90
…
進(jìn)行讀操作;
…
wait(rmutex);
readcount:=readcount-1;
ifreadcount=0thensignal(wmutex);
signal(rmutex);
untilfalse;
end
寫者進(jìn)程:writer:begin
repeat
wait(wmutex);
執(zhí)行寫操作;
signal(wmutex);
untilfalse;
end
parend
end914.注意事項(xiàng)及提示(1)對於寫進(jìn)程,共用檔是臨界資源;而對於讀進(jìn)程,該檔不是臨界資源。(2)整型變數(shù)readcount是臨界資源,所以在使用前後要進(jìn)行Wait、Signal操作。
922.5.3哲學(xué)家進(jìn)餐問題1.問題的提出
設(shè)有5個(gè)哲學(xué)家圍坐在一張圓桌前吃飯。桌上有5只筷子,在每人之間放一只。哲學(xué)家要吃飯時(shí),只有分別從左、右兩邊都拿到筷子時(shí),才能吃飯。如果筷子已在他人手上,則該哲學(xué)家必須等待到他人吃完後才能拿到筷子;任何一個(gè)哲學(xué)家在自己未拿到兩只筷子吃飯之前,決不放下自己手裏的筷子。試描述5位哲學(xué)家吃飯的進(jìn)程。93圖2-14
哲學(xué)家就餐餐問題942.問題分析
放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一位哲學(xué)家使用。為了實(shí)現(xiàn)對筷子的互斥使用,可以為每一只筷子設(shè)置一個(gè)信號量,由這五個(gè)信號量構(gòu)成信號量數(shù)組:Varchopstick:array[0,…,4]ofsemaphore;
設(shè)初始條件下,所有哲學(xué)家都未吃,故所有信號量均被初始化為1。3.實(shí)現(xiàn)方法
假設(shè)每一位哲學(xué)家拿筷子的方法都是:先拿起左邊的筷子,再拿起右邊的筷子,則第i位哲學(xué)家的活動(dòng)可描述為:95Pi()beginVarchopstick:array[0,…,4]ofmaphore=[1,1,1,1,1];
repeat
wait(chopstick[i]);
wait(chopstick[(i+1)mod5]); eat;
…
signal(chopstick[i]);
signal(chopstick[(i+1)mod5]);
think;
untilfalse;end96
以上演算法存在一個(gè)問題:假設(shè)5個(gè)哲學(xué)家同時(shí)拿起左邊的筷子,那麼再去拿右邊的筷子時(shí),就會(huì)產(chǎn)生死鎖。下麵給出幾種解決方法。(1)至多只允許有四位哲學(xué)家同時(shí)去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐,並在用畢時(shí)能釋放出他用過的兩只筷子,從而使更多的哲學(xué)家能夠進(jìn)餐。(2)僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時(shí),才允許他拿起筷子進(jìn)餐。(3)規(guī)定奇數(shù)號哲學(xué)家先拿他左邊的筷子,然後再去拿右邊的筷子;而偶數(shù)號哲學(xué)家則相反。最後總會(huì)有一位哲學(xué)家能獲得兩只筷子而進(jìn)餐。具體程式段參看實(shí)訓(xùn)教材。974.不產(chǎn)生死鎖的哲學(xué)家就餐問題演算法
2.6進(jìn)程通信
進(jìn)程間的資訊交換稱為進(jìn)程通信。通常,進(jìn)程間的通信分為兩種:控制資訊的傳送與大量資訊的傳送。將進(jìn)程間控制資訊的交換稱為低級通信,而把進(jìn)程之間大批量數(shù)據(jù)的交換稱為高級通信。進(jìn)程的互斥與同步為低級通信方式,相應(yīng)地,也稱wait、signal操作為低級的通信原語。僅通過P、V操作或鎖的方法是無法實(shí)現(xiàn)進(jìn)程的高級通信的。高級通信方式可分為三大類:共用記憶體系統(tǒng)、消息傳遞系統(tǒng)和管道通信系統(tǒng)。982.6.1共用記憶體系統(tǒng)1.共用記憶體系統(tǒng)的類型(1)基於共用數(shù)據(jù)結(jié)構(gòu)的通信方式在這種通信方式中,要使各進(jìn)程共用某些數(shù)據(jù)結(jié)構(gòu),藉以實(shí)現(xiàn)各進(jìn)程間的資訊交換。如在生產(chǎn)者—消費(fèi)者問題中,就是用有界緩衝區(qū)這種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)通信的。這種通信方式是低效的,只適用於傳遞相對少量的數(shù)據(jù)。(2)基於共用存儲(chǔ)區(qū)的通信方式。在記憶體中劃出了一塊共用存儲(chǔ)區(qū),各進(jìn)程可通過對共用存儲(chǔ)區(qū)中的數(shù)據(jù)的讀或?qū)憗韺?shí)現(xiàn)通信。992.Linux共用存儲(chǔ)區(qū)通信的實(shí)現(xiàn)(1)共用存儲(chǔ)區(qū)的建立利用系統(tǒng)調(diào)用shmget()建立一塊共用存儲(chǔ)區(qū)。該系統(tǒng)調(diào)用將返回該共用存儲(chǔ)區(qū)的描述符shmid;若尚未建立,便為進(jìn)程建立一個(gè)指定大小的共用存儲(chǔ)區(qū)。(2)共用存儲(chǔ)區(qū)的操縱可以用shmctl()系統(tǒng)調(diào)用對共用存儲(chǔ)區(qū)的狀態(tài)資訊進(jìn)行查詢,如其長度、所連接的進(jìn)程數(shù)、創(chuàng)建者識別字等;也可設(shè)置或修改其屬性,如共用存儲(chǔ)區(qū)的許可權(quán)、當(dāng)前連接的進(jìn)程計(jì)數(shù)等;還可用來對共用存儲(chǔ)區(qū)加鎖或解鎖,以及修改共用存儲(chǔ)區(qū)識別字等。3.共用存儲(chǔ)區(qū)的附接與斷開
在進(jìn)程已經(jīng)建立了共用存儲(chǔ)區(qū)或已獲得了其描述符後,還須利用系統(tǒng)調(diào)用shmat()將該共用存儲(chǔ)區(qū)附接到用戶給定的某個(gè)進(jìn)程的虛地址shmaddr上,並指定該存儲(chǔ)區(qū)的訪問屬性,即指明該區(qū)是只讀,還是可讀可寫。此後,此共用存儲(chǔ)區(qū)便成為該進(jìn)程虛地址空間的一部分。進(jìn)程可採取與對其他虛地址空間一樣的存取方法來訪問。當(dāng)進(jìn)程不再需要該共用存儲(chǔ)區(qū)時(shí),再利用系統(tǒng)調(diào)用shmdt()把該區(qū)與進(jìn)程斷開。4.幾個(gè)相關(guān)系統(tǒng)調(diào)用共用存儲(chǔ)區(qū)通信中常用的系統(tǒng)調(diào)用:(1)shmget(key,size,flag):功能:獲得一個(gè)共用存儲(chǔ)區(qū),若成功,其返回值為該共用存儲(chǔ)區(qū)的描述符。(2)shmat(id,addr,flag)從邏輯上將一個(gè)共用存儲(chǔ)區(qū)附接到進(jìn)程的虛擬地址空間上。(3)shmdt(addr):把一個(gè)共用存儲(chǔ)區(qū)從指定進(jìn)程的虛地址空間斷開。(4)shmctl(id,cmd,buf)對與共享存儲(chǔ)區(qū)關(guān)聯(lián)的各種參數(shù)進(jìn)行操作,從而對共用存儲(chǔ)區(qū)進(jìn)行控制。1022.6.2消息傳遞系統(tǒng)
在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換,是以格式化的消息(message)為單位的。程式員直接利用系統(tǒng)提供的一組通信命令進(jìn)行通信。因?qū)崿F(xiàn)方式的不同分為直接通信方式和間接通信方式。間接通信方式又稱為信箱通信方式。信箱是一種數(shù)據(jù)結(jié)構(gòu),邏輯上可分為兩部分:信箱頭和信箱體。信箱頭包含箱體的結(jié)構(gòu)資訊,信箱體由多個(gè)格子構(gòu)成。信箱通信一般是進(jìn)程之間的雙向通信。1031.直接通信方式
這種通信是固定在一對進(jìn)程之間。用來發(fā)送和接收消息。兩條原語的形式如下:send(B,message);發(fā)送一個(gè)消息給接收進(jìn)程B;receive(A,message);接收進(jìn)程A發(fā)來的消息;通常情況下,接收進(jìn)程可與多個(gè)發(fā)送進(jìn)程通信,因此,它不可能事先指定發(fā)送進(jìn)程。對於這樣的應(yīng)用,在接收進(jìn)程接收消息的原語中的源進(jìn)程參數(shù),是完成通信後的返回值,接收原語可表示為:receive(id,message);其中,id為接收消息進(jìn)程的識別字。2.間接通信方式
間接通信方式又稱為信箱通信方式。信箱是一種數(shù)據(jù)結(jié)構(gòu),邏輯上可分為兩部分:信箱頭和信箱體。信箱頭包含箱體的結(jié)構(gòu)資訊,信箱體由多個(gè)格子構(gòu)成,它實(shí)際上就是一個(gè)有界緩衝池。信箱通信一般是進(jìn)程之間的雙向通信。如圖2-15所示。
信箱體sendreceivereceivesend進(jìn)程B信箱頭圖2-15進(jìn)程的信箱通信方式進(jìn)程A3.消息緩衝佇列通信機(jī)制
(1)消息緩衝佇列通信機(jī)制中所用的主要數(shù)據(jù)結(jié)構(gòu)是消息緩衝區(qū)。在設(shè)置消息緩衝佇列時(shí),還應(yīng)添加用於對消息佇列進(jìn)行操作和實(shí)現(xiàn)同步的信號量,並將它們存入進(jìn)程的PCB中。
當(dāng)一個(gè)發(fā)送進(jìn)程要發(fā)送消息時(shí),便形成一個(gè)消息,併發(fā)送給指定的接收進(jìn)程。接收進(jìn)程將所有的消息緩衝區(qū)鏈成一個(gè)佇列,其佇列首由接收進(jìn)程PCB中的佇列隊(duì)首指針mq來指出。
(2)發(fā)送原語(3)接收原語接收進(jìn)程調(diào)用接收原語,從自己的消息緩衝佇列中,選取第一個(gè)消息緩衝區(qū),並將其中的數(shù)據(jù)複製到指定的消息接收區(qū)內(nèi)。
發(fā)送進(jìn)程在發(fā)送消息之前,應(yīng)先在自己的記憶體空間設(shè)置一發(fā)送區(qū),然後調(diào)用發(fā)送原語,把消息發(fā)送給接收進(jìn)程。4.Linux系統(tǒng)關(guān)於消息傳遞的相關(guān)系統(tǒng)調(diào)用
(1)msgget(key,flag):功能:獲得一個(gè)消息的描述符,該描述符指定一個(gè)消息佇列以便用於其他系統(tǒng)調(diào)用。(2)msgsnd(id,msgp,size,flag);功能:發(fā)送一消息。(3)msgrcv(id,msgp,size,type,flag)功能:接受一消息。(4)msgctl(id,cmd,buf):功能:查詢一個(gè)消息描述符的狀態(tài),設(shè)置它的狀態(tài)及刪除一個(gè)消息描述符。
2.6.3管道通信系統(tǒng)
所謂管道,是指用於連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程,以實(shí)現(xiàn)他們之間通信的一個(gè)共用檔,又名pipe檔。為了協(xié)調(diào)雙方的通信,管道機(jī)制必須提供以下三方面的協(xié)調(diào)能力:(1)互斥,即當(dāng)一個(gè)進(jìn)程正在對pipe執(zhí)行讀/寫操作時(shí),其他(另一)進(jìn)程必須等待。(2)同步,指當(dāng)讀寫進(jìn)程使用pipe時(shí),需要同步使用。(3)確定對方是否存在,只有確定了對方已存在時(shí),才能進(jìn)行通信。1092.6.4信號通信機(jī)制
1.信號的基本概念每個(gè)信號都對應(yīng)一個(gè)正整數(shù)常量,即信號編號。信號機(jī)制具有以下三方面的功能:(1)發(fā)送信號。發(fā)送信號的程式用系統(tǒng)調(diào)用kill()實(shí)現(xiàn);(2)預(yù)置對信號的處理方式。接收信號的程式用signal()來實(shí)現(xiàn)預(yù)置處理方式;(3)收受信號的進(jìn)程按事先的規(guī)定完成對相應(yīng)事件的處理。
1102.信號的發(fā)送
信號的發(fā)送,是指由發(fā)送進(jìn)程把信號送到指定進(jìn)程的信號域的某一位上。進(jìn)程用kill()向一個(gè)進(jìn)程或一組進(jìn)程發(fā)送一個(gè)信號。3.信號的處理
對軟中斷信號的處理分三種情況進(jìn)行:(1)如果進(jìn)程收到的軟中斷是一個(gè)已決定要忽略的信號(function=1),進(jìn)程不做任何處理便立即返回;(2)進(jìn)程收到軟中斷後便退出(function=0);(3)執(zhí)行用戶設(shè)置的軟中斷處理程式。4.相關(guān)的Linux系統(tǒng)調(diào)用(1)kill()功能:向一個(gè)或一組進(jìn)程發(fā)送一個(gè)軟中斷信號。(2)signal()功能:預(yù)置對信號的處理方式,允許調(diào)用進(jìn)程控制軟中斷信號。1122.7線程
線程是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。2.7.1線程的基本概念線程(thead)是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。在引入線程的操作系統(tǒng)中,可以在一個(gè)進(jìn)程內(nèi)部進(jìn)行線程切換,現(xiàn)場保護(hù)工作量小。線程與進(jìn)程的比較:(1)進(jìn)程是資源分配的基本單位。同一進(jìn)程的所有線程共用該進(jìn)程的所有資源。(2)線程是分配處理機(jī)的基本單位,它與資源分配無關(guān)。(3)一個(gè)線程只能屬於一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。(4)線程在執(zhí)行過程中,需要協(xié)作同步。1132.7.2線程的狀態(tài)與轉(zhuǎn)換操作
線程有3種基本狀態(tài),即執(zhí)行、阻塞和就緒。針對線程的3種基本狀態(tài),存在5種基本操作來轉(zhuǎn)換線程的狀態(tài)。它們是:1.派生(spawn)2.調(diào)度(schedule)3.阻塞(Block)4.啟動(dòng)(unblock)5.結(jié)束(Finish)1142.7.3引入線程的好處
引入線程的好處有以下幾點(diǎn):1.易於調(diào)度。2.提高了系統(tǒng)的效率。3.創(chuàng)建一個(gè)線程比創(chuàng)建一個(gè)進(jìn)程花費(fèi)的開銷少,創(chuàng)建速度快。4.有利於發(fā)揮多處理器的功能,提高進(jìn)程的並行性。1152.7.4多線程的實(shí)現(xiàn)
多線程機(jī)制是指操作系統(tǒng)支持在一個(gè)進(jìn)程內(nèi)執(zhí)行多個(gè)線程的能力。多種系統(tǒng)支持多線程實(shí)現(xiàn)的方式並不完全相同。1.用戶級線程用戶級線程是由用戶應(yīng)用程式建立的,並由用戶應(yīng)用程式負(fù)責(zé)對這些線程進(jìn)行調(diào)度和管理,操作系統(tǒng)內(nèi)核並不知道有用戶級線程的存在,只對進(jìn)程進(jìn)行管理。2.內(nèi)核級線程內(nèi)核級線程簡稱為KLT,通常也稱為“純KLT”方法。內(nèi)核級線程中所有線程的創(chuàng)建、調(diào)度和管理全部由操作系統(tǒng)內(nèi)核負(fù)責(zé)完成。
3.用戶級線程與核心態(tài)線程相結(jié)合的模式由於用戶級線程和內(nèi)核級線程各有其特色,因此,如果將兩種方法結(jié)合起來,則可吸取兩者的優(yōu)點(diǎn)。將兩種方法結(jié)合起來的系統(tǒng)稱為多線程的操作系統(tǒng)。內(nèi)核支持多線程的建立、調(diào)度和管理。同時(shí)系統(tǒng)中又提供使用線程庫,允許用戶應(yīng)用程式建立、調(diào)度和管理用戶級線程。本章小結(jié)
進(jìn)程是操作系統(tǒng)中的一個(gè)非常重要的概念。進(jìn)程是程式的一次執(zhí)行,同時(shí)它也是操作系統(tǒng)進(jìn)行資源分配的單位。進(jìn)程具有一些特徵,是與程式有根本區(qū)別的概念。進(jìn)程具有動(dòng)態(tài)性、併發(fā)性、非同步性、獨(dú)立性的特性。反映進(jìn)程動(dòng)態(tài)性的是進(jìn)程狀態(tài)的變化。進(jìn)程從創(chuàng)建到被撤銷,要經(jīng)過一些具有生命狀態(tài)的活動(dòng)。進(jìn)程的三個(gè)基本狀態(tài)包括阻塞、就緒、執(zhí)行,除此之外,不同的操作系統(tǒng)還具有其他一些狀態(tài)。進(jìn)程的狀態(tài)轉(zhuǎn)換由相應(yīng)的原語來完成。進(jìn)程的併發(fā)執(zhí)行是指,在同一時(shí)間間隔內(nèi)多個(gè)進(jìn)程同時(shí)發(fā)生。進(jìn)程的併發(fā)特性反映在進(jìn)程對資源的競爭以及由資源競爭所引起的對進(jìn)程執(zhí)行速度的制約。我們可以通過提高進(jìn)程的併發(fā)性,來提高整個(gè)系統(tǒng)的效率。118進(jìn)程上下文由以下部分組成:進(jìn)程控制塊、正文段、數(shù)據(jù)段以及各種寄存器和堆疊中的值。進(jìn)程控制塊PCB是進(jìn)程存在的惟一標(biāo)誌,它包含進(jìn)程的運(yùn)行資訊和程式的控制資訊。進(jìn)程控制塊在內(nèi)存中的組織方式有:線性方式、鏈接方式和索引方式。對於Linux系統(tǒng),我們可以通過幾個(gè)常用的進(jìn)程創(chuàng)建和控制的系統(tǒng)調(diào)用,實(shí)現(xiàn)對進(jìn)程的控制。119不能被多個(gè)進(jìn)程同時(shí)使用的資源稱為臨界資源。將每個(gè)進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)。多個(gè)進(jìn)程不能同時(shí)進(jìn)入同一個(gè)臨界區(qū),叫做進(jìn)程之間的互斥;多個(gè)進(jìn)程在使用臨界資源時(shí),表現(xiàn)出來的相互協(xié)調(diào)、相互合作、互相等待,使得各進(jìn)程按一定的速度執(zhí)行的過程稱為進(jìn)程間的同步。具有同步關(guān)係的一組併發(fā)進(jìn)程稱為合作進(jìn)程。實(shí)現(xiàn)進(jìn)程的互斥和同步,可以用鎖或P、V操作來實(shí)現(xiàn)。P操作是申請臨界資源的原語操作,也稱為wait操作;V操作是釋放臨界資源的原語操作,也稱為signal操作。信號量是P、V操作的對象。1203.1分級調(diào)度
一個(gè)批處理型作業(yè),從進(jìn)入系統(tǒng)並駐留在外存的後備佇列上開始,直至作業(yè)運(yùn)行完畢,可能要經(jīng)歷以下三級調(diào)度:即作業(yè)調(diào)度、對換和進(jìn)程調(diào)度。1213.1.1調(diào)度的層次1.作業(yè)調(diào)度
作業(yè)調(diào)度又稱為高級調(diào)度或長調(diào)度,用於選擇把外存上處於後備佇列中的哪些作業(yè)調(diào)入記憶體,並為它們創(chuàng)建進(jìn)程、分配必要的資源。然後,再將新創(chuàng)建的進(jìn)程排在就緒佇列上,準(zhǔn)備執(zhí)行。在批處理系統(tǒng)中,需要有作業(yè)調(diào)度的過程,以便將它們分批地裝入記憶體。無須再配置作業(yè)調(diào)度機(jī)制。在分時(shí)系統(tǒng)和即時(shí)系統(tǒng)中,通常也不需要作業(yè)調(diào)度。122
一個(gè)作業(yè)從提交給電腦系統(tǒng)到執(zhí)行結(jié)束退出系統(tǒng),一般都要經(jīng)歷提交、後備、執(zhí)行和完成等4個(gè)狀態(tài)。提交狀態(tài):一個(gè)作業(yè)在其處於從輸入設(shè)備進(jìn)入外部存儲(chǔ)設(shè)備的過程稱為提交狀態(tài)。後備狀態(tài):也稱為收容狀態(tài)。若一個(gè)作業(yè)的全部資訊已全部被輸入進(jìn)輸入井,則在它還未被調(diào)度去執(zhí)行之前,該作業(yè)處於後備狀態(tài)。執(zhí)行狀態(tài):作業(yè)調(diào)度程式從後備作業(yè)中選取若干個(gè)作業(yè)到記憶體投入運(yùn)行。它為被選中作業(yè)建立進(jìn)程並分配必要的資源,這時(shí),這些被選中的作業(yè)處於執(zhí)行狀態(tài)。完成狀態(tài):當(dāng)作業(yè)運(yùn)行完畢,但它所佔(zhàn)用的資源尚未全部被系統(tǒng)回收時(shí),該作業(yè)處於完成狀態(tài)。1232.對換
又稱交換調(diào)度或中級調(diào)度。其主要任務(wù)是按照給定的原則和策略,將處於外存交換區(qū)中的就緒狀態(tài)或等待狀態(tài)的進(jìn)程調(diào)入記憶體,或把處於記憶體就緒狀態(tài)或記憶體等待狀態(tài)的進(jìn)程交換到外存交換區(qū)。
1243.進(jìn)程調(diào)度
進(jìn)程調(diào)度又稱為低級調(diào)度或微觀調(diào)度。其主要任務(wù)是按照某種策略和演算法,將處理機(jī)分配給一個(gè)處於就緒狀態(tài)的進(jìn)程。進(jìn)程調(diào)度可分為下列兩種方式:(1)非搶佔(zhàn)方式:非搶佔(zhàn)方式不允許進(jìn)程搶佔(zhàn)已經(jīng)分配出去的處理機(jī)。
(2)搶佔(zhàn)方式:搶佔(zhàn)調(diào)度方式允許調(diào)度程式根據(jù)某種原則,暫停某個(gè)正在執(zhí)行的進(jìn)程,將處理機(jī)收回,重新分配給另一個(gè)進(jìn)程。
125完成作業(yè)調(diào)度預(yù)輸入輸入井緩輸出圖3-1作業(yè)調(diào)度與進(jìn)程調(diào)度作業(yè)輸出井就緒運(yùn)行等待結(jié)果126
作業(yè)是用戶向電腦提交任務(wù)的任務(wù)實(shí)體。一個(gè)作業(yè)是指在一次應(yīng)用業(yè)務(wù)處理過程中,從輸入開始到輸出結(jié)束,用戶要求電腦所做的有關(guān)該次業(yè)務(wù)處理的全部工作。一個(gè)作業(yè)總是由一個(gè)或多個(gè)進(jìn)程組成的。作業(yè)分解為進(jìn)程的過程是:系統(tǒng)首先為一個(gè)作業(yè)創(chuàng)建一個(gè)根進(jìn)程。然後,在執(zhí)行作業(yè)控制語句時(shí),根據(jù)任務(wù)要求,系統(tǒng)或根進(jìn)程為其創(chuàng)建相應(yīng)的子進(jìn)程。最後,進(jìn)行進(jìn)程調(diào)度,為各子進(jìn)程分配資源和調(diào)度各子進(jìn)程執(zhí)行,以完成作業(yè)要求的工作。3.1.2作業(yè)與進(jìn)程的關(guān)係1273.2作業(yè)調(diào)度
作業(yè)調(diào)度主要是完成作業(yè)從後備狀態(tài)到執(zhí)行狀態(tài)的轉(zhuǎn)換,以及從執(zhí)行狀態(tài)到完成狀態(tài)的轉(zhuǎn)換。1283.2.1作業(yè)調(diào)度的功能1.記錄系統(tǒng)中各作業(yè)的狀態(tài)圖3-2作業(yè)控制塊JCB作業(yè)名作業(yè)類型計(jì)算型管理型圖形設(shè)計(jì)型資源要求記憶體量外存量外設(shè)類型及數(shù)量軟體支持工具庫函數(shù)當(dāng)前狀態(tài)提交狀態(tài)後備態(tài)運(yùn)行態(tài)完成資源使用情況進(jìn)入系統(tǒng)的時(shí)間開始執(zhí)行時(shí)間已運(yùn)行時(shí)間記憶體地址外設(shè)臺(tái)數(shù)作業(yè)的優(yōu)先順序1292.從後備佇列中挑選出一部分作業(yè)投入執(zhí)行。作業(yè)調(diào)度程式根據(jù)選定的調(diào)度演算法,從後備作業(yè)佇列中挑選出若干作業(yè)去投入執(zhí)行。
3.為被選中作業(yè)做好執(zhí)行前的準(zhǔn)備工作。作業(yè)調(diào)度程式為選中的作業(yè)建立相應(yīng)的進(jìn)程,並為這些進(jìn)程分配它們所需要的系統(tǒng)資源,如分配給它們記憶體、外存、外設(shè)等。
4.在作業(yè)執(zhí)行結(jié)束時(shí)做好善後處理工作。包括輸出作業(yè)管理資訊;回收該作業(yè)所佔(zhàn)用的資源;撤銷與該作業(yè)有關(guān)的全部進(jìn)程和該作業(yè)的作業(yè)控制塊等等。作業(yè)從後備狀態(tài)到執(zhí)行狀態(tài)以及從執(zhí)行狀態(tài)到完成狀態(tài)的轉(zhuǎn)換過程如圖3-3所示。
130按調(diào)度演算法,從後備作業(yè)中選出一作業(yè)調(diào)用存儲(chǔ)管理、設(shè)備管理程式,審核資源要求分配資源調(diào)用進(jìn)程管理程式建立進(jìn)程進(jìn)程調(diào)度放棄該作業(yè)調(diào)用存儲(chǔ)管理,設(shè)備管理回收分配給該作業(yè)的全部資源調(diào)用會(huì)計(jì)程式,計(jì)算該作業(yè)的執(zhí)行費(fèi)用撤銷該作業(yè)的所有進(jìn)程及作業(yè)的JCB調(diào)度下一個(gè)作業(yè)後備作業(yè)佇列空資源要求能滿足?是
出口否否圖3-3(a)作業(yè)從後備狀態(tài)到執(zhí)行狀態(tài)(b)作業(yè)從執(zhí)行狀態(tài)到完成狀態(tài)是1313.2.2調(diào)度演算法的評價(jià)及準(zhǔn)則1.面向用戶的準(zhǔn)則2.面向系統(tǒng)的準(zhǔn)則1321.面向用戶的準(zhǔn)則(1)周轉(zhuǎn)時(shí)間短周轉(zhuǎn)時(shí)間:是指作業(yè)被提交給系統(tǒng)開始,到作業(yè)終止為止的這段時(shí)間間隔,也稱為作業(yè)周轉(zhuǎn)時(shí)間。它包括四部分時(shí)間:a.作業(yè)在外存後備佇列上等待調(diào)度的時(shí)間。b.進(jìn)程在就緒佇列上等待進(jìn)程調(diào)度的時(shí)間。c.進(jìn)程佔(zhàn)用CPU執(zhí)行的時(shí)間。d.進(jìn)程等待I/O操作完成的時(shí)間。133作業(yè)i的周轉(zhuǎn)時(shí)間Ti可定義為:
Ti=Tei—Tsi其中,Tei為作業(yè)i的完成時(shí)間,Tsi為作業(yè)i的提交時(shí)間。平均周轉(zhuǎn)時(shí)間為:T=]作業(yè)的周轉(zhuǎn)時(shí)間T與系統(tǒng)為它提供服務(wù)的時(shí)間(即作業(yè)要求運(yùn)行時(shí)間)Ts之比,稱為帶權(quán)周轉(zhuǎn)時(shí)間,即:134帶權(quán)周轉(zhuǎn)時(shí)間W=T/Ts因?yàn)橹苻D(zhuǎn)時(shí)間T=等待時(shí)間+運(yùn)行時(shí)間Ts,因此,W也可表示為:W=1+等待時(shí)間/運(yùn)行時(shí)間從公式可以看出,W≤1,即W的最小值為1??梢钥闯觯瑤?quán)周轉(zhuǎn)時(shí)間越接近1,則該作業(yè)相對等待時(shí)間越短,系統(tǒng)性能越高。而平均帶權(quán)周轉(zhuǎn)時(shí)間可表示為:W=
135(2)回應(yīng)時(shí)間快
所謂回應(yīng)時(shí)間,是指從用戶提交一個(gè)作業(yè)請求開始,直至系統(tǒng)首次產(chǎn)生回應(yīng)為止的時(shí)間。它包括三部分時(shí)間:從鍵盤輸入的請求資訊傳送到處理機(jī)的時(shí)間。處理機(jī)執(zhí)行回應(yīng)處理的時(shí)間。將所形成的回應(yīng)資訊在終端顯示器上顯示出來的時(shí)間。(3)截止時(shí)間的保證。所謂截止時(shí)間,是指某任務(wù)必須開始執(zhí)行的最晚時(shí)間,或必須完成的最晚時(shí)間。
(4)優(yōu)先權(quán)準(zhǔn)則。調(diào)度程式根據(jù)任務(wù)的優(yōu)先權(quán)確定先選中哪個(gè)作業(yè)。1362.面向系統(tǒng)的準(zhǔn)則
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 弱電系統(tǒng)施工合同范本
- 地產(chǎn)代理合同
- 果園承包合同書
- 物流倉儲(chǔ)設(shè)備采購及安裝合同書
- 基站場地租賃合同模板年
- 工廠普通買賣合同
- 標(biāo)準(zhǔn)個(gè)人借款抵押合同模板
- 商城店面租賃合同范本
- 資產(chǎn)買賣合同書
- 全新臨時(shí)房租賃合同
- 部編版《道德與法治》六年級下冊教材分析萬永霞
- 粘液腺肺癌病理報(bào)告
- 鑄牢中華民族共同體意識自評報(bào)告范文
- 巡察檔案培訓(xùn)課件
- 物流營銷(第四版) 課件 第六章 物流營銷策略制定
- 上海高考英語詞匯手冊列表
- PDCA提高患者自備口服藥物正確堅(jiān)持服用落實(shí)率
- 上海石油化工股份有限公司6181乙二醇裝置爆炸事故調(diào)查報(bào)告
- 家譜人物簡介(優(yōu)選12篇)
- 2023年中智集團(tuán)下屬中智股份公司招聘筆試題庫及答案解析
- GA 1409-2017警用服飾硬式肩章
評論
0/150
提交評論