版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、操作系統(tǒng)概述一、考試大綱(一)操作系統(tǒng)的概念、特征、功能和提供的服務(wù)(二)操作系統(tǒng)的發(fā)展與分類(三)操作系統(tǒng)的運(yùn)行環(huán)境二、知識(shí)點(diǎn)歸納(一)操作系統(tǒng)的概念、特征、功能和提供的服務(wù)1.操作系統(tǒng)的概念、目標(biāo)和作用一個(gè)完整的計(jì)算機(jī)系統(tǒng)由兩大部分組成:計(jì)算機(jī)硬件和計(jì)算機(jī)軟件。硬件是所有軟件運(yùn)行的物質(zhì)基礎(chǔ);軟件能充分發(fā)揮硬件潛能和擴(kuò)充硬件功能,完成各種系統(tǒng)及應(yīng)用任務(wù),兩者互相促進(jìn)、相輔相成、缺一不可。計(jì)算機(jī)硬件是指計(jì)算機(jī)物理裝置本身,由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五部分組成。計(jì)算機(jī)軟件是指由計(jì)算機(jī)硬件執(zhí)行以完成一定任務(wù)的程序及其數(shù)據(jù)。計(jì)算機(jī)軟件包括系統(tǒng)軟件和應(yīng)用軟件。系統(tǒng)軟件包括操作系統(tǒng)、編譯程序、連接裝入程序、數(shù)據(jù)庫(kù)管理系統(tǒng)等;應(yīng)用軟件是為各種應(yīng)用目的而編制的程序。在計(jì)算機(jī)上配置操作系統(tǒng)的目的有以下幾點(diǎn):①方便用戶使②有效性。OS能夠有效管理好系統(tǒng)中的各種硬件軟件資源的工作流程,進(jìn)一步改善資源的利用率及提高系統(tǒng)的吞吐量③可擴(kuò)充性。OS必須具有很好的可擴(kuò)充性,應(yīng)采用層次化結(jié)構(gòu),以便于增加新的功能和模塊,并修改老的功能層次和模塊環(huán)境。OS應(yīng)該構(gòu)筑出一個(gè)開(kāi)放環(huán)境,主要是指:遵循有關(guān)國(guó)際標(biāo)準(zhǔn);支持體系結(jié)構(gòu)的可伸縮性和可擴(kuò)展性;支持應(yīng)用程序在不同平臺(tái)上的可移植性和可互操作性。操作系統(tǒng)主要①OS作為用戶與計(jì)算機(jī)硬件系統(tǒng)之間的接口:為了使機(jī)和操作系統(tǒng),操作系統(tǒng)提供了一組友好的用戶接口,包括:1)程序接口;2)命令口;3)圖形接口。②OS作為計(jì)算機(jī)系統(tǒng)資源來(lái)資源分為四類:處理機(jī)、存儲(chǔ)器、I/O設(shè)備以及信息類資源進(jìn)行管理,即處設(shè)備管理、文件管理。(資源管理觀點(diǎn))③OS用作擴(kuò)充機(jī)器:在裸機(jī)上覆蓋便的多層擴(kuò)充機(jī)器或多層虛機(jī)器。(虛擬機(jī)觀點(diǎn))操作系統(tǒng)可定義為:操作系統(tǒng)是一組控制和管理計(jì)算機(jī)硬件和軟件資源作業(yè)進(jìn)行調(diào)度,以及方便用戶使用的程序的集合用。操作系統(tǒng)應(yīng)該使計(jì)算機(jī)系統(tǒng)使用起來(lái)十分方便。,并通過(guò)合理地組織計(jì)算機(jī)。層次。④構(gòu)筑開(kāi)放由以下的作用:用戶能靈活、方便地使用計(jì)算接的管理者:資源包括兩大類:硬件資源和軟件資源。歸納起(數(shù)據(jù)和程序),OS的主要功能是對(duì)這四理機(jī)管理、存儲(chǔ)器管理、I/O上OS后,便可獲得一臺(tái)功能顯著增強(qiáng)、使用極為方,合理地對(duì)各類。2.操作系統(tǒng)的特征雖然不同的操作系統(tǒng)具有各自的特點(diǎn),但它們都具有以下4個(gè)基本特征:(1)并發(fā)性并行性和并發(fā)性是既相似又個(gè)事件在同一時(shí)刻發(fā)生;并發(fā)性是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)宏觀上在一段時(shí)間內(nèi)有多道程序在同時(shí)運(yùn)行,但在單處理機(jī)系統(tǒng)中,每—時(shí)刻有區(qū)別的兩個(gè)概念,并發(fā)性是指兩個(gè)或多發(fā)生。在多道程序環(huán)境下,并發(fā)性是指僅能執(zhí)行—道程序,故微觀上這些程序是交替執(zhí)行的。(2)共享性資源共享是指系統(tǒng)中的硬件和軟件資源不再為某個(gè)程序所獨(dú)占,而是供多個(gè)用戶程序共同使用。并發(fā)和共享是操作系統(tǒng)的兩個(gè)最基本的特征,二者之間互為存在條件。一方面,資源的共享是以程序的并發(fā)執(zhí)行為條件的,若系統(tǒng)不允許程序的并發(fā)執(zhí)行,自然不存在資源共享問(wèn)題;另一方面,若系統(tǒng)不能對(duì)資源共享實(shí)施有效的管理,也必將影響到程序的并發(fā)執(zhí)行,甚至根本無(wú)法并發(fā)執(zhí)行。(3)虛擬性在操作系統(tǒng)中,虛擬是指把一個(gè)物理上的實(shí)體變?yōu)槿舾蓚€(gè)邏輯上的對(duì)應(yīng)物,前者是實(shí)際存在的,后備是虛的,只是用戶的一種感覺(jué)。(4)異步性(不確定性)在操作系統(tǒng)中,不確定性有兩種含義:①程序執(zhí)行結(jié)果是不確定的,即對(duì)同一程序,使用相同的輸入,在相同的環(huán)境下運(yùn)行卻可能獲得完全不同的②多道程序環(huán)境下程序的執(zhí)行是以異步方式進(jìn)行的,換言之,順序以及完成每道程序所需要的時(shí)間都是不確定的,因而也是不3.操作系統(tǒng)的功能職能是負(fù)責(zé)系統(tǒng)中軟硬件資源的管理,合理地組織計(jì)算機(jī)系統(tǒng)的工作流程,提供一個(gè)良好的工作環(huán)境和友好的使用界面。從5個(gè)方面來(lái)說(shuō)明操作系統(tǒng)的基本功能。(1)處理機(jī)管理。道程序處理機(jī)的分配和運(yùn)行是以進(jìn)程的管理。進(jìn)程管理應(yīng)實(shí)現(xiàn)下述主要功能:①進(jìn)程控制:負(fù)責(zé)進(jìn)程的創(chuàng)建、撤消及狀態(tài)轉(zhuǎn)換。結(jié)果。亦即程序是不可再現(xiàn)的;每個(gè)程序何時(shí)執(zhí)行,多個(gè)可預(yù)知的。程序間的執(zhí)行操作系統(tǒng)的并為用戶下面處理機(jī)管理的主要任務(wù)是對(duì)處理機(jī)的分配和運(yùn)行實(shí)施有效的管理。在多環(huán)境下,進(jìn)程為基本單位的,因此對(duì)處理機(jī)的管理可歸結(jié)為對(duì)②進(jìn)程同步:對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行協(xié)調(diào)。③進(jìn)程通信:負(fù)責(zé)完成進(jìn)程間的信息交換。④進(jìn)程調(diào)度:按一定(2)存儲(chǔ)器管理。存儲(chǔ)器管理的主要任務(wù)是對(duì)現(xiàn)下述主要功能:①內(nèi)存分配:按一定的策略為每道程序分配內(nèi)存。②內(nèi)存保護(hù):保證各程序在自己的內(nèi)存區(qū)域內(nèi)運(yùn)行而不③地址映射:將地址空間的邏輯地址轉(zhuǎn)換為內(nèi)存空間與之對(duì)應(yīng)的物理地址。④內(nèi)存擴(kuò)充:為允許大型作業(yè)或多作業(yè)的運(yùn)行,必須借助虛擬存儲(chǔ)技術(shù)去獲得增加內(nèi)存算法進(jìn)行處理機(jī)分配。內(nèi)行進(jìn)行分配、保護(hù)和擴(kuò)充。存儲(chǔ)器管理應(yīng)實(shí)相互干擾。的效果。(3)的主要任務(wù)是對(duì)計(jì)算機(jī)系統(tǒng)①設(shè)備分配:根據(jù)一定的設(shè)備分配原則對(duì)設(shè)備進(jìn)行分配。為設(shè)備管理:計(jì)算機(jī)外部設(shè)備的管理是操作系統(tǒng)中最設(shè)備實(shí)施有效的管理。設(shè)備管理應(yīng)了使設(shè)備與主機(jī)并行龐雜、瑣碎的部分。設(shè)備管理具有下述功能:工作,內(nèi)的所有還需采用緩沖技術(shù)和虛擬技術(shù)。②設(shè)備傳輸控制:實(shí)現(xiàn)物理的輸入輸出操作,即啟動(dòng)設(shè)備、中斷處現(xiàn)、結(jié)束處理等。設(shè)備無(wú)關(guān)。文件管理的主要任務(wù)是有效地支持文件的存儲(chǔ)、檢索和修改等操作,解決文件的共享、保密和保護(hù)問(wèn)題。文件管理應(yīng)實(shí)現(xiàn)下述功能:①文件存儲(chǔ)空間的管理:負(fù)責(zé)對(duì)文件存儲(chǔ)空間進(jìn)行管理,包括存儲(chǔ)空間的功能。②目錄管理:目錄是用③設(shè)備獨(dú)立性:即用戶向系統(tǒng)申請(qǐng)的設(shè)備與實(shí)際操作的(4)文件管理。分配與回收等來(lái)管理文件的數(shù)據(jù)結(jié)構(gòu),它能提供按名存取的功能。③文件操作管理:實(shí)現(xiàn)文件的操作,負(fù)責(zé)完成數(shù)據(jù)的讀寫(xiě)。④文件保護(hù):提供文件保護(hù)功能,防止文件遭到破壞。(5)用戶接口。為方便用戶使用操作系統(tǒng),操作系統(tǒng)提供了用戶接口。操作系統(tǒng)通常提供如下幾種類型的用戶接口。①命令接口:提供—組命令供用戶直接或間接控制自己的作業(yè)。②程序接口:提供一組系統(tǒng)調(diào)用供用戶程序和其他系統(tǒng)程序調(diào)用。③圖形接口:圖形用戶接口采用了圖形化的操作界面,用非常容易識(shí)別的各種圖標(biāo)將系統(tǒng)的各項(xiàng)功能、各種應(yīng)用程序和文件直觀、逼真地表示出來(lái),用戶可通過(guò)鼠標(biāo)、菜單和對(duì)話框來(lái)完成各種應(yīng)用程序和文件的操作。4.操作系統(tǒng)提供的服務(wù)操作系統(tǒng)為程序和用戶提供了一系列的操作系統(tǒng)服務(wù),這些服務(wù)可使程序員更容易地完成他的(1)操作系統(tǒng)的和差錯(cuò)檢測(cè)等。(2)系統(tǒng)中的作用,系統(tǒng)可分為進(jìn)程管理、設(shè)備管理、文件管理、信息維護(hù)以及通信等。(二)操作系統(tǒng)的發(fā)展與分類操作系統(tǒng)的主要發(fā)展過(guò)程如下:1.無(wú)操作系統(tǒng)時(shí)的計(jì)算機(jī)系統(tǒng)(1)手工操作階段早期的計(jì)算機(jī)系統(tǒng)上沒(méi)有配置操作系統(tǒng),計(jì)算機(jī)的操作和使用計(jì)算機(jī)硬件。機(jī)器語(yǔ)言編程,并將事先準(zhǔn)備好的程序和數(shù)據(jù)卡片上,從紙帶或卡片輸入機(jī)將程序和數(shù)據(jù)輸入計(jì)算機(jī)。然后,啟動(dòng)計(jì)算機(jī)運(yùn)行,程序員可以通過(guò)控制臺(tái)上的按鈕、開(kāi)關(guān)和氖燈來(lái)操縱和控制程序,運(yùn)行完畢,取走計(jì)算的結(jié)果,才輪一個(gè)用戶上機(jī)。這種手工操作方式具有用戶獨(dú)占計(jì)算機(jī)資源、資源利用率低及CPU等待人工操作的缺點(diǎn)。隨著CPU速度的大幅度提高,手工操作的慢速與CPU運(yùn)算的高速之間出現(xiàn)了矛盾,這就是所謂的人機(jī)矛盾。另一方面,CPU與I/O設(shè)備之間速度不匹配的矛盾也日益突出。(2)脫機(jī)輸入/輸出技術(shù)為解決CPU與I/O設(shè)備之間速度不匹配的問(wèn)題,將用戶衛(wèi)星機(jī))的預(yù)先從低速輸入設(shè)備輸入到磁帶上,當(dāng)CPU需要這些程序和數(shù)據(jù)再直接從磁帶機(jī)高速輸入內(nèi)存,從而大大加快程序的輸入過(guò)程,減少CPU等待輸入的時(shí)間,這就是脫機(jī)輸入技術(shù);類似地,當(dāng)CPU需要輸出時(shí),無(wú)需直接把計(jì)算結(jié)果送至低速輸出設(shè)備,而是高速地把結(jié)果送到磁帶上,然后在外圍機(jī)的控制下,把磁帶上的計(jì)算結(jié)果由相應(yīng)的輸出設(shè)備輸出,這就是脫機(jī)輸出技術(shù)。若輸入/輸出操作在主機(jī)控制下進(jìn)行則稱之為聯(lián)機(jī)輸入/輸出。2.單道批處理操作系統(tǒng)批處理技術(shù)是指計(jì)算機(jī)系統(tǒng)對(duì)一批作業(yè)自動(dòng)進(jìn)行處理的常昂貴,為了能充分地利用它,應(yīng)盡量讓系統(tǒng)連續(xù)地運(yùn)行,以減少空閑時(shí)間。為批作業(yè)以脫機(jī)輸入方式輸入到磁帶上,并在系統(tǒng)中配置監(jiān)督程序(是一個(gè)常駐內(nèi)存的程序,它管理作運(yùn)行,負(fù)責(zé)裝入和運(yùn)行各種系統(tǒng)處理程序來(lái)完成作自動(dòng)過(guò)渡),在它的控先把磁帶上的第一個(gè)作業(yè)傳送到內(nèi)存,并把運(yùn)行的控制權(quán)交給該作業(yè),當(dāng)該作業(yè)處理完后又把控制權(quán)交還給監(jiān)督程序,由監(jiān)督程序再把第二個(gè)作業(yè)裝入內(nèi)存。計(jì)算機(jī)系統(tǒng)按這種方式對(duì)磁帶上的作業(yè)自動(dòng)地、一個(gè)接一個(gè)地進(jìn)行處理,直至把磁帶上的所有作業(yè)全部處理完工作。公共服務(wù)類型,主要有:程序執(zhí)行、I/O操作、文件系統(tǒng)操作、通信調(diào)用調(diào)用的類型是根據(jù)操作系統(tǒng)所提供服務(wù)的功能決定的,系統(tǒng)調(diào)用由程序員采用手工操作直接控制穿孔在紙帶或程序員使用到下程序和數(shù)據(jù)在一臺(tái)外圍機(jī)(又稱控制下,時(shí),一種技術(shù)。早期的計(jì)算機(jī)系統(tǒng)非此通常把一業(yè)的業(yè)的制下,畢,由于系統(tǒng)對(duì)作業(yè)的處理是成批進(jìn)行的、且在內(nèi)存中始終只保持一道作業(yè),故稱為單道批處理系統(tǒng)。其主要特征是:①自動(dòng)性;②順序性;③單道性。3.多道批處理技術(shù)多道程序設(shè)計(jì)的基本概念:多道程序設(shè)計(jì)技術(shù)是將多個(gè)作業(yè)存放在內(nèi)存中并允許它們交替執(zhí)行,這些作業(yè)共享處理機(jī)時(shí)間和外圍設(shè)備以及其他資源。當(dāng)一道程序因某種原因(如I/O請(qǐng)求)而暫停執(zhí)行時(shí),CPU立即轉(zhuǎn)去執(zhí)行另一道程序。在操作系統(tǒng)中引入多道程序設(shè)計(jì)技術(shù)后,會(huì)使系統(tǒng)具有多道、宏觀上并行、微觀上串行的特點(diǎn)。在單道批處理系統(tǒng)中,內(nèi)存中僅有一道作業(yè),使得系統(tǒng)中仍有較多的空閑資源,致使系統(tǒng)的性能較差,20世紀(jì)60年代提高了資源利用率和系統(tǒng)的吞吐量在多道批處理系統(tǒng)中,用戶所提交的作業(yè)都先“后備隊(duì)列”;然后,由作業(yè)調(diào)度程序按一定的算法從后備隊(duì)列引入多道程序設(shè)計(jì)技術(shù)后,形成了多道批處理技術(shù),進(jìn)一步。存放在外存并排成一個(gè)隊(duì)列,該隊(duì)列稱為中選擇若干個(gè)作業(yè)調(diào)入內(nèi)存,使它們共享CPU和系統(tǒng)中的各種資源,以達(dá)到提高資源利用率和系統(tǒng)的吞吐量主要特征是:①多道性;②無(wú)序性;③調(diào)度性。4.分時(shí)操作系統(tǒng)的目的。其(1)分時(shí)系統(tǒng)的產(chǎn)生如果說(shuō),推動(dòng)多道批處理系統(tǒng)形成和發(fā)展的主要?jiǎng)恿κ翘岣哔Y源利用率和系統(tǒng)吞吐率,那么,推動(dòng)分時(shí)系統(tǒng)形成和發(fā)展的主要?jiǎng)恿Γ瑒t是用戶的需要。體現(xiàn)在人-機(jī)交互、共享主機(jī)、便于用戶上機(jī)等方面。(2)分時(shí)系統(tǒng)的特征分時(shí)系統(tǒng)與多道批處理系統(tǒng)相比,具有完全不同的特征:①多路性。指一臺(tái)計(jì)算機(jī)與若干臺(tái)終端相連接,系統(tǒng)按分時(shí)原則為每個(gè)用戶服務(wù)。宏觀上,是多個(gè)用戶多路性亦即同時(shí)性,它提高了資源利用率②獨(dú)立性。每個(gè)用戶各占一個(gè)終端,彼此獨(dú)立操作、互不干擾。③及時(shí)性。用戶的請(qǐng)求能在很短時(shí)間內(nèi)獲得響應(yīng)。同時(shí)工作,共享系統(tǒng)資源;微觀上,則是每個(gè)用戶作業(yè)輪流運(yùn)行一個(gè)時(shí)間片。,從而促進(jìn)了計(jì)算機(jī)更廣泛地應(yīng)用。④交互性。用戶可通過(guò)終端與系統(tǒng)進(jìn)行廣泛的人機(jī)對(duì)話。其廣泛性表現(xiàn)在:用戶可以請(qǐng)求系統(tǒng)提供各方面的服務(wù),如文件編輯、數(shù)據(jù)處理和資源共享等。5.實(shí)時(shí)操作系統(tǒng)(1)實(shí)時(shí)系統(tǒng)的引入雖然多道批處理系統(tǒng)和分時(shí)系統(tǒng)已獲得較為令人滿意的資源利用率和響應(yīng)時(shí)間,從而使計(jì)算機(jī)的應(yīng)用范圍日益擴(kuò)大,但它們?nèi)匀徊荒軡M足以下兩個(gè)領(lǐng)域的需要:①實(shí)時(shí)控制:實(shí)時(shí)控制系統(tǒng)通常是指以計(jì)算機(jī)為中心的生產(chǎn)過(guò)程控制系統(tǒng),又稱為計(jì)算機(jī)控制系統(tǒng)。例如鋼鐵冶煉和鋼板軋制的自動(dòng)控制,化工、煉油生產(chǎn)過(guò)程的自動(dòng)控制等。②實(shí)時(shí)信息處理:在實(shí)時(shí)信息處理系統(tǒng)中,計(jì)算機(jī)能及時(shí)接收從遠(yuǎn)程終端發(fā)來(lái)的服務(wù)請(qǐng)求,根據(jù)用戶提出的問(wèn)題對(duì)信息進(jìn)行檢索和處理,并在很短時(shí)間內(nèi)對(duì)用戶做出正確回答,如機(jī)票訂購(gòu)系統(tǒng),情報(bào)檢索系統(tǒng)等。(2)實(shí)時(shí)任務(wù)的類型①按任務(wù)執(zhí)行時(shí)是否呈現(xiàn)周期性來(lái)劃分:分為周期性實(shí)時(shí)任務(wù)和非周期性實(shí)時(shí)任務(wù)。②根據(jù)對(duì)截止時(shí)間的要求來(lái)劃分:分為硬實(shí)時(shí)任務(wù)和軟實(shí)時(shí)任務(wù)。(3)實(shí)時(shí)系統(tǒng)與分時(shí)系統(tǒng)的比較①多路性;②獨(dú)立性:③及時(shí)性;④交互性;⑤可靠性實(shí)時(shí)操作系統(tǒng)的主要特點(diǎn)是響應(yīng)及時(shí)和可靠性高。系統(tǒng)必須保證對(duì)實(shí)時(shí)信息的分析和處理的速度要快,而且系統(tǒng)本身要安全可靠,因?yàn)樵谏a(chǎn)過(guò)程的實(shí)時(shí)控制、航空訂票等實(shí)時(shí)事務(wù)系統(tǒng),信息處理的延誤或丟失往往會(huì)帶來(lái)不堪設(shè)想的后果。隨著計(jì)算機(jī)硬件及其應(yīng)用的不斷發(fā)展,操作系統(tǒng)的類型也逐漸多樣化,如何對(duì)這些操作系統(tǒng)進(jìn)行分類取決于分類的方法,即所依據(jù)的標(biāo)準(zhǔn)。下面列出了三種分類方法。(1)按用戶數(shù)目分為單用戶操作系統(tǒng)和多用戶操作系統(tǒng)。其中,單用戶操作系統(tǒng)又分為單任務(wù)操作系統(tǒng)和多任務(wù)操作系統(tǒng)。(2)按硬件結(jié)構(gòu)分為單CPU操作系統(tǒng)、多CPU操作系統(tǒng)、網(wǎng)絡(luò)操作系統(tǒng)、分布式操作系統(tǒng)和多媒體操作系統(tǒng)。(3)按使用環(huán)境分為批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)。這是最常用的一種分類方法。批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)是三種基本的操作系統(tǒng)類型。如果一個(gè)操作系統(tǒng)兼有批處理、分時(shí)處理和實(shí)時(shí)處理系統(tǒng)三者或其中兩者的功能,那就形成了通用操作系統(tǒng)。(三)操作系統(tǒng)的運(yùn)行環(huán)境操作系統(tǒng)的運(yùn)行環(huán)境主要包括計(jì)算機(jī)系統(tǒng)的硬件環(huán)境和由其它系統(tǒng)軟件形成的軟件環(huán)境,以及操作系統(tǒng)和使用它的人之間硬件環(huán)境主要包括中央處理器(CPU)、存儲(chǔ)下面主要說(shuō)明CPU狀態(tài)和中斷機(jī)制。能由操作系統(tǒng)使用的指令。如:修改程序狀態(tài)字設(shè)備執(zhí)行I/O操作、設(shè)置硬件實(shí)時(shí)鐘、停機(jī)等的關(guān)系。系統(tǒng)、中斷機(jī)制、I/O技術(shù)和時(shí)鐘等方面。特權(quán)指令:只、開(kāi)關(guān)中斷、置中斷向量、啟動(dòng)非特權(quán)指令:特權(quán)指令之外的指令,這些指令的執(zhí)行不影響其它用戶以及系統(tǒng)狀態(tài).如算術(shù)運(yùn)算指令1.CPU狀態(tài)—管態(tài)和目態(tài)計(jì)算機(jī)系統(tǒng)中,操作系統(tǒng)程序作為用戶程序有的某些特權(quán),為避免錯(cuò)誤地使用特權(quán)指令,將CPU的運(yùn)行狀態(tài)分為管態(tài)和目態(tài)。由程序狀態(tài)(PSW)寄存器內(nèi)的標(biāo)志觸發(fā)器來(lái)進(jìn)行標(biāo)識(shí)。又稱為系統(tǒng)態(tài)或核心態(tài),操作系統(tǒng)程序所有指令、邏輯運(yùn)算指令、取數(shù)存數(shù)指令、訪管指令等的管理者和控制者,享有用戶程序所不能享管態(tài)在管態(tài)下運(yùn)行,能執(zhí)行包括特權(quán)指令在內(nèi)的。目態(tài)又稱為用戶態(tài)或常態(tài),外層用戶程序權(quán)指令、CPU能識(shí)別出程序非法使用指令目態(tài)--管態(tài)在目態(tài)下運(yùn)行,不可執(zhí)行特權(quán)指令。若出現(xiàn)特,形成一個(gè)程序性中斷事件,中止程序的執(zhí)行。其轉(zhuǎn)換的唯一途徑是通過(guò)中斷管態(tài)--目態(tài)可用設(shè)置PSW(修改程序狀態(tài)字)可實(shí)現(xiàn)2.中斷機(jī)制(1)中斷的定義:所謂中斷是指系統(tǒng)發(fā)生某一事件后,CPU暫停正在執(zhí)行的程序轉(zhuǎn)去執(zhí)稱為中斷處理程序,產(chǎn)生中斷信號(hào)的那個(gè)部件稱為中斷源。硬件的中斷機(jī)構(gòu)與處理這些中斷的程序統(tǒng)稱為中斷系統(tǒng)。行處理該事件的程序過(guò)程,處理中斷事件的程序(2)中斷的類型不同的計(jì)算機(jī)系統(tǒng).其產(chǎn)生中斷的原因及其處理方式均不同,通常將系統(tǒng)內(nèi)的所有中斷分為若干類。①根據(jù)中斷信號(hào)的含義和功能分為以下五類;機(jī)器故障中斷:因機(jī)器發(fā)生錯(cuò)誤(電源故障,內(nèi)存硬件故障,以便進(jìn)入診斷程序讀數(shù)錯(cuò)誤等)而產(chǎn)生的中斷,用以反映。I/O中斷:由輸入/輸出設(shè)備引起的中斷,用以反映通道或外部設(shè)備工作狀態(tài)。外中斷:由各種外部事件引起的中斷,用以反映外部的要求。如時(shí)鐘的定時(shí)中斷,控制臺(tái)發(fā)控制信息等。程序性中斷:因程序中錯(cuò)誤使用指令或數(shù)據(jù)引起的中斷,用以反映程序執(zhí)行過(guò)程中發(fā)生的例外情況。如定點(diǎn)溢出,除數(shù)為0,地址越界等。訪管中斷:由于程序執(zhí)行了“訪管”指令(系統(tǒng)調(diào)用)而產(chǎn)生的中斷,用于反映用戶程序所請(qǐng)求操作系統(tǒng)為其完成某項(xiàng)工作。②根據(jù)中斷信號(hào)的來(lái)源分為兩類;也稱外中斷,指來(lái)自CPU以外事件的中斷,處理不必完全依賴當(dāng)前程序的運(yùn)行現(xiàn)場(chǎng),具有較低的中斷優(yōu)先級(jí),可被臨時(shí)屏蔽。陷入,指源自CPU內(nèi)部事件的中斷,相關(guān)的暫停均具有較高的優(yōu)先級(jí),一旦出現(xiàn)應(yīng)立即處理。中斷,是與當(dāng)前運(yùn)行程序無(wú)關(guān)的暫停事件。對(duì)它的異常,也稱內(nèi)中斷或是與當(dāng)前運(yùn)行程序事件,對(duì)其處理要依賴于當(dāng)前程序的運(yùn)行現(xiàn)場(chǎng),③根據(jù)強(qiáng)迫性中斷:正在運(yùn)行的程序所不期望的,由于輸入主要來(lái)自外部設(shè)備通道程序性中斷:運(yùn)行程序中本身的中斷,缺頁(yè)中斷,缺段中斷是否是當(dāng)前程序期望的分為兩類:某種硬件故障或外部請(qǐng)求引起的/輸出(I/O)中斷:(如溢出,地址越界)時(shí)鐘中斷控制臺(tái)中斷硬件故障自愿性中斷(訪管中斷):用戶在程序中有意識(shí)安排的中斷,是由于用戶在編制程序操作系統(tǒng)提供服務(wù),有意使用執(zhí)行I/O,創(chuàng)建進(jìn)程,分配內(nèi)存信號(hào)量操作,發(fā)送/接收消息3.中斷優(yōu)先級(jí)與中斷向量中斷優(yōu)先級(jí)指中斷裝置響應(yīng)中斷的斷優(yōu)先響應(yīng)。一般情況下,優(yōu)先級(jí)的高低順序?yàn)椋簷C(jī)器故障中斷,訪管中斷,程序性時(shí)因?yàn)橐蟆霸L管”指令(系統(tǒng)調(diào)用),使中斷發(fā)生次序,是由硬件設(shè)計(jì)時(shí)固定的規(guī)定級(jí)別高的中中斷,外部中斷,輸入輸出中斷。中斷屏蔽即禁止中斷出現(xiàn)或響應(yīng)中斷,可以改變中斷響應(yīng)的順序。二、進(jìn)程管理一、考試大綱(一)進(jìn)程與線程:1.進(jìn)程概念2.進(jìn)程的狀態(tài)與轉(zhuǎn)換3.進(jìn)程控制4.進(jìn)程組織5.進(jìn)程通信共享存儲(chǔ)系統(tǒng);消息傳遞系統(tǒng);管道通信6.線程概念與多線程模型(二)處理機(jī)調(diào)度1.調(diào)度的基本概念2.調(diào)度時(shí)機(jī)、切換與過(guò)程3.調(diào)度的基本準(zhǔn)則4.調(diào)度方式5.典型調(diào)度算法先來(lái)先服務(wù)調(diào)度算法;短作業(yè)(短任務(wù)、短進(jìn)程、短線程)優(yōu)先調(diào)度算法;時(shí)間片輪轉(zhuǎn)調(diào)度算法;優(yōu)先級(jí)調(diào)度算法;高響應(yīng)比優(yōu)先調(diào)度算法;多級(jí)反饋隊(duì)列調(diào)度算法。(三)進(jìn)程同步1.進(jìn)程同步的基本概念2.實(shí)現(xiàn)臨界區(qū)互斥的基本方法軟件實(shí)現(xiàn)方法;硬件實(shí)現(xiàn)方法3.信號(hào)量4.管程5.經(jīng)典同步問(wèn)題生產(chǎn)者—消費(fèi)者問(wèn)題;讀者—寫(xiě)者問(wèn)題;哲學(xué)家進(jìn)餐問(wèn)題。(四)死鎖1.死鎖的概念2.死鎖處理策略3.死鎖預(yù)防4.死鎖避免系統(tǒng)安全狀態(tài);銀行家算法5.死鎖的檢測(cè)和解除二、知識(shí)點(diǎn)歸納(一)進(jìn)程與線程1.進(jìn)程概念(1)前趨圖前驅(qū)圖是一個(gè)有向無(wú)循環(huán)圖,圖中的每個(gè)結(jié)點(diǎn)可以表示一條語(yǔ)句、一結(jié)點(diǎn)間的有向邊表示兩個(gè)之間存在偏序或前趨關(guān)系“”:(P必須在P開(kāi)始執(zhí)行之前完成}個(gè)程序段或進(jìn)程,={(P,)Pijij,P),記為PP,則稱P是P的若(P直接前趨,P是P的直接后繼。若存在一個(gè)jiijijij序列PP…P,則稱P是P的前趨。在前趨圖中,沒(méi)有前趨的結(jié)點(diǎn)稱為初始結(jié)點(diǎn),沒(méi)ikijk有后繼的結(jié)點(diǎn)稱為終止結(jié)點(diǎn)。(2)程序的順序執(zhí)行—個(gè)程序通常由若干個(gè)程序段所組成,它們必須按照某種先后次序來(lái)執(zhí)行,僅當(dāng)前一個(gè)操作執(zhí)行完后,才能執(zhí)行后繼操作,這類計(jì)算過(guò)程就是程序的順序執(zhí)行過(guò)程。程序順序執(zhí)行時(shí)有如下特征。1)順序性:處理機(jī)的操作嚴(yán)格按照程序所規(guī)定的順序執(zhí)行,即每一個(gè)操作必須在下一個(gè)操作開(kāi)始之前結(jié)束。2)封閉性:程序一旦開(kāi)始運(yùn)行,其執(zhí)行結(jié)果不受外界因素影響,因?yàn)槌绦蛟谶\(yùn)行時(shí)獨(dú)占系統(tǒng)的各種資源,故這些資源的狀態(tài)(除初始狀態(tài)外)只有本程序才能改變。3)可再現(xiàn)性:只要程序執(zhí)行時(shí)的初始條件和執(zhí)行環(huán)境相同,當(dāng)程序重復(fù)執(zhí)行時(shí),都將獲得(3)程序的并發(fā)執(zhí)行程序的并發(fā)執(zhí)行是指若干個(gè)程序(或程序段)同時(shí)在系統(tǒng)中運(yùn)行,這些程序(或程序段)的時(shí)間上是重疊的,即一個(gè)程序(或程序段)的執(zhí)行尚未結(jié)束,另一個(gè)程序(或程序執(zhí)行已經(jīng)開(kāi)始。程序并發(fā)執(zhí)行1)間斷性:“走走停?!?,一個(gè)程序可能走到中途停下來(lái),失去原有的2)失去封閉性:共享資源,受其他程序的控制邏輯的影響。中的數(shù)據(jù)可能被另一個(gè)程序修改,失去原有的不可再現(xiàn)性:由于失去封閉性,可重復(fù)特征。(4)進(jìn)程的定義與特征進(jìn)程的定義進(jìn)程是具有獨(dú)立功能的資源分配和調(diào)度的獨(dú)立單位。或者說(shuō),“進(jìn)程”是進(jìn)程實(shí)體的運(yùn)行進(jìn)程的特征①動(dòng)態(tài)性。進(jìn)程是程序的還表現(xiàn)為:“它由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,亡。②并發(fā)性。進(jìn)程的重要特征。執(zhí)行在段)的時(shí)有如下特征。時(shí)序關(guān)系;如:一個(gè)程序?qū)懙酱鎯?chǔ)器不變特征。3)外界環(huán)境在程序的兩次執(zhí)行期間發(fā)生變化,失去原有的1)可并發(fā)執(zhí)行的程序在一個(gè)數(shù)據(jù)集合上的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行過(guò)程。2)一次執(zhí)行過(guò)程,因此,動(dòng)態(tài)性是進(jìn)程最基本的特性。動(dòng)態(tài)性由得不到資源而暫停執(zhí)行,以及由撤銷而消這是指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存中,能在—段時(shí)間內(nèi)同時(shí)運(yùn)行。并發(fā)性是③獨(dú)立性。這是指進(jìn)程實(shí)體是—個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)中獨(dú)立獲得資源和獨(dú)立調(diào)度的基本單位。④異步性。這是指進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)。⑤結(jié)構(gòu)特征。從結(jié)構(gòu)上看,進(jìn)程實(shí)體是由程序段、數(shù)據(jù)段及進(jìn)程控制塊三部分組成,有人把這三部分統(tǒng)稱為“進(jìn)程映像”。2.進(jìn)程的狀態(tài)與轉(zhuǎn)換(1)進(jìn)程有三種基本狀態(tài):1)就緒狀態(tài)。當(dāng)進(jìn)程已分配到除CPU以外的所有必要資源,只要獲得CPU,便可立即執(zhí)行。2)執(zhí)行狀態(tài)。進(jìn)程已獲得CPU,正在執(zhí)行,單處理機(jī)系統(tǒng)中,只有一個(gè)進(jìn)程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài)。進(jìn)程不具備運(yùn)行的條件,如申請(qǐng)的資源(除CPU外)未滿足,等待某個(gè)事件等。(2)進(jìn)程狀態(tài)的轉(zhuǎn)換進(jìn)程在運(yùn)行期間不斷地從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài),進(jìn)程的各種調(diào)度狀態(tài)依據(jù)一定的條件而發(fā)生變化,它可以多次處于就緒狀態(tài)和執(zhí)行狀態(tài),也可多次處于阻塞狀態(tài),但可能排在不同的阻塞隊(duì)列。進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換如圖2.1所示。就緒時(shí)間片完I/O完成進(jìn)程調(diào)度阻塞執(zhí)行I/O請(qǐng)求圖2.1進(jìn)程的三種基本狀態(tài)及轉(zhuǎn)換(3)進(jìn)程控制塊為了管理和控制進(jìn)程的運(yùn)行,操作系統(tǒng)為每個(gè)進(jìn)程定義了—個(gè)數(shù)據(jù)結(jié)構(gòu)——進(jìn)程控制塊(PCB),存在,PCB是進(jìn)程存在的惟一標(biāo)志。時(shí),系統(tǒng)通過(guò)PCB了解進(jìn)程的一般來(lái)說(shuō),不同操作系統(tǒng)列出的內(nèi)容:標(biāo)識(shí)符:每個(gè)進(jìn)程都有惟一的進(jìn)程由系統(tǒng)為進(jìn)程分配惟—的進(jìn)程標(biāo)識(shí)號(hào)。當(dāng)前狀態(tài):說(shuō)明進(jìn)程的當(dāng)前狀態(tài),以作為進(jìn)程調(diào)度程序分配處理3)進(jìn)程隊(duì)列指針:用于記錄PCB鏈表中下一個(gè)址。為了查找方便,系統(tǒng)PCB可能組織成多個(gè)鏈表,如就緒隊(duì)列、阻塞隊(duì)列等。4)程序開(kāi)始地址:進(jìn)程執(zhí)行的開(kāi)始地址。優(yōu)先級(jí):反映進(jìn)程要求CPU的緊迫程度。優(yōu)先級(jí)高的進(jìn)程可優(yōu)先獲得處理6)CPU現(xiàn)場(chǎng)保護(hù)區(qū):當(dāng)進(jìn)程因某種原因釋放處理機(jī)時(shí),CPU現(xiàn)場(chǎng)信息被保存在該區(qū)域中,以便在進(jìn)程重新獲得處理機(jī)后能繼續(xù)執(zhí)行。7)通信信息:記錄進(jìn)程在執(zhí)行中與別的進(jìn)程所發(fā)生的信息交換情況。8)家族聯(lián)系:有的系統(tǒng)允許進(jìn)程創(chuàng)建子進(jìn)程,從而形成一個(gè)進(jìn)程家族樹(shù)。在PCB中必須指明本進(jìn)程與家族的關(guān)系,如它的子進(jìn)程與父進(jìn)程的標(biāo)識(shí)。用于記錄進(jìn)程的屬性信息。系統(tǒng)根據(jù)PCB感知進(jìn)程的當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),系統(tǒng)為該進(jìn)程建立一個(gè)PCB;當(dāng)進(jìn)程執(zhí)行現(xiàn)行狀態(tài)信息;當(dāng)進(jìn)程結(jié)束時(shí),系統(tǒng)收回其PCB,該進(jìn)程隨之消亡。中的PCB所包含的內(nèi)存多少會(huì)有些差異,但通常包括下面所l)進(jìn)程標(biāo)識(shí)符,以區(qū)別于系統(tǒng)內(nèi)部的其他進(jìn)程。在進(jìn)程創(chuàng)建時(shí),2)進(jìn)程機(jī)的依據(jù)。PCB的地中的5)進(jìn)程機(jī)。PCB的過(guò)程9)占有資源清單:列出進(jìn)程所需資源及當(dāng)前已分配資源清單。3.進(jìn)程控制進(jìn)程控制的職責(zé)是對(duì)系統(tǒng)撤消、進(jìn)程的阻塞與喚醒、進(jìn)程的OS提供一組原語(yǔ)來(lái)實(shí)現(xiàn)。所謂原語(yǔ)是一種特殊的系統(tǒng)特定的功能,其特點(diǎn)是原語(yǔ)執(zhí)行(1)進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建是由創(chuàng)建原語(yǔ)實(shí)現(xiàn)的,程稱為子進(jìn)程,稱為父進(jìn)程,而構(gòu)成了進(jìn)程圖。中的所有進(jìn)程實(shí)施有效的管理,其功能包括進(jìn)程的創(chuàng)建、進(jìn)程的掛起與激活等。進(jìn)程控制一般是由OS的內(nèi)核來(lái)實(shí)現(xiàn),功能調(diào)用,原語(yǔ)是由若干條機(jī)器指令構(gòu)成的,它可以完成一個(gè)時(shí)不可被中斷,所以原語(yǔ)操作具有原子性。當(dāng)需要時(shí),進(jìn)程就可以建立一個(gè)新進(jìn)程。被創(chuàng)建的進(jìn)建立進(jìn)程的進(jìn)程子進(jìn)程又可以根據(jù)需要?jiǎng)?chuàng)建自己的子進(jìn)程,從而引起創(chuàng)建進(jìn)程的典型事件有分時(shí)系統(tǒng)中的用戶登錄、批處理系統(tǒng)中的作業(yè)調(diào)度、系統(tǒng)提供服務(wù)、應(yīng)用進(jìn)程本身的應(yīng)用請(qǐng)求等。一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建新進(jìn)程的事件后,便調(diào)用進(jìn)程創(chuàng)建原語(yǔ)creat(),按下述步驟創(chuàng)建一新進(jìn)程。①申請(qǐng)空白PCB;②為新進(jìn)程分配資源;③初始化進(jìn)程控制塊;④將新進(jìn)程插入就緒隊(duì)列。(2)進(jìn)程的終止當(dāng)進(jìn)程完成任務(wù)或者遇到異常情況和外界干預(yù)需要結(jié)束時(shí),應(yīng)通過(guò)調(diào)用進(jìn)程終止原語(yǔ)來(lái)終止進(jìn)程。終止進(jìn)程的實(shí)質(zhì)是回收PCB。具體回收過(guò)程是:①根據(jù)被終止進(jìn)程的標(biāo)識(shí)符從PCB集合中檢索出該進(jìn)程的PCB,從中讀出該進(jìn)程的狀態(tài)。②若被終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即終止該進(jìn)程的執(zhí)行并設(shè)置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止后應(yīng)重新進(jìn)行調(diào)度,選擇③若該進(jìn)程還有子孫進(jìn)程,還應(yīng)將其所有子孫進(jìn)程予以終止,以防它們成為不可控的。④將該進(jìn)程所擁有的全部資源,或者歸還其父進(jìn)程或者歸還給系統(tǒng)。⑤將被終止進(jìn)程的PCB從所在隊(duì)列中移出,等待其他程序來(lái)搜集信息(3)進(jìn)程阻塞與喚醒一新進(jìn)程,把處理機(jī)分配給它。。當(dāng)—個(gè)進(jìn)程期待的某一事件尚未出現(xiàn)時(shí),該進(jìn)樣調(diào)用阻塞原語(yǔ)block()將自己阻塞起來(lái)。阻塞原語(yǔ)的主要操作過(guò)程如下:在阻塞一個(gè)進(jìn)程時(shí),由于該進(jìn)程正處于執(zhí)行狀態(tài),故應(yīng)中斷處理機(jī),保存該進(jìn)程的CPU現(xiàn)場(chǎng),停止運(yùn)行該進(jìn)程,然后將該進(jìn)程插入到等待該事件的等待隊(duì)列中,再?gòu)木途w隊(duì)列中選擇一個(gè)新的進(jìn)程投入運(yùn)行對(duì)處于阻塞狀態(tài)的進(jìn)程,當(dāng)該進(jìn)程期待的事件出現(xiàn)時(shí),由發(fā)現(xiàn)者進(jìn)程調(diào)用喚醒原語(yǔ)wakeup()將阻塞的進(jìn)程喚醒,使其進(jìn)入就緒狀態(tài)。喚醒原語(yǔ)的主要操作如下:將被喚醒進(jìn)程。從相應(yīng)的等待隊(duì)列中移出,將狀態(tài)改為就緒并插入相應(yīng)的就緒隊(duì)列。(4)進(jìn)程的掛起與激活當(dāng)出現(xiàn)引起進(jìn)程掛起的事件時(shí),系統(tǒng)利用掛起原語(yǔ)suspend()將指定進(jìn)程或處于阻塞進(jìn)程掛起。掛起原語(yǔ)的執(zhí)行:檢查被掛起進(jìn)程的狀態(tài),若處于活動(dòng)就緒,則改為靜止就緒,若處于活動(dòng)阻塞,則改為靜止阻塞,將該進(jìn)程PCB復(fù)制到內(nèi)存指定區(qū)域,若掛起的進(jìn)程正在,則重新進(jìn)行進(jìn)程調(diào)度。當(dāng)發(fā)生激活進(jìn)程的事件時(shí),系統(tǒng)利用激活原語(yǔ)active()進(jìn)程從外存調(diào)入內(nèi)存,檢查該進(jìn)程的狀態(tài),若處于靜止就緒,則改為活動(dòng)就緒,若處于靜止。若采用搶占調(diào)度策略,則新進(jìn)程進(jìn)入就緒隊(duì)列時(shí),檢查是否要重新的執(zhí)行將指定進(jìn)程激活。激活原語(yǔ)先將阻塞,則改為活動(dòng)阻塞進(jìn)行進(jìn)程調(diào)度。4.進(jìn)程組織在—個(gè)系統(tǒng)中,通常存在著許多進(jìn)程,它們有的處于就緒狀態(tài),有的處于阻塞狀態(tài),而且阻塞的原因各不相同,為了調(diào)度和管理進(jìn)程方便起見(jiàn),需要將各進(jìn)程的進(jìn)程控制塊用適當(dāng)?shù)姆椒ńM織起來(lái)。目前常用的組織方式有鏈接方式和索引方式兩種。(1)鏈接方式:鏈接方式是將具有同一狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表,如就緒鏈表、阻塞鏈表和空白鏈表等。對(duì)其按進(jìn)程優(yōu)先級(jí)的高低排列,把優(yōu)先級(jí)高的進(jìn)程的PCB排在隊(duì)列前面。此外,可根據(jù)阻塞因的不同而把處于阻塞狀態(tài)的進(jìn)程的PCB,排成等待I/O操作完成的隊(duì)列和等待分配內(nèi)存的隊(duì)列等。如圖2.2的PCB,用其中的鏈接字鏈接成一個(gè)隊(duì)列,多個(gè)狀態(tài)中的就緒隊(duì)列常原所示。PCB14PCB23PCB30PCB48PCB5執(zhí)行指針就緒隊(duì)列指針阻塞隊(duì)列指針空閑隊(duì)列指針PCB67PCB79PCB80PCB91…圖2.2鏈接方式(2)索引方式:索引方式是系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài)建立幾張索引表,將同一狀態(tài)的進(jìn)程歸入一個(gè)索引表,并把各索引表在內(nèi)存的首地址記錄在內(nèi)存的一些專用單元中,再由索引指向相應(yīng)的進(jìn)程控制塊,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的索引表,如就緒索引表和阻塞索引表等。如圖2.3所示。PCB1PCB2PCB3PCB4PCB5PCB6PCB7執(zhí)行指針就緒索引表就緒表指針阻塞索引表阻塞表指針圖2.3索引方式5.進(jìn)程通信進(jìn)程通信是指進(jìn)程之間的信息交換。進(jìn)程互斥與同步就是一種進(jìn)程間的通信方式。由于進(jìn)程互斥與同步交換的信息量較少且效率較低,因此稱這兩種進(jìn)程通信方式為低級(jí)進(jìn)程通信方式,相應(yīng)地也將wait、signal原語(yǔ)(P、V原語(yǔ))稱為兩條低級(jí)進(jìn)程通信原語(yǔ)。下面介紹的進(jìn)程通信為高級(jí)進(jìn)程通信方式。所謂高級(jí)進(jìn)程通信方式是指進(jìn)程之間以較高的效率傳送大量數(shù)據(jù)。(1)進(jìn)程通信的類型目前,高級(jí)進(jìn)程通信方式可分為3大類:共享存儲(chǔ)器系統(tǒng)、消息傳遞系統(tǒng)以及管道通信系統(tǒng)。1)共享存儲(chǔ)器系統(tǒng)為了傳輸大量數(shù)據(jù),在存儲(chǔ)器中劃出一塊共享存儲(chǔ)區(qū),諸進(jìn)程可通過(guò)對(duì)共享存儲(chǔ)區(qū)進(jìn)行讀或?qū)憗?lái)實(shí)現(xiàn)通信。進(jìn)程在通信前,應(yīng)向系統(tǒng)申請(qǐng)建立一個(gè)共享存儲(chǔ)區(qū),并指定該共享存儲(chǔ)區(qū)的關(guān)鍵字;若該共享存儲(chǔ)區(qū)已經(jīng)建立,則將該共享存儲(chǔ)區(qū)的描述符返回給申請(qǐng)者。然后,申請(qǐng)者把獲得的共享存儲(chǔ)區(qū)附接到本進(jìn)程的地址空間上;這樣,進(jìn)程便可以像讀、寫(xiě)普通存儲(chǔ)器一樣讀、寫(xiě)共享存儲(chǔ)區(qū)。2)消息傳遞系統(tǒng)在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換以消息為單位,程序員直接利用系統(tǒng)提供的一組通信命令(原語(yǔ))來(lái)實(shí)現(xiàn)通信。操作系統(tǒng)隱藏了通信的實(shí)現(xiàn)細(xì)節(jié),大大簡(jiǎn)化,因而獲得了廣泛的應(yīng)用。消息傳遞系統(tǒng)因其實(shí)現(xiàn)方式不同可分為以下幾種①直接通信方式:發(fā)送進(jìn)程直接把消息發(fā)送給接收進(jìn)程,并將它掛在接收進(jìn)程的消息緩沖隊(duì)列上,接收進(jìn)程從消息緩沖隊(duì)列中取得消息。了通信程序編制的復(fù)雜性。②間接通信方式:發(fā)送進(jìn)程把消息發(fā)送到某個(gè)中間實(shí)體中,接收進(jìn)程從中取得消息。這種中間實(shí)體一般稱為信箱,故這種通信方式也稱為信箱通信方式。這種通信方式被廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)中,現(xiàn)在稱為電子郵件系統(tǒng)。3)管道通信管道是用于連接讀進(jìn)程和寫(xiě)進(jìn)程以實(shí)現(xiàn)它們之間通信的共享文件,向管道提供輸入的發(fā)送進(jìn)程(即寫(xiě)進(jìn)程)以字符流形式將大量的數(shù)據(jù)送入管道,而接收管道輸出的接收進(jìn)程(即讀進(jìn)程)可以從管道中接收數(shù)據(jù)。(2)消息緩沖通信消息緩沖通信是一種直接通傳方式,即發(fā)息是指一組信息,通常由消息頭和消息正文組成。在通信時(shí),發(fā)送進(jìn)程采用發(fā)送原語(yǔ)向接收進(jìn)程發(fā)送一個(gè)消息,而接收進(jìn)程則采用接收原語(yǔ)接收來(lái)自發(fā)送進(jìn)程的一個(gè)消息。發(fā)送原語(yǔ)的作是申請(qǐng)分配一個(gè)消息緩沖區(qū),然后將消息正文傳送到該緩沖區(qū)中,并向緩沖區(qū)中填寫(xiě)消息頭,再將該消息緩沖區(qū)掛到接收進(jìn)程的消息鏈上。接收原語(yǔ)的主要工作是把消息鏈上送進(jìn)程直接發(fā)送一個(gè)消息給接收進(jìn)程。所謂消主要工的消息逐個(gè)讀入到接收進(jìn)程的接收區(qū)中并進(jìn)行處理。(3)信箱通信信箱通信是一種間接通信方式。信箱是一種數(shù)據(jù)結(jié)構(gòu),其中存放信件。當(dāng)一個(gè)進(jìn)程(發(fā)送進(jìn)程)要與另時(shí)發(fā)送進(jìn)程只須把它的信件投入信箱邏輯上分成信箱頭和信箱體兩部分。信箱頭中存放有關(guān)信箱的描述。信箱體由若干—個(gè)進(jìn)程(接收進(jìn)程)通信時(shí),可由發(fā)送進(jìn)程創(chuàng)建—個(gè)鏈接兩進(jìn)程的信箱,通信信箱,接收進(jìn)程就可以在任何時(shí)走信件而不會(huì)丟失。候取格子組成,每格存放一信件,格子的數(shù)目和大小在創(chuàng)建信箱時(shí)確定。信件的傳遞可以是單向的,也可以是雙向的。在單向信箱通信方式中,只要信箱中有空格,發(fā)送進(jìn)程便可向信箱中投遞信件,若所有格子都已裝滿,則發(fā)送進(jìn)程或者等待,或者繼續(xù)執(zhí)行,待有空格子時(shí)再發(fā)送。類似地,只要格子中裝有信件,接收進(jìn)程便能取出一信件。若信箱為空,接收進(jìn)程或者等待,或者繼續(xù)執(zhí)行。在雙向通信方式中,信箱中既有發(fā)送進(jìn)程發(fā)出的信件,也有接收進(jìn)程的回答信件。由于發(fā)送進(jìn)程和接收進(jìn)程均以各自獨(dú)立的速度向前推進(jìn),當(dāng)發(fā)送進(jìn)程發(fā)送信件的速度超過(guò)接收進(jìn),會(huì)產(chǎn)生下溢,即接收進(jìn)程向空信箱索取信件。程的接收速度時(shí),會(huì)產(chǎn)生上溢(信箱滿)。反之這就需要在兩個(gè)進(jìn)程之間進(jìn)行同步控制,當(dāng)信箱滿時(shí)發(fā)送進(jìn)程應(yīng)等待,直至信箱有空格子時(shí)再發(fā)送;對(duì)接收進(jìn)程,當(dāng)信箱空時(shí),它也應(yīng)等待,直至信箱中有信件時(shí)再接收。信箱通信方式中也使用原語(yǔ)操作,如創(chuàng)建信箱原語(yǔ)、撤消信箱原語(yǔ)、發(fā)送與接收原語(yǔ)等。另外,在許多時(shí)候,存在著多個(gè)發(fā)送進(jìn)程和多個(gè)接收進(jìn)程共享信箱的情況。6.線程概念與多線程模型(1)線程的基本概念自從20世紀(jì)60年代提出進(jìn)程的概念后,在操作系統(tǒng)中一直都是以進(jìn)程作為獨(dú)立運(yùn)行的基本單位,在操作系統(tǒng)中引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)執(zhí)行,以改善資源利用率及提高系統(tǒng)吞吐量;到80年代中期,人們提出了比進(jìn)程更小的獨(dú)立運(yùn)行的基本單位——線程,在操作系統(tǒng)中引入線程,是為了減少程序并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷,進(jìn)一步提高系統(tǒng)度,提高系統(tǒng)吞吐量,使操作系統(tǒng)具有更好的并發(fā)性。線程的定義有以下幾種提法,這些提法可以相互補(bǔ)充。(1)線程是進(jìn)程內(nèi)的一個(gè)執(zhí)行單元。(2)線程是進(jìn)程內(nèi)的一個(gè)可調(diào)度實(shí)體。(3)線程是程序(或進(jìn)程)中相對(duì)獨(dú)立的(4)線程是執(zhí)行的上下文,其含義是執(zhí)行的現(xiàn)場(chǎng)數(shù)據(jù)和其他調(diào)度所需的信(5)線程是進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的、可調(diào)度的執(zhí)行單元。線程是進(jìn)程的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自資源,只擁有—點(diǎn)在運(yùn)行時(shí)必不可少的資源(如程序計(jì)數(shù)器、一組寄存器和棧),但它可以與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程;內(nèi)程序并發(fā)執(zhí)行的程—個(gè)控制流序列。息。己基本上不擁有同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。(2)線程的實(shí)現(xiàn)機(jī)制對(duì)于通常的進(jìn)程,不論是系統(tǒng)進(jìn)程程的調(diào)度。因此,我們說(shuō),不論什么進(jìn)程都是與內(nèi)核有關(guān)的,是在對(duì)于線程來(lái)說(shuō),則可分為兩類:一類是內(nèi)核支持線程,它們是依賴于內(nèi)核的。即無(wú)論是在用還是用戶進(jìn)程,在進(jìn)行切換時(shí)都要依賴于內(nèi)核中進(jìn)內(nèi)核支持下進(jìn)行切換的,戶進(jìn)程中的線程,中保留了一張線程控制類是用戶級(jí)線程。它僅存在調(diào)用來(lái)實(shí)現(xiàn),由應(yīng)用進(jìn)程利用線程這種線程與內(nèi)核無(wú)關(guān)。相應(yīng)地,內(nèi)核也并不知道有用戶級(jí)線程的存在。種線程各有優(yōu)缺點(diǎn),因此,如果將兩種方法結(jié)合起來(lái),則可得到兩者的全部?jī)?yōu)點(diǎn),將兩種方法結(jié)合起來(lái)的系統(tǒng)稱之為多線程的操作系統(tǒng)。內(nèi)核支持多線程的建立、調(diào)度與管理。又提供使用線程庫(kù)的便利,允許用戶應(yīng)用程序建立、調(diào)度和管理用戶級(jí)的線程。還是系統(tǒng)進(jìn)程中的線程,它們的創(chuàng)建、撤銷和切換都由內(nèi)核實(shí)現(xiàn)。在內(nèi)核塊,內(nèi)核根據(jù)該控制塊而感知該線程的存在并對(duì)線程進(jìn)行控制。另一于用戶級(jí)中,對(duì)于這種線程的創(chuàng)建、撤銷和切換,都不利用系統(tǒng)庫(kù)提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來(lái)控制。因而這兩同時(shí),系統(tǒng)中(二)處理機(jī)調(diào)度1.調(diào)度的基本概念道程序環(huán)境下,進(jìn)程數(shù)目往往多于處理機(jī)數(shù)目,這就要求系統(tǒng)能按某種算法,動(dòng)態(tài)地把處理機(jī)分配給就緒隊(duì)列中的一個(gè)進(jìn)程,分配處理機(jī)的任務(wù)是由處理機(jī)調(diào)度程序完成業(yè)從提交開(kāi)始直至完成,往往經(jīng)歷下述三級(jí)調(diào)度:(1)高級(jí)調(diào)度高級(jí)調(diào)度又稱宏觀調(diào)度、作處于后備狀態(tài)的作業(yè)中選擇一個(gè)或多個(gè)作相應(yīng)的進(jìn)程,再將新創(chuàng)建的進(jìn)程排在就緒隊(duì)列上,準(zhǔn)備執(zhí)行。高級(jí)調(diào)度的運(yùn)行低,通常為幾分鐘—次。在多的。一個(gè)作業(yè)調(diào)度或長(zhǎng)程調(diào)度,其主要任務(wù)是按一定的原業(yè),給它們分配內(nèi)存、輸入輸出設(shè)備等必要的資源,頻率較則從外存上并建立(2)低級(jí)調(diào)度低級(jí)調(diào)度又稱進(jìn)程調(diào)度、短程調(diào)度或微觀調(diào)度,其主要任務(wù)是按照某種策略和方法從就緒隊(duì)列中選取一個(gè)進(jìn)程,將處理機(jī)分配給它。進(jìn)程調(diào)度的運(yùn)行頻率很高,一般幾十毫秒要運(yùn)行一次。(3)中級(jí)調(diào)度中級(jí)調(diào)度又稱中程調(diào)度或交換調(diào)度,引入中級(jí)調(diào)度的目的是為了提高內(nèi)存利用率和系統(tǒng)吞吐量。其主要任務(wù)是按照給定的原則和策略,將處于外存對(duì)換區(qū)中的重又具備運(yùn)行條件的進(jìn)程調(diào)入內(nèi)存,或?qū)⑻幱趦?nèi)存的暫時(shí)不能運(yùn)行的進(jìn)程交換到外存對(duì)換區(qū)。2.調(diào)度時(shí)機(jī)、切換與過(guò)程(1)引起進(jìn)程調(diào)度的因素主要有:①正在執(zhí)行的進(jìn)程執(zhí)行完畢,或因發(fā)生某事件而不能再繼續(xù)執(zhí)行;②執(zhí)行中的進(jìn)程因提出I/O請(qǐng)求而暫停執(zhí)行;③在進(jìn)程通信或同步過(guò)程中執(zhí)行了某種原語(yǔ)操作,如wait原語(yǔ)、block原語(yǔ)、wakeup原語(yǔ)等;④當(dāng)進(jìn)程發(fā)現(xiàn)調(diào)度標(biāo)志已設(shè)置,即系統(tǒng)中某進(jìn)程的優(yōu)先級(jí)已高于當(dāng)前執(zhí)行進(jìn)程的優(yōu)先級(jí),系統(tǒng)⑤各進(jìn)程按時(shí)間片運(yùn)行,當(dāng)一個(gè)時(shí)間片用完后,便停止該進(jìn)程的(2)進(jìn)程切換過(guò)程執(zhí)行完系統(tǒng)調(diào)用功能從核心態(tài)返回用戶態(tài)時(shí),會(huì)調(diào)用優(yōu)先級(jí)高的進(jìn)程新進(jìn)行調(diào)度。執(zhí)行。執(zhí)行而重從進(jìn)程A切換到進(jìn)程B的過(guò)程為:當(dāng)系統(tǒng)A的代碼,若此時(shí)發(fā)生鐘中斷或系統(tǒng)調(diào)用進(jìn)入OS核心,然后保存進(jìn)程B的上下文(CPU寄存器和一些表格的當(dāng)前指針),最后轉(zhuǎn)到用戶態(tài)執(zhí)行進(jìn)程3.調(diào)度的基本準(zhǔn)則選擇調(diào)度方式和算法的準(zhǔn)則,有的是面向用戶的,有的是面向系統(tǒng)的。(1)面向用戶的準(zhǔn)則正在用戶態(tài)執(zhí)行進(jìn)程A的上下文,再恢復(fù)B的代碼。進(jìn)程切換,首先通過(guò)時(shí)進(jìn)程①周轉(zhuǎn)時(shí)間短。通常把周轉(zhuǎn)時(shí)間的長(zhǎng)短作為評(píng)價(jià)批處理系統(tǒng)的性能。周轉(zhuǎn)時(shí)間是指從作業(yè)被提交給系統(tǒng)開(kāi)始,直到作業(yè)完成為止的這段時(shí)間間隔。1nT[T]n設(shè)Ti是第i作業(yè)的周轉(zhuǎn)時(shí)間,則平均周轉(zhuǎn)時(shí)間描述為:。作業(yè)的周轉(zhuǎn)時(shí)ii1間T與系統(tǒng)為它提供服務(wù)的時(shí)間Ts之比,即W=T/T,稱為帶權(quán)周轉(zhuǎn)時(shí)間,平均帶權(quán)周轉(zhuǎn)時(shí)s1T]nTnW[i。間表示為:i1si②響應(yīng)時(shí)間快。常把響應(yīng)時(shí)間的長(zhǎng)短作為評(píng)價(jià)分時(shí)系統(tǒng)的用戶通過(guò)鍵盤(pán)提交一個(gè)請(qǐng)求開(kāi)始,直至系統(tǒng)首次產(chǎn)生響應(yīng)為止的時(shí)間。③截止時(shí)間的保證。這是評(píng)價(jià)實(shí)時(shí)系統(tǒng)性能的重要指標(biāo)。所謂截止時(shí)間,是須開(kāi)始執(zhí)行的最遲時(shí)間,或必須完成的最遲時(shí)間。④優(yōu)先權(quán)準(zhǔn)則。在批處理、分時(shí)和實(shí)時(shí)系統(tǒng)中,可遵循優(yōu)先權(quán)準(zhǔn)則,以便讓某些緊急的作業(yè)能得到及時(shí)處理,在較嚴(yán)格的場(chǎng)合,還需選擇搶占式調(diào)度方式。性能。所謂響應(yīng)時(shí)間,是從指某任務(wù)必4.調(diào)度方式所謂進(jìn)程調(diào)度方需要進(jìn)行處理,即有優(yōu)先級(jí)更高的進(jìn)程進(jìn)入就緒隊(duì)列,式。(1)搶占方式。搶占方式又稱剝奪方式、可剝奪方式。這種調(diào)度方式是指當(dāng)某一個(gè)進(jìn)程正在處理機(jī)上執(zhí)行時(shí),若有某個(gè)更為重要或緊迫的進(jìn)程此時(shí)如何分配處理機(jī)。通常有兩種進(jìn)程調(diào)度方式是指當(dāng)一個(gè)進(jìn)程正在處理機(jī)上執(zhí)行時(shí),若有某個(gè)更為重要或緊迫的進(jìn)程需要使用處理機(jī),則立即暫停正在執(zhí)行的進(jìn)程,將處理機(jī)分配給更重要或緊迫的進(jìn)程。(2)非搶占方式。非搶占方式又稱非剝奪方式、不剝奪方式、不可搶占力式。這種調(diào)度方式是指當(dāng)一個(gè)進(jìn)程正在處理機(jī)上執(zhí)行時(shí),即使有某個(gè)更為重要或緊迫的進(jìn)程進(jìn)入就緒隊(duì)列,仍然讓正在執(zhí)行的進(jìn)程繼續(xù)執(zhí)行,直到該進(jìn)程完成或發(fā)生某種事件而進(jìn)入阻塞狀態(tài)時(shí),才把處理機(jī)分配給更為重要或緊迫的進(jìn)程。5.典型調(diào)度算法調(diào)度算法是指根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。對(duì)于不同的系統(tǒng)和系統(tǒng)目標(biāo),通常采用不同的調(diào)度算法。典型的調(diào)度算法有以下幾種:(1)先來(lái)先服務(wù)調(diào)度算法先來(lái)先服務(wù)(FCFS)調(diào)度算法是一種最簡(jiǎn)單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度,在作業(yè)調(diào)度中,每次調(diào)度都從后備作業(yè)中,選擇一個(gè)或多個(gè)最先進(jìn)入該隊(duì)列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源,創(chuàng)建進(jìn)程;用于進(jìn)程調(diào)度時(shí),是按照進(jìn)程進(jìn)入就緒隊(duì)列的先后次序來(lái)分配處理機(jī)。先來(lái)先服務(wù)算法采用非剝奪的調(diào)度方式,即一旦—個(gè)進(jìn)程占有處理機(jī),它就一直運(yùn)行下去,直到該進(jìn)程完成其工作或因等待某一事件而不能繼續(xù)執(zhí)行時(shí)才釋放處理機(jī)。(2)短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法可以分別用于作業(yè)調(diào)度和進(jìn)程調(diào)度,短作業(yè)優(yōu)先(SJF)調(diào)度算法,是從后備對(duì)列中選擇一個(gè)或若干個(gè)估計(jì)運(yùn)行時(shí)間最短的作業(yè),將它們調(diào)入內(nèi)存運(yùn)行。而短進(jìn)程優(yōu)先(SPF)調(diào)度算法,是從就緒隊(duì)列中選出一估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它。(3)時(shí)間片輪轉(zhuǎn)調(diào)度算法在時(shí)間片輪轉(zhuǎn)調(diào)度算法中,系統(tǒng)將所有就緒進(jìn)程按到達(dá)時(shí)間的先后次序排成一個(gè)隊(duì)列,進(jìn)程調(diào)度程序總是選擇隊(duì)列中的第一個(gè)進(jìn)程執(zhí)行,并規(guī)定執(zhí)行一定時(shí)間,該時(shí)間稱為時(shí)間片。當(dāng)該進(jìn)程用完這一時(shí)間片時(shí),系統(tǒng)將它送至就緒隊(duì)列隊(duì)尾,再把處理機(jī)分配給下一個(gè)就緒進(jìn)程。這樣,處于就緒隊(duì)列中的進(jìn)程,就可以依次輪流地獲得一個(gè)時(shí)間片的處理時(shí)間,然后回到隊(duì)列尾部,如此不斷循環(huán),直至完成為止。(4)優(yōu)先級(jí)調(diào)度算法優(yōu)先級(jí)調(diào)度算法是一種常用的進(jìn)程調(diào)度算法,其基本思想是把處理機(jī)分配給優(yōu)先級(jí)最高的進(jìn)程,該算法的核心問(wèn)題是如何確定進(jìn)程的優(yōu)先級(jí)。進(jìn)程的優(yōu)先級(jí)用于表示進(jìn)程的重要性及運(yùn)行的優(yōu)先性。進(jìn)程優(yōu)先級(jí)通常分為兩種:靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)。靜態(tài)優(yōu)先級(jí)是在創(chuàng)建進(jìn)程時(shí)確定的,確定之后在整個(gè)進(jìn)程運(yùn)行期間不再改變。動(dòng)態(tài)優(yōu)先級(jí)是指在創(chuàng)建進(jìn)程時(shí),根據(jù)進(jìn)程的特點(diǎn)及相關(guān)情況確定—個(gè)優(yōu)先級(jí),在進(jìn)程運(yùn)行過(guò)程中再根據(jù)情況的變化調(diào)整優(yōu)先級(jí)?;趦?yōu)先級(jí)的調(diào)度算法還可按調(diào)度方式不同分為非剝奪優(yōu)先級(jí)調(diào)度算法和可剝奪優(yōu)先級(jí)調(diào)度算法。非剝奪優(yōu)先級(jí)調(diào)度算法的實(shí)現(xiàn)思想是系統(tǒng)一旦將處理機(jī)分配給就緒隊(duì)列中優(yōu)先級(jí)最高的進(jìn)程后,該進(jìn)程便一直運(yùn)行下去,直到由于其自身的原因(任務(wù)完成或等待事件)主動(dòng)讓出處理機(jī)時(shí),才將處理機(jī)分配給另一個(gè)更高優(yōu)先級(jí)的進(jìn)程??蓜儕Z優(yōu)先級(jí)調(diào)度算法的實(shí)現(xiàn)思想是將處理機(jī)分配給優(yōu)先級(jí)最高的進(jìn)程,使之運(yùn)行。在進(jìn)程運(yùn)行過(guò)程中,一旦出現(xiàn)了另一個(gè)優(yōu)先級(jí)更高的進(jìn)程時(shí),進(jìn)程調(diào)度程序就停止原運(yùn)行進(jìn)程,而將處理機(jī)分配給新出現(xiàn)的高優(yōu)先級(jí)進(jìn)程。(5)高響應(yīng)比優(yōu)先調(diào)度算法此算法是先來(lái)先服務(wù)算法和短作業(yè)優(yōu)先算法的折衷,為每個(gè)作業(yè)引入一個(gè)動(dòng)態(tài)優(yōu)先權(quán)(響應(yīng)比),使作業(yè)的優(yōu)先級(jí)隨著等待時(shí)間的增加而提高,響應(yīng)比的計(jì)算公式為:響應(yīng)比=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間(4)多級(jí)反饋隊(duì)列調(diào)度算法多級(jí)反饋隊(duì)列調(diào)度算法可以滿足各種類型進(jìn)程的需要,是目前公認(rèn)的一種較好的調(diào)度算法,實(shí)現(xiàn)思想如下:第一,設(shè)置多個(gè)就緒隊(duì)列,并為每個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。第1個(gè)隊(duì)列優(yōu)先級(jí)最高,第2個(gè)隊(duì)列次之,其余隊(duì)列的優(yōu)先級(jí)逐個(gè)降低。每個(gè)隊(duì)列中進(jìn)程執(zhí)行的時(shí)間片大小也各不相同,進(jìn)程所在隊(duì)列的優(yōu)先級(jí)越高,其相應(yīng)的時(shí)間片就越短。通常,第i+1個(gè)隊(duì)列的時(shí)間片是第i個(gè)隊(duì)列時(shí)間片的兩倍。第二,當(dāng)一個(gè)新進(jìn)程進(jìn)入系統(tǒng)時(shí),首先將它放入第一個(gè)隊(duì)列的末尾,按先來(lái)先服務(wù)的原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如能在此時(shí)間片內(nèi)完成,可便準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚未調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二個(gè)隊(duì)列末尾,再同樣地按照先來(lái)先服務(wù)原則等待調(diào)度執(zhí)行;如果它在第二個(gè)隊(duì)列個(gè)運(yùn)行一個(gè)時(shí)間片后仍未再以同法轉(zhuǎn)入第3個(gè)隊(duì)列。如此下去,最后一個(gè)隊(duì)列中使用時(shí)間片輪轉(zhuǎn)調(diào)度算法。第三,僅當(dāng)?shù)谝粋€(gè)隊(duì)列空閑時(shí),調(diào)度程序才調(diào)度第二個(gè)隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?至(i-1)個(gè)隊(duì)列均為空時(shí),才會(huì)調(diào)度第i個(gè)隊(duì)列中的進(jìn)程運(yùn)行。當(dāng)處理機(jī)正在為第i個(gè)隊(duì)列中的某進(jìn)程服務(wù)時(shí),若又有新進(jìn)程進(jìn)入優(yōu)先級(jí)較高的隊(duì)列中,則此時(shí)新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正樣方在執(zhí)行的進(jìn)程放回第i個(gè)隊(duì)列末尾,重新將處理機(jī)分配給新進(jìn)程。(三)進(jìn)程同步1.進(jìn)程同步的基本概念進(jìn)程同步的主要任務(wù):使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。(1)進(jìn)程間的兩種制約關(guān)系①間接相互制約關(guān)系。源于資源共享,同處于一個(gè)系統(tǒng)中的進(jìn)程,必然共享某種系統(tǒng)資源,如共享CPU、共享I/O設(shè)備等,如兩個(gè)進(jìn)程A和B,若系統(tǒng)已將惟一的打印機(jī)分配給B,此時(shí)如果A進(jìn)程提出打印請(qǐng)進(jìn)程由阻塞改為就緒狀態(tài)。此時(shí)進(jìn)程同步的主要任務(wù)是保證諸進(jìn)程能互斥地訪問(wèn)臨界資源為此,系統(tǒng)中的資源應(yīng)不允許用戶進(jìn)程直接使用,而應(yīng)有系統(tǒng)統(tǒng)一分配相互制約關(guān)系。源于進(jìn)程合作,此時(shí)進(jìn)程同步的主要任務(wù)是保證相互合作的諸進(jìn)程在執(zhí)行次序上的協(xié)調(diào),不會(huì)出現(xiàn)與時(shí)間有關(guān)的差錯(cuò)(2)臨界資源和臨界區(qū)在計(jì)算機(jī)中有許多資源一次只能允許的資源稱為臨界資源。如打印機(jī)和一些共享變量進(jìn)程中訪問(wèn)臨界資源的那段代碼稱為臨界區(qū)(3)同步機(jī)制應(yīng)遵循的準(zhǔn)則①空閑讓進(jìn)。當(dāng)沒(méi)有進(jìn)程處于臨界區(qū)時(shí),可以允許一個(gè)請(qǐng)求進(jìn)入臨界區(qū)的進(jìn)程立即入自己的臨界區(qū)則等待。當(dāng)已有進(jìn)程進(jìn)入自己的臨界區(qū)時(shí),意味著相應(yīng)的臨界資源正被訪問(wèn),因而所有其他試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待,以保證諸進(jìn)程互斥地訪問(wèn)臨界資源③有限等待。對(duì)要求訪問(wèn)臨界資源的進(jìn)程,應(yīng)保證該進(jìn)程能在有效時(shí)間內(nèi)進(jìn)入自己臨界區(qū),以免陷入“死等”狀態(tài)權(quán)等待。當(dāng)進(jìn)程不能進(jìn)入自己求時(shí),則進(jìn)程A只能阻塞;一旦B將打印機(jī)釋放,才能使A,。②直接。一個(gè)進(jìn)程使用,我們把一次僅允許一個(gè)進(jìn)程使用。。進(jìn)。②忙。的。④讓的臨界區(qū)時(shí),應(yīng)立即釋放處理機(jī),以免進(jìn)程陷入“忙等”。2.實(shí)現(xiàn)臨界區(qū)互斥的基本方法臨界區(qū)互斥的實(shí)現(xiàn)既可以用軟件的方法,也可以用硬件的方法。下面對(duì)這兩種方法進(jìn)行介紹。(1)軟件方法用軟件方法解決互斥和同步問(wèn)題較復(fù)雜,為了說(shuō)明將介紹的正確算法中某些變量設(shè)置的必要性,首先給出兩個(gè)不正確算法。1)不正確算法1兩個(gè)進(jìn)程(P0,P1)共享一個(gè)公用變量turn,turn=i時(shí)進(jìn)程Pi可進(jìn)入臨界區(qū)。進(jìn)程Pi的結(jié)構(gòu)如下:(turn初值為0或1無(wú)關(guān)緊要。i和j分別為0或1,i=1—j。repeatwhileturn<>idoskip;臨界區(qū);turn:=j;其他代碼;untilfalse;該算法滿足互斥性要求,但它要求執(zhí)行臨界區(qū)的進(jìn)程必須嚴(yán)格地交替進(jìn)行,若turn=0且P1希望進(jìn)入臨界區(qū),盡管P0已用完并退出臨界區(qū),該算法也不能讓P1進(jìn)入其臨界區(qū)運(yùn)行。2)不正確算法2不正確算法1的問(wèn)題在于,它只記住了哪個(gè)進(jìn)程允許進(jìn)入它的臨界區(qū),但沒(méi)有記錄每個(gè)進(jìn)程的狀態(tài)。為了避免這種情況,可以用下面的數(shù)組來(lái)代替變量varflarg:ray[0..1]ofboolean;該數(shù)組的每個(gè)元素的初值均為false。若且flag[i]為turn,則表示進(jìn)程般結(jié)構(gòu)為:turn:Pi正在其臨界區(qū)執(zhí)行。進(jìn)程Pi的一repeatwhileflag[j]doskip;flag[i]:=true;臨界區(qū);flag[i]:=false;剩余區(qū);untllfalse;這里,首先并進(jìn)入臨界區(qū)。當(dāng)離開(kāi)臨界區(qū)時(shí),然而該算法并未保證一次只有一個(gè)進(jìn)程while語(yǔ)句并發(fā)現(xiàn)flag[1]=falsewhile語(yǔ)句并發(fā)現(xiàn)flag[0]=falseflag[1]為trueflag[0]為true于是,P0與P1都進(jìn)入了臨界區(qū),從而違反了互斥的要只針對(duì)雙進(jìn)程該算法將上述兩種不正確算法中的有利思想結(jié)合在一ofboolean;turn:0..1最初flag[0]=flag[1]=false,是無(wú)關(guān)緊要的。進(jìn)程Pi的一般結(jié)構(gòu)為:查看是否有另一進(jìn)程又置其flag為內(nèi)執(zhí)行。例如考慮以下在其臨界區(qū)中,若有則等待;否則置本進(jìn)程的flag為false,以允許另一進(jìn)程進(jìn)入執(zhí)行序列:true,其臨界區(qū)。在其臨界區(qū)T0:P0進(jìn)入;T1:P1進(jìn)入;T2:P1置并進(jìn)入臨界區(qū);T3:P0置并進(jìn)入臨界區(qū)進(jìn)入。求。3)正確算法()起。進(jìn)程間共享兩個(gè)共用變量:varflag:array[0..1];turn的初值repeatflag[i]:=true;turn:=j;;while(flag[j]andturn=j)doskip;臨界區(qū);flag[i]:=false;剩余區(qū);untifalse;(2)硬件方法解決互斥問(wèn)題:1)中斷屏蔽方法當(dāng)一個(gè)進(jìn)程正在使用處理器執(zhí)行它的臨界區(qū)代碼時(shí),要防止其他進(jìn)程再進(jìn)入其臨界區(qū)訪問(wèn)的最簡(jiǎn)單方法是禁止一切中斷發(fā)生,或稱之為屏蔽中斷、關(guān)中斷。因?yàn)镃PU只在發(fā)生中斷時(shí)引起進(jìn)程切換,屏蔽中斷就能保證當(dāng)前運(yùn)行進(jìn)程將臨界區(qū)代碼順利地執(zhí)行完,從而保證了互斥的正確實(shí)現(xiàn),然后再開(kāi)中斷。下面是用中斷屏蔽方法實(shí)現(xiàn)互斥的典型模式:…關(guān)中斷;臨界區(qū);開(kāi)中斷;…并關(guān)中斷方法來(lái)實(shí)現(xiàn)過(guò)程間互斥,既簡(jiǎn)單又有效。但它存在一些不足,如該法限制了處理器交替執(zhí)行程序的能力,其執(zhí)行的效率將會(huì)明顯降低;對(duì)于核心來(lái)說(shuō),當(dāng)它在執(zhí)行更新變量或列表的幾條指令期間將中斷關(guān)掉是很方便的,但將關(guān)中斷的權(quán)力交給用戶進(jìn)程則很不明智,若—個(gè)進(jìn)程關(guān)中斷之后不再開(kāi)中斷,則系統(tǒng)可能會(huì)因此終止。2)硬件指令方法許多計(jì)算機(jī)中都提供了專門(mén)的硬件指令,完成對(duì)一個(gè)字或字節(jié)中的內(nèi)容進(jìn)行檢查和修改,或交換兩個(gè)字或字節(jié)的內(nèi)容的功能。用一條指令來(lái)完成對(duì)共享變量的檢查和修改兩個(gè)功能,這樣中斷不可能發(fā)生,所以不會(huì)影響共享變量數(shù)據(jù)的完整性。實(shí)現(xiàn)這種功能的硬件指令有兩種:①TS(Test-and-set)指令。該指令的功能是讀出指定標(biāo)志后把該標(biāo)志設(shè)置為真。booleanTS(boolean*lock){booleanold;old=*lock;*lock=true;returnold;}為了實(shí)現(xiàn)多個(gè)進(jìn)程對(duì)臨界資源的互斥訪問(wèn),可以為每個(gè)臨界資源設(shè)置一個(gè)共享的布爾變量lock,表示資源的兩種狀態(tài):true表示正被占用,false表示空閑,初值為false。在進(jìn)程訪問(wèn)臨界資源之前,利用TS檢查和修改標(biāo)志lock;若有進(jìn)程在臨界區(qū),則重復(fù)檢查,直到其他進(jìn)程退出。利用TS指令實(shí)現(xiàn)進(jìn)程互斥的算法可描述為:WhileTS(&lock)進(jìn)程的臨界區(qū)代碼CS;;Lock=false;進(jìn)程的其他代碼;②swap指令。該指令的功能是交換兩個(gè)字或字節(jié)的內(nèi)容,描述如下:Swap(boolean*a,boolean*b){Booleantemp;temp=*a;a=*b;*b=temp;}利用swap指令實(shí)現(xiàn)進(jìn)程互斥時(shí),應(yīng)為每個(gè)臨界資源設(shè)置一個(gè)共享布爾變量lock,初值為false;在每個(gè)進(jìn)程中再設(shè)置一個(gè)局部布爾變量key,用于與lock交換傳息。在進(jìn)入臨界區(qū)之前利用swap指令交換lock與key的內(nèi)容,然后檢查key的狀態(tài);若有進(jìn)程在臨界區(qū)時(shí),重復(fù)交換和檢查過(guò)程,直到其他進(jìn)程退出。利用swap指令實(shí)現(xiàn)進(jìn)程互斥的算法描述為:key=true;while(key!=false)swap(&lock,&key);進(jìn)程的臨界區(qū)代碼CS;lock=false;進(jìn)程的其他代碼;3.信號(hào)量荷蘭學(xué)者Dijkstral965年提出的信號(hào)量機(jī)制是一種卓有成效的進(jìn)程同步工具。在長(zhǎng)期且廣泛的應(yīng)用中,信號(hào)量機(jī)制又得到了很大的發(fā)展,它從整型信號(hào)量經(jīng)記錄型信號(hào)量,進(jìn)而發(fā)展為“信號(hào)量集”機(jī)制。(1)整型信號(hào)量機(jī)制整型信號(hào)是—個(gè)整型量,除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作wait(s)和signal(s)來(lái)訪問(wèn)。這兩個(gè)操作很長(zhǎng)時(shí)間以來(lái)一直被分別稱為P、V操作。Wait和signal操作可描述為:Wait(s):while(s≤0)no-op;s--;signal(s):s++;整型信號(hào)量的主要問(wèn)題是,只要s≤0,wait權(quán)等待”。(2)記錄型信號(hào)量機(jī)制除了需要一個(gè)用于代個(gè)進(jìn)程鏈表L.用于鏈接上述的所有等待進(jìn)程。操作就會(huì)不斷地測(cè)試,因而沒(méi)有做到“讓在記錄型信號(hào)量中,表資源數(shù)目的整型變量value外,還應(yīng)增加一typedefstruct{intvalue;s*L;}semaphore;相應(yīng)的signal操作可描述為:voidwait(staticsemaphores){s.value--<0)1istofproceswait和;if(s.valueblock(s.L);}voidsignal(staticsemaphores){s.value++;if(s.value<=0)wakeup(s.L);}在記錄型信號(hào)量機(jī)制中,s.value的初值表示系統(tǒng)中某類資源的數(shù)目,因而又稱為資源信號(hào)量,每次的wait操作意味著進(jìn)程請(qǐng)求一個(gè)單位的資源,因此描述為s.value--;當(dāng)s.value<0時(shí),表示資源己分配完畢,因而進(jìn)程調(diào)用block入到信號(hào)量鏈表s.L上??梢?jiàn),該機(jī)制遵循了讓權(quán)等待準(zhǔn)則。此時(shí)s.value信號(hào)量鏈表中已阻塞進(jìn)程的數(shù)目。每次signal操作表示資源數(shù)目加1。若加l后仍是s.value<=0,則表示在該信號(hào)鏈表中仍有等待該資源的進(jìn)程被阻塞,故還應(yīng)調(diào)用wakeup喚醒進(jìn)程。如果s.value的初值等于l,則此時(shí)原語(yǔ),進(jìn)行自我阻塞,放棄處理機(jī)并插的絕對(duì)值表示在該操作,表示執(zhí)行進(jìn)程釋放一個(gè)單位資源.故s.value++的信號(hào)量轉(zhuǎn)化為互斥信號(hào)量。(3)信號(hào)量的應(yīng)用1)利用信號(hào)量實(shí)現(xiàn)互斥為使多個(gè)進(jìn)程能互斥地訪問(wèn)某個(gè)臨界資源,只需為該資源設(shè)置—個(gè)互斥信號(hào)量mutex,并將其初值設(shè)置為1,然后將訪問(wèn)該資源的臨界區(qū)置于wait(mutex)和signal(mutex)之間。下面的算法描述了如何利用信號(hào)量實(shí)現(xiàn)進(jìn)程P1和P2的互斥,信號(hào)量mutex的初值為1。P1進(jìn)程P2進(jìn)程……wait(mutex);wait(mutex);criticalsection;criticalsection;signal(mutex);signal(mutex);……2)利用信號(hào)量實(shí)現(xiàn)前趨關(guān)系若干進(jìn)程為了完成一個(gè)共同任務(wù)而并發(fā)執(zhí)行。然而,這些并發(fā)進(jìn)程之間根據(jù)邏輯上的需要,有的操作可以沒(méi)有時(shí)間上的先后次序,但有的操作有一定的先后次序。我們可以用前面介紹的前趨圖來(lái)描述進(jìn)程在執(zhí)行次序上的先后關(guān)系。例如:S1、S2、S3、S4為一組合作進(jìn)程,其前驅(qū)圖如圖2.4所示,試用wait、signal操作完成這4個(gè)進(jìn)程的同步。S1S2S3S4圖2.4四個(gè)合作進(jìn)程的前趨圖圖2.4說(shuō)明任務(wù)啟動(dòng)后S1先執(zhí)行,當(dāng)S1結(jié)束后,S2、S3可以開(kāi)始執(zhí)行。S2、S3完成后,S4才能開(kāi)始執(zhí)行。為了確保這一執(zhí)行順序,設(shè)四個(gè)同步信號(hào)量f1、f2、f3、f4,其初值均為0,這四個(gè)進(jìn)程的同步描述如下:semaphoref1=0/*表示進(jìn)程S2是否可以開(kāi)始執(zhí)行*/semaphoref2=0/*表示進(jìn)程S3是否可以開(kāi)始執(zhí)行*/semaphoref3=0/*表示進(jìn)程S4是否可以開(kāi)始執(zhí)行*/semaphoref4=0/*表示進(jìn)程S4是否可以開(kāi)始執(zhí)行*/main(){cobeginS1();S2();S3();S4();coend}S1(){/*“”表示進(jìn)程中的程序代碼,下同*/Signal(f1);Signal(f2);}S2(){Wait(f1);Signal(f3);}S3(){Wait(f2);Signal(f4);}S4(){Wait(f3);Wait(f4);}4.管程雖然信號(hào)量機(jī)制是一種既方便又有效的進(jìn)程同步機(jī)制,但每個(gè)要訪問(wèn)臨界資源的進(jìn)程都必須自備同步操作wait(s)和signal(s)。這就使大量的同步操作分散在各個(gè)進(jìn)程中。這不僅給系統(tǒng)的管理帶來(lái)麻煩,而且還會(huì)因同步操作的使用不當(dāng)而導(dǎo)致系統(tǒng)死鎖。這樣,在解決上述問(wèn)題的過(guò)程中,便產(chǎn)生了一種新的同步工具——管程。(1)管程的基本概念一個(gè)管程定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進(jìn)程所執(zhí)行(在該數(shù)據(jù)結(jié)構(gòu)上)的—組操作,這能同步進(jìn)程和改變管程中的數(shù)據(jù)。由定義可知,管程由三部分組成:①局部于管程組過(guò)程;③對(duì)局部于管程的數(shù)據(jù)設(shè)置初值組操作的共享變量說(shuō)明;②對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一的語(yǔ)句。此外,過(guò)需為該管程賦予一個(gè)名字。管程具有以下特點(diǎn):1)局部于管程的數(shù)據(jù)結(jié)構(gòu),僅能被局部于管程的過(guò)程所訪問(wèn)。2)一個(gè)進(jìn)程只有通過(guò)調(diào)用管程內(nèi)的過(guò)程才能進(jìn)入管程訪問(wèn)共享數(shù)據(jù)。3)任一時(shí)刻,最多只能有一個(gè)進(jìn)程在管程中執(zhí)行。即進(jìn)程互斥地通過(guò)調(diào)用內(nèi)部過(guò)程進(jìn)入管程,當(dāng)某進(jìn)程在管程內(nèi)執(zhí)行時(shí),其他想進(jìn)入管程的進(jìn)程必須等待。(2)條件變量在利用管程實(shí)現(xiàn)進(jìn)程同步時(shí),必須設(shè)置兩個(gè)同步操作原語(yǔ)wait和signal。當(dāng)某進(jìn)程通過(guò)管程請(qǐng)求臨界資源而未能滿足時(shí),管程便調(diào)用wait原語(yǔ)使該進(jìn)程等待,并將它排在等待隊(duì)列上。僅當(dāng)另一進(jìn)程訪問(wèn)完并釋放之后,管程又調(diào)用signal原語(yǔ)喚醒等待隊(duì)列中的隊(duì)首進(jìn)程。通常,等待的原因可有多個(gè),為了區(qū)別它們,引入了條件變量condition。管程中對(duì)每個(gè)條件變量都需予以說(shuō)明,其形式為:conditionx,y;。該變量應(yīng)置于wait和盛signal之前,即可表示為x.wait和x.signalx.signal操作的作用是重新啟動(dòng)一個(gè)被阻塞的進(jìn)程,如果沒(méi)有進(jìn)程被阻塞操作不產(chǎn)生任何后果,這與信號(hào)量機(jī)制中的signal操作不同。(3)利用管程解決生產(chǎn)者。消費(fèi)者問(wèn)題利用管程方式來(lái)解決生產(chǎn)者問(wèn)題時(shí),首先為它們建立一個(gè)管程,命名為,描述如下:—consume{intin,out,count;itembuffer[n]notempty;。,則x.signal—消費(fèi)者Producer-Consumermonitorproducer;conditionotfull,entryput(item){if(count>=n)notfull.wait;buffer(in)=nextp;in=(in+1)modn;count++;ifnotempty.queuenotempty.signal;}entryget(item){if(count<=0)notempty.wait;nextc=buffer(out);out:=(out+1)modn;count--;Ifnotfull.queuenotfull.signal;}{in=out=0;count=0;}}利用管程解決生產(chǎn)者—消費(fèi)者問(wèn)題時(shí),生產(chǎn)者—消費(fèi)者可描述如下:producer(){while(1){produceraniteminextp;producer—consume.put(item);}}Consumer(){while(1){producer—consume.get(item);Cinsumertheiteminextc;}}Main(){cobegin{producer();consumer();}}5.經(jīng)典進(jìn)程的同步問(wèn)題(1)生產(chǎn)者—消費(fèi)者問(wèn)題生產(chǎn)者一消費(fèi)者問(wèn)題常發(fā)生在一組協(xié)同操作進(jìn)程中,該問(wèn)題是許多并行進(jìn)程間存在的內(nèi)在關(guān)系的一種抽象。通??擅枋鋈缦拢河幸粋€(gè)或多個(gè)生產(chǎn)者產(chǎn)生某種類型的產(chǎn)品(數(shù)據(jù)、記錄、字符等)并放置在緩沖區(qū)中,生產(chǎn)者消費(fèi)者共享一個(gè)有界緩沖池;有一個(gè)或多個(gè)消費(fèi)者從緩沖中取產(chǎn)品,每次取一項(xiàng),系統(tǒng)保證對(duì)緩沖區(qū)的重復(fù)操作,也就是說(shuō),在任何時(shí)候只有一個(gè)代理(生產(chǎn)者或消費(fèi)者)可以訪問(wèn)緩沖區(qū)。n個(gè)緩沖區(qū)(Buffer)放產(chǎn)品取產(chǎn)品PCn圖2.5生產(chǎn)者—消費(fèi)者問(wèn)題生產(chǎn)者和消費(fèi)者的同步關(guān)系表現(xiàn)為:一旦緩沖池滿時(shí),生產(chǎn)者必須等待消費(fèi)者提供空緩沖區(qū)單元,一旦緩沖池中所有單元全為空時(shí),消費(fèi)者必須等待生產(chǎn)者向緩沖區(qū)單元中放入產(chǎn)品。對(duì)于所有的代理來(lái)說(shuō),緩沖區(qū)又是臨界資源:任何一個(gè)進(jìn)程在對(duì)某個(gè)緩沖區(qū)單元進(jìn)行“存”或“取”操作時(shí)和其他進(jìn)程互斥進(jìn)行。為解決生產(chǎn)者一消費(fèi)者這一類問(wèn)題,應(yīng)該設(shè)置兩個(gè)同步信號(hào)量,一個(gè)說(shuō)明空緩沖單元的數(shù)目,用empty表其初值為有界緩沖區(qū)的大小n;另一個(gè)說(shuō)用full表互斥信號(hào)量mutex,/*滿緩沖單元的數(shù)目*/;/*空緩沖單元的數(shù)目*/示,明滿緩沖單元的數(shù)目(即產(chǎn)品數(shù)目),示,其初值為0。因?yàn)橛薪缇彌_區(qū)是一個(gè)臨界資源,必須互斥使用,所以,需要設(shè)置一個(gè)其初值為l。生產(chǎn)者一消費(fèi)者問(wèn)題的同步描述如下:semaphorefull=0;semaphoreempty=nsemaphoremutex=1;/*對(duì)有界緩沖區(qū)進(jìn)行操作的互斥信號(hào)量*/itembuffer[n]intin=out=0main(){CobeginProducer();Consumer();Coend}Producer(0{While(true){Produceaniteminextp;…Wait(empty);Wait(mutex);Buffer[in]=nextp;In=(in+1)modn;Signal(mutex);Signal(full);}}Consumer(){While(true){wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modn;signal(mutex);signal(empty);…consumtheiteminexc;}}程序中有一點(diǎn)需要讀者注意,無(wú)論在生產(chǎn)者進(jìn)程還是在消費(fèi)者進(jìn)程中,wait操作的次序都不能顛倒,否則將可能造成死鎖。(2)讀者—寫(xiě)者問(wèn)題一個(gè)數(shù)據(jù)文件或記錄(統(tǒng)稱數(shù)據(jù)對(duì)象),可被多個(gè)進(jìn)程共享。其中,有些進(jìn)程要求讀,而另一些進(jìn)程對(duì)數(shù)據(jù)對(duì)象進(jìn)行寫(xiě)或修改。我們把只要求讀的進(jìn)程稱為“reader進(jìn)程”,其他進(jìn)程稱為“writer進(jìn)程”。允許多個(gè)reader進(jìn)程同時(shí)讀一個(gè)共享對(duì)象,但決不允許—個(gè)writer進(jìn)程和其他reader進(jìn)程或writer進(jìn)程同時(shí)訪問(wèn)共享對(duì)象。所謂讀者—寫(xiě)者問(wèn)題是只保證一個(gè)writer進(jìn)程必須與其他進(jìn)程互斥地訪問(wèn)共享對(duì)象的同步問(wèn)題。為實(shí)現(xiàn)肥reader進(jìn)程個(gè)整型變量readcount便不允許writer進(jìn)程因此,僅當(dāng)readcount==0時(shí),表示尚無(wú)reader進(jìn)程在讀時(shí),reader才需要執(zhí)行wait(wmutex)操作。若wait(wmutex)操作成功,reader進(jìn)程地readcount++。同理,僅當(dāng)reader進(jìn)程在執(zhí)行了readcount--操作后其值為0時(shí),操作,以便讓writer進(jìn)程又因?yàn)閞eadcount是一個(gè)可被多個(gè)reader進(jìn)程問(wèn)的臨界資源,因此,應(yīng)為它設(shè)置—互斥信號(hào)量rmutex。讀者與writer進(jìn)程讀或?qū)憰r(shí)的互斥,設(shè)置了一個(gè)互斥信號(hào)量wmutex。再設(shè)置一以表示正在讀的進(jìn)程數(shù)目。由于只要有一個(gè)read進(jìn)程在讀,去寫(xiě),進(jìn)程便可去讀,相應(yīng)才需執(zhí)行signal(wmutex)寫(xiě)。訪—寫(xiě)者問(wèn)題可描述如下:semaphorermutex=1;wmutex=1;intreadcount=0;semaphorereader(){While(1){wait(rmutex);if(readcount==0)wait(wmutex);readcount++;signal(rmutex);……performreadoperation;……wait(rmutex);readcount--;if(readcount==0)signal(wmutex);signal(rmutex);}}writer(){while(1){wait(wmutex);performwriteoperation;signal(wmutex);}}main(){cobegin{reader();writer();}coend}(3)哲學(xué)家進(jìn)餐問(wèn)題哲學(xué)家進(jìn)餐問(wèn)題是典型的同步問(wèn)題,該問(wèn)題描述有五個(gè)哲學(xué)家圍坐在一圓桌旁,圓桌上有五個(gè)碗和五只筷子,他們的生活方式是交替地進(jìn)行思考和進(jìn)餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有拿到兩只筷子時(shí)才能進(jìn)餐,進(jìn)餐完畢,放下筷子繼續(xù)思考。經(jīng)分析,桌子上的筷子是臨界資源,為實(shí)現(xiàn)對(duì)筷子的互斥使用,可以用一個(gè)信號(hào)量表示一只筷子,由這五個(gè)信號(hào)量構(gòu)成信號(hào)量數(shù)組,描述如下:Semaphorechopstick[4];信號(hào)量初值為1,第i位哲學(xué)家的活動(dòng)描述為:While(1){wait(chopstick[i]);wait(chopstick[(i+1)mod5]);…eat;…signal(chopstick[i]);signal(chopstick[(i+1)mod5]);…think;}上述描述中,哲學(xué)家饑餓時(shí),總是先拿他左邊的筷子,成功后,再去拿他右邊的筷子,成功后進(jìn)餐,進(jìn)餐畢,放下他左右兩但有可能引起死鎖,假若五位哲學(xué)家同時(shí)饑餓而各自拿起左邊的筷子時(shí),使五個(gè)信號(hào)量chopstick均為0;當(dāng)他們邊的筷子時(shí),都將因五筷子可拿而無(wú)限等待。可法解決:1)至多允許四個(gè)哲學(xué)家同時(shí)邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐。邊的筷子,雖然上述方法可保證不會(huì)有相鄰哲學(xué)家同時(shí)進(jìn)餐,再試圖去拿右用下述方去拿左2)奇數(shù)號(hào)哲學(xué)家先拿他左邊的筷子,再去拿右邊的筷子;偶數(shù)號(hào)哲學(xué)家先取他右邊的筷子,再取他左邊的筷子。3)僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時(shí),才允許他拿起筷子進(jìn)餐,否則,一只筷子也不分給他。下面給出第2種方法的描述:Semaphorechopstick[4];信號(hào)量初值為1,第i位哲學(xué)家的活動(dòng)描述為:While(1){if(odd(i)){wait(chopstick[i]);wait(chopstick[(i+1)mod5]);}else{wait(chopstick[(i+1)mod5]);wait(chopstick[i]);}…eat;…signal(chopstick[i]);signal(chopstick[(i+1)mod5]);…think;}(四)死鎖1.死鎖的概念(1)死鎖的定義:死鎖是指多個(gè)進(jìn)程因競(jìng)爭(zhēng)系統(tǒng)資源或相互通信而處于永久阻塞狀態(tài),若無(wú)外力作用,這些進(jìn)程都將無(wú)法向前推進(jìn)。(2)死鎖產(chǎn)生的原因和必要條件死鎖產(chǎn)止的原因是競(jìng)爭(zhēng)資源和進(jìn)程的推進(jìn)順序不當(dāng)。如果系統(tǒng)中供多個(gè)進(jìn)程共享的資源如打印機(jī)、公用隊(duì)列等,其數(shù)目不足以滿足諸進(jìn)程的需要時(shí),從而可能導(dǎo)致死鎖的產(chǎn)生。雖然資源競(jìng)爭(zhēng)可能導(dǎo)致死鎖,但是資源競(jìng)爭(zhēng)并不等于死鎖,只有在進(jìn)程運(yùn)行過(guò)程中請(qǐng)求和釋放資源的順序不當(dāng)時(shí),才會(huì)導(dǎo)致死鎖。死鎖產(chǎn)生的必要條件有以下4條:(1)互斥條件:進(jìn)程對(duì)所由一個(gè)進(jìn)程占用。(2)請(qǐng)求和保持一個(gè)資源,但又提出了新的資源請(qǐng)求,分配新資源的同時(shí),進(jìn)程繼續(xù)占有已(3)不剝奪條件:進(jìn)程所獲得的資源在未使用完畢之前,不能被其他進(jìn)程強(qiáng)行奪走即只能在使用完時(shí)由進(jìn)程自己來(lái)釋放(4)環(huán)路等待條件:存在—種進(jìn)程——資源的環(huán)形鏈,鏈中的每一個(gè)進(jìn)程已獲得的資源同時(shí)被鏈中的下一個(gè)進(jìn)程所請(qǐng)求分配的資源進(jìn)行排它性控制使用,即在一段時(shí)間內(nèi)某資源只條件:指進(jìn)程已經(jīng)保持了至少分配到的資源。在等待,。。2.死鎖處理策略處理死鎖的方法主要有以下幾種:(1)預(yù)防死鎖。通過(guò)設(shè)置某些限制條件,去破壞產(chǎn)生死鎖的四個(gè)必要條件中的一個(gè)或幾個(gè)條件,來(lái)預(yù)防發(fā)生死鎖。(2)避免死鎖。在資源的動(dòng)態(tài)分配過(guò)程中,用某種方法防止系統(tǒng)進(jìn)入不安全狀態(tài),從而避免死鎖。(3)檢測(cè)死鎖這種方法并不須事先采取任何限制性措施,允許系統(tǒng)在運(yùn)行過(guò)程中發(fā)生死鎖,但可通過(guò)系統(tǒng)所設(shè)置的檢測(cè)機(jī)構(gòu),及時(shí)地檢測(cè)出死鎖的發(fā)生。(4)解除死鎖。當(dāng)檢測(cè)到系統(tǒng)中已發(fā)生死鎖時(shí),須將進(jìn)程從死鎖狀態(tài)解脫出來(lái)。3.死鎖預(yù)防預(yù)防死鎖的方法是使四個(gè)必要條件中的第2、3、4條件之一不能成立,必要條件1是由設(shè)備的固有條件所決定的,不能改變,還應(yīng)加以保證。(1)摒棄“請(qǐng)求和保持”條件采用這種方法,可使用預(yù)先資源靜態(tài)分配法。資源靜態(tài)分配法要求進(jìn)程在運(yùn)行之前—次申請(qǐng)它所需的全部資源,若系統(tǒng)有足夠資源分配給該進(jìn)程,便把其需要的所有資源分配給它,這樣,進(jìn)程在整個(gè)運(yùn)行期間,便不會(huì)再提
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年倉(cāng)儲(chǔ)調(diào)味品調(diào)料存儲(chǔ)服務(wù)合同
- 2025年家用電器擔(dān)保協(xié)議
- 2025年家電修理技能合作協(xié)議
- 2025年品牌推廣策略合約
- 2025年代理商區(qū)塊鏈技術(shù)協(xié)議
- 2025年農(nóng)村房產(chǎn)過(guò)戶協(xié)議
- 2025年環(huán)境資源贈(zèng)與合同
- 工地電工2025年度勞動(dòng)合同規(guī)范范本14篇
- 2024裝修合同中的采購(gòu)合同范本
- 2025版塑料回收利用項(xiàng)目投資合作合同范本3篇
- GB/T 44888-2024政務(wù)服務(wù)大廳智能化建設(shè)指南
- 2023-2024學(xué)年江西省萍鄉(xiāng)市八年級(jí)(上)期末物理試卷
- 四則混合運(yùn)算100道題四年級(jí)上冊(cè)及答案
- 四川省高職單招電氣技術(shù)類《電子基礎(chǔ)》歷年考試真題試題庫(kù)(含答案)
- 中級(jí)半導(dǎo)體分立器件和集成電路裝調(diào)工技能鑒定考試題庫(kù)(含答案)
- 2024年江西生物科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶解析答案
- 橋本甲狀腺炎-90天治療方案
- (2024年)安全注射培訓(xùn)課件
- 2024版《建設(shè)工程開(kāi)工、停工、復(fù)工安全管理臺(tái)賬表格(流程圖、申請(qǐng)表、報(bào)審表、考核表、通知單等)》模版
- 部編版《道德與法治》六年級(jí)下冊(cè)教材分析萬(wàn)永霞
- 酒店人防管理制度
評(píng)論
0/150
提交評(píng)論