版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/1.1在多道程序和分時(shí)環(huán)境中,多個(gè)用戶同時(shí)共享一個(gè)系統(tǒng),這種情況導(dǎo)致多種安全問(wèn)題。a.列出此類的問(wèn)題b.在一個(gè)分時(shí)機(jī)器中,能否確保像在專用機(jī)器上一樣的安全度?并解釋之。Answer:a.竊取或者復(fù)制某用戶的程序或數(shù)據(jù);沒有合理的預(yù)算來(lái)使用資源(CPU,內(nèi)存,磁盤空間,外圍設(shè)備)b.應(yīng)該不行,因?yàn)槿祟愒O(shè)計(jì)的任何保護(hù)機(jī)制都會(huì)不可避免的被另外的人所破譯,而且很自信的認(rèn)為程序本身的實(shí)現(xiàn)是正確的是一件困難的事。1.2資源的利用問(wèn)題在各種各樣的操作系統(tǒng)中出現(xiàn)。試?yán)e在下列的環(huán)境中哪種資源必須被嚴(yán)格的管理。(a)大型電腦或迷你電腦系統(tǒng)(b)與服務(wù)器相聯(lián)的工作站(c)手持電腦Answer:(a)大型電腦或迷你電腦系統(tǒng):內(nèi)存和CPU資源,外存,網(wǎng)絡(luò)帶寬(b)與服務(wù)器相聯(lián)的工作站:內(nèi)存和CPU資源(c)手持電腦:功率消耗,內(nèi)存資源1.3在什么情況下一個(gè)用戶使用一個(gè)分時(shí)系統(tǒng)比使用一臺(tái)個(gè)人計(jì)算機(jī)或單用戶工作站更好?Answer:當(dāng)另外使用分時(shí)系統(tǒng)的用戶較少時(shí),任務(wù)十分巨大,硬件速度很快,分時(shí)系統(tǒng)有意義。充分利用該系統(tǒng)可以對(duì)用戶的問(wèn)題產(chǎn)生影響。比起個(gè)人電腦,問(wèn)題可以被更快的解決。還有一種可能發(fā)生的情況是在同一時(shí)間有許多另外的用戶在同一時(shí)間使用資源。當(dāng)作業(yè)足夠小,且能在個(gè)人計(jì)算機(jī)上合理的運(yùn)行時(shí),以與當(dāng)個(gè)人計(jì)算機(jī)的性能能夠充分的運(yùn)行程序來(lái)達(dá)到用戶的滿意時(shí),個(gè)人計(jì)算機(jī)是最好的,。1.4在下面舉出的三個(gè)功能中,哪個(gè)功能在下列兩種環(huán)境下,(a)手持裝置(b)實(shí)時(shí)系統(tǒng)需要操作系統(tǒng)的支持?(a)批處理程序(b)虛擬存儲(chǔ)器(c)分時(shí)Answer:對(duì)于實(shí)時(shí)系統(tǒng)來(lái)說(shuō),操作系統(tǒng)需要以一種公平的方式支持虛擬存儲(chǔ)器和分時(shí)系統(tǒng)。對(duì)于手持系統(tǒng),操作系統(tǒng)需要提供虛擬存儲(chǔ)器,但是不需要提供分時(shí)系統(tǒng)。批處理程序在兩種環(huán)境中都是非必需的。1.5描述對(duì)稱多處理(SMP)和非對(duì)稱多處理之間的區(qū)別。多處理系統(tǒng)的三個(gè)優(yōu)點(diǎn)和一個(gè)缺點(diǎn)?Answer:SMP意味著所以處理器都對(duì)等,而且I/O可以在任何處理器上運(yùn)行。非對(duì)稱多處理有一個(gè)主處理器控制系統(tǒng),與剩下的處理器是隨從關(guān)系。主處理器為從處理器安排工作,而且I/O也只在主處理器上運(yùn)行。多處理器系統(tǒng)能比單處理器系統(tǒng)節(jié)省資金,這是因?yàn)樗麄兡芄蚕硗庠O(shè),大容量存儲(chǔ)和電源供給。它們可以更快速的運(yùn)行程序和增加可靠性。多處理器系統(tǒng)能比單處理器系統(tǒng)在軟、硬件上也更復(fù)雜(增加計(jì)算量、規(guī)模經(jīng)濟(jì)、增加可靠性)1.6集群系統(tǒng)與多道程序系統(tǒng)的區(qū)別是什么??jī)膳_(tái)機(jī)器屬于一個(gè)集群來(lái)協(xié)作提供一個(gè)高可靠性的服務(wù)器的要求是什么?Answer:集群系統(tǒng)是由多個(gè)計(jì)算機(jī)耦合成單一系統(tǒng)并分布于整個(gè)集群來(lái)完成計(jì)算任務(wù)。另一方面,多道程序系統(tǒng)可以被看做是一個(gè)有多個(gè)CPU組成的單一的物理實(shí)體。集群系統(tǒng)的耦合度比多道程序系統(tǒng)的要低。集群系統(tǒng)通過(guò)消息進(jìn)行通信,而多道程序系統(tǒng)是通過(guò)共享的存儲(chǔ)空間。為了兩臺(tái)處理器提供較高的可靠性服務(wù),兩臺(tái)機(jī)器上的狀態(tài)必須被復(fù)制,并且要持續(xù)的更新。當(dāng)一臺(tái)處理器出現(xiàn)故障時(shí),另一臺(tái)處理器能夠接管故障處理的功能。1.7試區(qū)分分布式系統(tǒng)(distributesystem)的客戶機(jī)-服務(wù)器(client-server)模型與對(duì)等系統(tǒng)(peer-to-peer)模型Answer:客戶機(jī)-服務(wù)器(client-server)模型可以由客戶機(jī)和服務(wù)器的角色被區(qū)分。在這種模型下,客戶機(jī)向服務(wù)器發(fā)出請(qǐng)求,然后服務(wù)器滿足這種請(qǐng)求。對(duì)等系統(tǒng)(peer-to-peer)模型沒有這種嚴(yán)格的區(qū)分角色,。實(shí)際上,在系統(tǒng)中的所有結(jié)點(diǎn)被看做是對(duì)等的,而且這些結(jié)點(diǎn)既可以是客戶機(jī)也可以是服務(wù)器,或者兩這都是。也許一個(gè)結(jié)點(diǎn)從另一個(gè)對(duì)等結(jié)點(diǎn)上請(qǐng)求一個(gè)服務(wù),或者,這個(gè)結(jié)點(diǎn)滿足在系統(tǒng)中的另一個(gè)結(jié)點(diǎn)的請(qǐng)求。比如,一個(gè)系統(tǒng)中的結(jié)點(diǎn)共享烹飪方法。在客戶機(jī)-服務(wù)器(client-server)模型下,所有方法都被存儲(chǔ)在服務(wù)器上。如果一個(gè)客戶機(jī)想要獲得烹飪方法,它必須向那臺(tái)服務(wù)器發(fā)出請(qǐng)求。在對(duì)等系統(tǒng)(peer-to-peer)模型下,一個(gè)結(jié)點(diǎn)可以向另外的結(jié)點(diǎn)請(qǐng)求指定的烹飪方法。存儲(chǔ)了這種烹飪方法的那個(gè)結(jié)點(diǎn)(或幾個(gè)結(jié)點(diǎn))可以把烹飪的方法提供給發(fā)出請(qǐng)求的結(jié)點(diǎn)。注意每個(gè)對(duì)等結(jié)點(diǎn)既可以扮演客戶機(jī)(發(fā)出請(qǐng)求),也可以扮演服務(wù)器(提供請(qǐng)求)。1.8如果一個(gè)由兩個(gè)結(jié)點(diǎn)組成的集群系統(tǒng)正在運(yùn)行一個(gè)數(shù)據(jù)庫(kù),試描述集群軟件可以用哪兩種方法管理存取磁盤的數(shù)據(jù),并說(shuō)明每種方法的優(yōu)點(diǎn)和缺點(diǎn)。Answer:兩種方法:非對(duì)稱集群系統(tǒng)(asymmetricclustering)和并行集群系統(tǒng)(parallelclustering).對(duì)于非對(duì)稱集群系統(tǒng),一個(gè)主機(jī)運(yùn)行這個(gè)數(shù)據(jù)庫(kù),而其它主機(jī)只是監(jiān)測(cè)這個(gè)數(shù)據(jù)庫(kù)。如果服務(wù)器出現(xiàn)故障,進(jìn)行監(jiān)測(cè)的主機(jī)就會(huì)轉(zhuǎn)變成運(yùn)行這個(gè)數(shù)據(jù)庫(kù)的主機(jī)。這是提供適當(dāng)?shù)娜哂?。然而,它沒有利用具有潛在處理能力的主機(jī)。對(duì)于并行集群系統(tǒng),數(shù)據(jù)庫(kù)可以在兩個(gè)并行的主機(jī)上運(yùn)行。在并行集群系統(tǒng)上實(shí)現(xiàn)的困難是提供一些分布式鎖機(jī)制給共享磁盤上的文件。1.9網(wǎng)絡(luò)計(jì)算機(jī)是怎樣不同與傳統(tǒng)的個(gè)人計(jì)算機(jī)的?試取出一些使用網(wǎng)絡(luò)計(jì)算機(jī)的好處的方案。Answer:網(wǎng)絡(luò)計(jì)算機(jī)是基于一臺(tái)核心的計(jì)算機(jī)作為其服務(wù)器。同時(shí),它也具有一個(gè)最小化的操作系統(tǒng)來(lái)管理這些資源。另一方面,個(gè)人計(jì)算機(jī)必須在不依賴于核心計(jì)算機(jī)的基礎(chǔ)上,能夠獨(dú)立提供所有被請(qǐng)求的功能。在行政花費(fèi)太高以與共享導(dǎo)致更高效的使用資源的情景下是精確的,在這些環(huán)境中網(wǎng)絡(luò)計(jì)算機(jī)是理想的。1.10中斷(interupt)的目的是什么?陷阱(trap)與中斷的區(qū)別是什么?陷阱可以被用戶程序(userprogram)有意地的產(chǎn)生嗎?如果可以,那目的是什么?Answer:中斷是一種在系統(tǒng)內(nèi)硬件產(chǎn)生的流量變化。中斷操作裝置是用來(lái)處理中斷請(qǐng)求;然后返回控制中斷的上下文和指令。陷阱是軟件產(chǎn)生的中斷。中斷可以被用來(lái)標(biāo)志I/O的完成,從而排除設(shè)備投票站(devicepolling)的需要。陷阱可以被用來(lái)調(diào)用操作系統(tǒng)的程序或者捕捉到算術(shù)錯(cuò)誤。1.11內(nèi)存存儲(chǔ)是被用于高速的I/O設(shè)備,其目的是為了避免增加CPU的過(guò)度運(yùn)行。(a)設(shè)備的CPU接口是怎樣與轉(zhuǎn)換器(transfer)協(xié)作的?(b)當(dāng)內(nèi)存操作完全時(shí),CPU是怎么知道的?(c)當(dāng)DMA控制器正在轉(zhuǎn)換數(shù)據(jù)時(shí),CPU是被允許運(yùn)行其它程序的。這種進(jìn)程與用戶程序的運(yùn)行沖突嗎?如果沖突的話,試描述可能引起哪種沖突?Answer:CPU可以通過(guò)寫數(shù)據(jù)到可以被設(shè)備獨(dú)立存儲(chǔ)的寄存器中來(lái)啟動(dòng)DMA操作。當(dāng)設(shè)備接收到來(lái)自CPU的命令時(shí),啟動(dòng)響應(yīng)的操作。當(dāng)設(shè)備完成此操作時(shí),就中斷CPU來(lái)說(shuō)明操作已經(jīng)完成。設(shè)備和CPU都可以被內(nèi)存同時(shí)訪問(wèn)。內(nèi)存控制器對(duì)這兩個(gè)實(shí)體以公平的方式給內(nèi)存總線提供存取。CPU可能不能同時(shí)以很快的速度配給給內(nèi)存操作,因?yàn)樗仨毴ジ?jìng)爭(zhēng)設(shè)備而使得自己存取到內(nèi)存總線中去。1.12一些計(jì)算機(jī)系統(tǒng)沒有在硬件中提供個(gè)人模式(privilegedmode)。對(duì)于這種計(jì)算機(jī)系統(tǒng)來(lái)說(shuō),可能構(gòu)成安全的操作系統(tǒng)嗎?對(duì)可能和不可能兩種情況分別給出理由。Answer:一種類型處理器的操作系統(tǒng)需要在任何時(shí)候都被控制(或監(jiān)測(cè)模式)。有兩種方法可以完成這個(gè)操作:a.所有用戶程序的軟件翻譯(像一些BASIC,Java,LISPsystems)。在軟件中,軟件解釋程序能夠提供硬件所不能提供的。b.要求所有程序都用高級(jí)語(yǔ)言編寫,以便于所以目標(biāo)代碼都被編譯出來(lái)。編譯器將會(huì)產(chǎn)生硬件忽略的防護(hù)性檢查(in-line或功能調(diào)用)。1.13給出緩存(caches)十分有用的兩個(gè)理由。他們解決了什么問(wèn)題?他們引起了什么問(wèn)題?如果緩存可以被做成裝備想要緩存的容量(例如,緩存像磁盤那么大),為什么不把它做的那么大,其限制的原因是什么?Answer:當(dāng)兩個(gè)或者更多的部件需要交換數(shù)據(jù),以與組成部件以不同的速度完成轉(zhuǎn)換時(shí),緩存是十分有用的。緩存通過(guò)在個(gè)組成部件之間提供一個(gè)中間速度的緩沖區(qū)來(lái)解決轉(zhuǎn)換問(wèn)題。如果速度較快的設(shè)備在緩存中發(fā)現(xiàn)它所要的數(shù)據(jù),它就不需要再等待速度較慢的設(shè)備了。緩存中的數(shù)據(jù)必須與組成部件中的要一致。如果一個(gè)組成部件中的數(shù)據(jù)值改變了,緩存中的這個(gè)數(shù)據(jù)也必須更新。在多進(jìn)程系統(tǒng)中,當(dāng)有不止一個(gè)進(jìn)程可能進(jìn)入同一個(gè)數(shù)據(jù)時(shí),這就成了一個(gè)顯著的問(wèn)題。一個(gè)組成部件將會(huì)被一個(gè)同等大小的組成部件所消除,但是只有當(dāng);(a)緩存和組成部件有相同狀態(tài)存儲(chǔ)能力(也就是,當(dāng)斷電的時(shí)候,組成部件還能保存它的數(shù)據(jù),緩存也一樣能保存它的數(shù)據(jù)),(b)緩存是可以負(fù)擔(dān)的起的,因?yàn)樗俣雀斓拇鎯?chǔ)器意味著更高的價(jià)格。1.14試舉例說(shuō)明在下列的進(jìn)程環(huán)境中,快速緩沖貯存區(qū)的數(shù)據(jù)保持連貫性的問(wèn)題是怎樣表明的?(a)單道程序系統(tǒng)(Single-processorsystems)(b)多道程序系統(tǒng)(Mulitiprocessorsystems)(c)分布式系統(tǒng)(Distributesystems)Answer:在單道程序系統(tǒng)(Single-processorsystems)中,當(dāng)一個(gè)進(jìn)程發(fā)布更新給快速緩沖貯存區(qū)的數(shù)據(jù)時(shí),內(nèi)存需要被更新。這些更新一種快速的或緩慢的方式執(zhí)行。在多道程序系統(tǒng)(Mulitiprocessorsystems)中,不同的進(jìn)程或許在它的本地存儲(chǔ)上存儲(chǔ)相同的內(nèi)存位置。當(dāng)更新發(fā)生時(shí),其它存儲(chǔ)的位置需要使其無(wú)效或更新。在分布式系統(tǒng)(Distributesystems)中,快速存儲(chǔ)區(qū)數(shù)據(jù)的協(xié)調(diào)不是問(wèn)題,然而,當(dāng)客戶機(jī)存儲(chǔ)文件數(shù)據(jù)時(shí),協(xié)調(diào)問(wèn)題就會(huì)被提與。1.15試描述一個(gè)機(jī)器裝置為了阻止一個(gè)程序避免修改與其它程序有聯(lián)系的內(nèi)存而執(zhí)行內(nèi)存保護(hù)。Answer:處理器可以追蹤哪個(gè)位置是與每個(gè)進(jìn)程相聯(lián)系的以與限制進(jìn)入一個(gè)程序的范圍的外面位置。信息與一個(gè)程序的內(nèi)存范圍有關(guān),它可以通過(guò)使用庫(kù),限制寄存器和對(duì)每個(gè)進(jìn)入內(nèi)存的信息執(zhí)行檢查來(lái)維持其本身。1.16哪種網(wǎng)絡(luò)結(jié)構(gòu)最適合下列環(huán)境:(a)一個(gè)寢室樓層(b)一個(gè)大學(xué)校園(c)一個(gè)州(d)一個(gè)國(guó)家。Answer:(a)一個(gè)寢室樓層:A LAN(b)一個(gè)大學(xué)校園:A LAN,possiblyaWANforaverylargecampuses.一個(gè)州:AWAN一個(gè)國(guó)家:AWAN1.17列出下列操作系統(tǒng)的基本特點(diǎn):a.批處理b.交互式c.分時(shí)d.實(shí)時(shí)e.網(wǎng)絡(luò)f.并行式g.分布式h.集群式i.手持式Answer:a.批處理:具有相似需求的作業(yè)被成批的集合起來(lái),并把它們作為一個(gè)整體通過(guò)一個(gè)操作員或自動(dòng)作業(yè)程序裝置運(yùn)行通過(guò)計(jì)算機(jī)。通過(guò)緩沖區(qū),線下操作,后臺(tái)和多道程序,運(yùn)用嘗試保持CPU和I/O一直繁忙,從而使得性能被提高。批處理系統(tǒng)對(duì)于運(yùn)行那些需要較少互動(dòng)的大型作業(yè)十分適用。它們可以被更遲地提交或獲得。b.交互式:這種系統(tǒng)由許多短期交易構(gòu)成,并且下一個(gè)交易的結(jié)果是無(wú)法預(yù)知的。從用戶提交到等待結(jié)果的響應(yīng)時(shí)間應(yīng)該是比較短的,通常為1秒左右。c.分時(shí):這種系統(tǒng)使用CPU調(diào)度和多道程序來(lái)經(jīng)濟(jì)的提供一個(gè)系統(tǒng)的人機(jī)通信功能。CPU從一個(gè)用戶快速切換到另一個(gè)用戶。以每個(gè)程序從終端機(jī)中讀取它的下一個(gè)控制卡,并且把輸出的信息正確快速的輸出到顯示器上來(lái)替代用soopledcardimages定義的作業(yè)。d.實(shí)時(shí):經(jīng)常用于專門的用途。這個(gè)系統(tǒng)從感應(yīng)器上讀取數(shù)據(jù),而且必須在嚴(yán)格的時(shí)間內(nèi)做出響應(yīng)以保證正確的性能。e.網(wǎng)絡(luò):提供給操作系統(tǒng)一個(gè)特征,使得其進(jìn)入網(wǎng)絡(luò),比如;文件共享。f.并行式:每一個(gè)處理器都運(yùn)行同一個(gè)操作系統(tǒng)的拷貝。這些拷貝通過(guò)系統(tǒng)總線進(jìn)行通信。g.分布式:這種系統(tǒng)在幾個(gè)物理處理器中分布式計(jì)算,處理器不共享內(nèi)存或時(shí)鐘。每個(gè)處理器都有它各自的本地存儲(chǔ)器。它們通過(guò)各種通信線路在進(jìn)行通信,比如:一條高速的總線或一個(gè)本地的網(wǎng)絡(luò)。h.集群式:集群系統(tǒng)是由多個(gè)計(jì)算機(jī)耦合成單一系統(tǒng)并分布于整個(gè)集群來(lái)完成計(jì)算任務(wù)。i.手持式:一種可以完成像記事本,email和網(wǎng)頁(yè)瀏覽等簡(jiǎn)單任務(wù)的小型計(jì)算機(jī)系統(tǒng)。手持系統(tǒng)與傳統(tǒng)的臺(tái)式機(jī)的區(qū)別是更小的內(nèi)存和屏幕以與更慢的處理能力。1.18手持計(jì)算機(jī)中固有的折中屬性有哪些?Answer:手提電腦比傳統(tǒng)的臺(tái)式PC機(jī)要小的多。這是由于手提電腦比臺(tái)式PC機(jī)具有更小的內(nèi)存,更小的屏幕,更慢的處理能力的結(jié)果。因?yàn)檫@些限制,大多數(shù)現(xiàn)在的手提只能完成基本的任務(wù),比如:記事本,email和簡(jiǎn)單的文字處理。然而,由于它們較小的外形,而十分便于攜帶,而且當(dāng)它們具備無(wú)線上網(wǎng)時(shí),就可以提供遠(yuǎn)程的email通信和上網(wǎng)功能。2.1操作系統(tǒng)提供的服務(wù)和功能可以分為兩個(gè)類別。簡(jiǎn)單的描述一下這兩個(gè)類別并討論他們的不同點(diǎn)。Answer:第一種操作系統(tǒng)提供的服務(wù)是用來(lái)保護(hù)在系統(tǒng)中同時(shí)運(yùn)行的不同進(jìn)程。進(jìn)程只被允許獲得與它們地址空間有聯(lián)系的內(nèi)存位置。同樣,進(jìn)程不允許破壞和其他用戶有關(guān)的文件。一個(gè)進(jìn)程同樣不允許在沒有操作系統(tǒng)的干預(yù)下直接進(jìn)入設(shè)備。第二種服務(wù)由操作系統(tǒng)提供的服務(wù)是提供一種新的功能,而這種功能并不直接被底層的硬件支持。虛擬存儲(chǔ)器和文件系統(tǒng)就是由操作系統(tǒng)提供的這種新服務(wù)的實(shí)例。2.2列出操作系統(tǒng)提供的五項(xiàng)服務(wù)。說(shuō)明每項(xiàng)服務(wù)如何給用戶提供便利。說(shuō)明在哪些情況下用戶級(jí)程序不能夠提夠這些服務(wù)。Answer:a.文件執(zhí)行.操作系統(tǒng)一個(gè)文件的目錄(或章節(jié))裝入到內(nèi)存并運(yùn)行。一個(gè)用戶程序不能被信任,妥善分配CPU時(shí)間。b.I/O操作.磁盤,磁帶,串行線,和其他裝置必須在一個(gè)非常低的水平下進(jìn)行通信。用戶只需要指定裝置和操作執(zhí)行要求,然后該系統(tǒng)的要求轉(zhuǎn)換成裝置或控制器的具體命令.用戶級(jí)程序不能被信任只在他們應(yīng)該獲得時(shí)獲得裝置和只使用那些未被使用的裝置。c.文件系統(tǒng)操作.在文件創(chuàng)建、刪除、分配和命名時(shí)有許多細(xì)節(jié)是用戶不能執(zhí)行的。磁盤空間塊被文件所使用并被跟蹤。刪除一個(gè)文件需要清除這個(gè)文件的信息和釋放被分派給這個(gè)文件的空間。用戶程序不僅不能夠保證保護(hù)方法的有效實(shí)施,也不能夠被信任只會(huì)分配空閑的空間和在刪除文件是清空空間。d.通信.信息在系統(tǒng)間交換要求信息轉(zhuǎn)換成信息包,送到網(wǎng)絡(luò)控制器中,通過(guò)通信媒介進(jìn)行傳播,并由目的地系統(tǒng)重新組裝。信息包調(diào)整和數(shù)據(jù)修改是一定會(huì)發(fā)生的。此外,用戶程序也許不能夠協(xié)調(diào)網(wǎng)絡(luò)裝置的取得,或者接收完全不同的其他進(jìn)程的信息包。e.錯(cuò)誤檢測(cè).錯(cuò)誤檢測(cè)在硬件和軟件水平下都會(huì)發(fā)生。在硬件水平下,所有數(shù)據(jù)轉(zhuǎn)移都必須仔細(xì)檢查以確保數(shù)據(jù)在運(yùn)送中不會(huì)被破壞。在媒介中的所有數(shù)據(jù)都必須被檢查以確保他們?cè)趯懭朊浇闀r(shí)沒有被改變。在軟件水平下,為了數(shù)據(jù),媒介不需不間斷的被檢查。例如,確保信息存儲(chǔ)中被分配和還未被分配的空間塊的數(shù)量和裝置中所有塊的數(shù)量的一致。進(jìn)程獨(dú)立經(jīng)常有錯(cuò)誤(例如,磁盤中數(shù)據(jù)的破壞),所以必須有一個(gè)統(tǒng)籌的程序(操作系統(tǒng))來(lái)處理各種錯(cuò)誤。同樣,錯(cuò)誤經(jīng)過(guò)操作系統(tǒng)的處理,在一個(gè)系統(tǒng)中程序不再需要包含匹配和改正所遇可能錯(cuò)誤的代碼。2.3討論向操作系統(tǒng)傳遞參數(shù)的三個(gè)主要的方法。Answer:1.通過(guò)寄存器來(lái)傳遞參數(shù)2.寄存器傳遞參數(shù)塊的首地址3.參數(shù)通過(guò)程序存放或壓進(jìn)堆棧中,并通過(guò)操作系統(tǒng)彈出堆棧。2.4描述你怎樣能夠統(tǒng)計(jì)到一個(gè)程序運(yùn)行其不同部分代碼時(shí),它的時(shí)間花費(fèi)數(shù)量的數(shù)據(jù)圖表,并說(shuō)明它的重要性。Answer:一個(gè)能夠發(fā)布定期計(jì)時(shí)器打斷和監(jiān)控正在運(yùn)行的命令或代碼段當(dāng)中斷被進(jìn)行時(shí)。一個(gè)滿意的配置文件,其中的代碼塊都應(yīng)積極覆著被程序在代碼的不同的部分花費(fèi)時(shí)間。一旦這個(gè)配置文件被獲得,程序員可以盡可能的優(yōu)化那些消耗大量CPU資源的代碼段。2.5操作系統(tǒng)關(guān)于文件管理的五個(gè)主要活動(dòng)是什么?Answer:1.創(chuàng)建和刪除文件2.創(chuàng)建和刪除目錄3.提供操作文件和目錄的原語(yǔ)的支持4.將文件映射到二級(jí)存儲(chǔ)器上5.在穩(wěn)定(非易失的)的存儲(chǔ)媒介上備份文件。2.6在設(shè)備和文件操作上用相同的系統(tǒng)調(diào)用接口的好處與不足是什么?Answer:每一個(gè)設(shè)備都可以被得到只要它是一個(gè)在文件系統(tǒng)的文件。因此大多數(shù)內(nèi)核通過(guò)文件接口處理設(shè)備,這樣相對(duì)容易,加一個(gè)新的設(shè)備通過(guò)執(zhí)行硬件確定代碼來(lái)支持這種抽象的文件接口。因此,這種方式不僅有利于用戶程序代碼的發(fā)展,用戶程序代碼可以被寫入設(shè)備和文件用相同的方式,還有利于設(shè)備驅(qū)動(dòng)程序代碼,設(shè)備驅(qū)動(dòng)程序代碼可以書面支持規(guī)范定義的API.使用相同接口的缺點(diǎn)是很難獲得某些設(shè)備檔案存取的API范圍內(nèi)的功能,因此,結(jié)果或者是丟失功能或者是丟失性能。但有些能夠被克服通過(guò)使用ioctl操作,這個(gè)操作為了進(jìn)程在設(shè)備上援引操作提供一個(gè)通用接口。2.7命令解釋器的用途是什么?為什么它經(jīng)常與內(nèi)核是分開的?用戶有可能通過(guò)使用由操作系統(tǒng)提供的系統(tǒng)調(diào)用接口發(fā)展一個(gè)新的命令解釋器?Answer:命令解釋器從用戶或文件中讀取命令并執(zhí)行,一般而言把他們轉(zhuǎn)化成系統(tǒng)調(diào)用。它通常是不屬于內(nèi)核,因?yàn)槊罱忉寱?huì)有所變動(dòng)。用戶能夠利用由操作系統(tǒng)提供的系統(tǒng)調(diào)用接口開發(fā)新的命令解釋器。這命令解釋器允許用戶創(chuàng)建、管理進(jìn)程和確定它們通信的方法(例如通過(guò)管道和文件)。所有的功能都被用戶程序通過(guò)系統(tǒng)調(diào)用來(lái)使用,這個(gè)也可能有用戶開發(fā)一個(gè)新的命令行解釋。2.8通信的兩種模式是什么?這兩種模式的優(yōu)點(diǎn)和缺點(diǎn)是什么?Answer:通信的兩種模式是1)共享內(nèi)存,2)消息傳遞。這兩種模式的最基本的不同是在它們的性能上。一個(gè)內(nèi)存共享塊是通過(guò)系統(tǒng)調(diào)用創(chuàng)建的。然而,一旦內(nèi)存共享塊在兩個(gè)或更多的進(jìn)程間建立,這些進(jìn)程可以借助內(nèi)存共享塊來(lái)通信,不再需要內(nèi)核的協(xié)助。另一方面,當(dāng)send()和receive()操作被調(diào)用時(shí),信息傳遞通常包含系統(tǒng)調(diào)用。因此,因?yàn)閮?nèi)核是直接的包含在進(jìn)程間通信的,一般而言,它的影響比內(nèi)存共享小。然而,消息傳遞可以用作同步機(jī)制來(lái)處理通信進(jìn)程間的行動(dòng)。也就是說(shuō),send()和receive()段可以用來(lái)協(xié)調(diào)兩個(gè)通信進(jìn)程的動(dòng)作。另一方面,內(nèi)存共享沒有提供這種同步機(jī)制的進(jìn)程。2.9為什么要把機(jī)制和策略區(qū)分開來(lái)?Answer:機(jī)制和策略必須區(qū)分開來(lái),來(lái)保證系統(tǒng)能夠被很容易的修改。沒有兩個(gè)系統(tǒng)的裝置是完全相同的,所以每一個(gè)裝置都想要把操作系統(tǒng)改為適合自己的。當(dāng)機(jī)制和政策分開時(shí),政策可以隨意的改變但機(jī)制還是不能改變。這種安排提供了一個(gè)更靈活的制度2.10為什么Java提供了從Java程序調(diào)用由C或C++編寫的本地方法的能力?舉出一個(gè)本地方法有用的例子。Answer:Java程序的開發(fā)是用來(lái)作為I/O獨(dú)立的平臺(tái)。因此,這種語(yǔ)言沒有提供途徑給許多特殊的系統(tǒng)資源,例如從I/O設(shè)備讀取。為了運(yùn)行一個(gè)系統(tǒng)特定的I/O操作,你必須用一種支持這些特性的語(yǔ)言(例如C或C++)寫。記住一個(gè)Java程序調(diào)用由另外一種語(yǔ)言編寫的本地方法寫將不再結(jié)構(gòu)中立。2.11有時(shí)獲得一個(gè)分層方法是有困難的如果操作系統(tǒng)的兩個(gè)部件相互依存。識(shí)別一個(gè)方案,在這個(gè)方案中并不非常清楚如何為兩個(gè)作用緊密相連的系統(tǒng)部件分層。Answer:虛擬內(nèi)存子系統(tǒng)和存儲(chǔ)子系統(tǒng)通常是緊密耦合,并由于以下的相互作用需要精心設(shè)計(jì)的層次系統(tǒng)。許多系統(tǒng)允許文件被映射到一個(gè)執(zhí)行進(jìn)程的虛擬內(nèi)存空間。另一方面,虛擬內(nèi)存子系統(tǒng)通常使用存儲(chǔ)系統(tǒng)來(lái)提供當(dāng)前不在內(nèi)存中的頁(yè)。此外,在刷新磁盤之前,更新的文件有時(shí)會(huì)緩沖到物理內(nèi)存,從而需要認(rèn)真協(xié)調(diào)使用的內(nèi)存之間的虛擬內(nèi)存子系統(tǒng)和文件系統(tǒng)。2.12采用微內(nèi)核方法來(lái)設(shè)計(jì)系統(tǒng)的主要優(yōu)點(diǎn)是什么?在微內(nèi)核中如何使客戶程序和系統(tǒng)服務(wù)相互作用?微內(nèi)核方法的缺點(diǎn)是什么?Answer:優(yōu)點(diǎn)主要包括以下幾點(diǎn):a)增加一個(gè)新的服務(wù)不需要修改內(nèi)核b)在用戶模式中比在內(nèi)核模式中更安全、更易操作c)一個(gè)簡(jiǎn)單的內(nèi)核設(shè)計(jì)和功能一般導(dǎo)致一個(gè)更可靠的操作系統(tǒng)用戶程序和系統(tǒng)服務(wù)通過(guò)使用進(jìn)程件的通信機(jī)制在微內(nèi)核中相互作用,例如發(fā)送消息。這些消息由操作系統(tǒng)運(yùn)送。微內(nèi)核最主要的缺點(diǎn)是與進(jìn)程間通信的過(guò)度聯(lián)系和為了保證用戶程序和系統(tǒng)服務(wù)相互作用而頻繁使用操作系統(tǒng)的消息傳遞功能。2.13模塊化內(nèi)核方法的什么方式與分層方法相似?什么方式與分層方法不同?Answer:模塊化內(nèi)核方法要求子系統(tǒng)通過(guò)創(chuàng)建的一般而言狹隘(從功能方面來(lái)說(shuō)是揭露外部模塊)的接口來(lái)相互作用。分層內(nèi)核方法在細(xì)節(jié)上與分層方法相似。但是,分層內(nèi)核必須要是有嚴(yán)格排序的子系統(tǒng),這樣的子系統(tǒng)在較低層次中不允許援引業(yè)務(wù)相應(yīng)的上層子系統(tǒng)。在模塊化內(nèi)核方法中沒有太多的限制,模式在哪方面是隨意援引彼此的是沒有任何約束的。2.14操作系統(tǒng)設(shè)計(jì)員采用虛擬機(jī)結(jié)構(gòu)的主要優(yōu)點(diǎn)是什么?對(duì)用戶來(lái)說(shuō)主要有什么好處?Answer:系統(tǒng)是容易被調(diào)試的,此外,安全問(wèn)題也是容易解決的。虛擬機(jī)同樣為運(yùn)作體系提供了一個(gè)很好的平臺(tái),因?yàn)樵S多不同的操作系統(tǒng)只可以在一個(gè)物理系統(tǒng)中運(yùn)行。2.15為什么說(shuō)一個(gè)JIT編譯器對(duì)執(zhí)行一個(gè)Java程序是有用的?Answer:Java是一種解釋語(yǔ)言。這就意味著Java虛擬機(jī)一次解釋一個(gè)字節(jié)代碼。一般來(lái)說(shuō),絕大多數(shù)解釋環(huán)境是比運(yùn)行本地二進(jìn)制慢,因?yàn)榻忉屵M(jìn)程要求把每一個(gè)命令轉(zhuǎn)化為本地機(jī)器代碼。一個(gè)JIT編譯器把字節(jié)代碼轉(zhuǎn)換成本地機(jī)器代碼,第一次這種方法是偶然碰到的。這就意味著Java程序作為一個(gè)本地用途(當(dāng)然,JIT的這種轉(zhuǎn)換過(guò)程是要花費(fèi)時(shí)間的,但并沒有像字節(jié)代碼花費(fèi)的這么多)是非常重要的一種運(yùn)行方式。此外,JIT存儲(chǔ)器編譯代碼以便能夠在下一次需要時(shí)使用。一個(gè)是被JIT運(yùn)行的而不是傳統(tǒng)的一般的解釋運(yùn)行的Java程序是非??斓?。2.16在一個(gè)系統(tǒng)(例如VWware)中,來(lái)賓作業(yè)系統(tǒng)和主機(jī)操作系統(tǒng)的關(guān)系是什么?在選擇主機(jī)操作系統(tǒng)時(shí)哪些因素需要考慮?Answer:一個(gè)來(lái)賓作業(yè)系統(tǒng)提供它的服務(wù)通過(guò)映射到有主機(jī)操作系統(tǒng)提供的功能上。一個(gè)主要的事情需要被考慮,為了能夠支持與來(lái)賓作業(yè)系統(tǒng)相聯(lián)系的功能,選擇的主機(jī)操作系統(tǒng),從系統(tǒng)調(diào)用接口而言,是否足夠一般。2.17實(shí)驗(yàn)性的綜合操作系統(tǒng)在內(nèi)核里有一個(gè)匯編器。為了優(yōu)化系統(tǒng)調(diào)用的性能,內(nèi)核通過(guò)在內(nèi)核空間內(nèi)匯編程序來(lái)縮短系統(tǒng)調(diào)用在內(nèi)核必須經(jīng)過(guò)的途徑。這是一種與分層設(shè)計(jì)相對(duì)立的方法,經(jīng)過(guò)內(nèi)核的途徑在這種設(shè)計(jì)中被延伸了,使操作系統(tǒng)的構(gòu)造更加容易。分別從支持和反對(duì)的角度來(lái)綜合設(shè)計(jì)方式對(duì)討論這種內(nèi)核設(shè)計(jì)和系統(tǒng)性能優(yōu)化的影響。Answer:綜合是令人欽佩的由于這種性能通過(guò)即時(shí)復(fù)雜化取得了成功。不幸的是,由于代碼的流動(dòng)很難在內(nèi)核中調(diào)試問(wèn)題。這種復(fù)雜化是系統(tǒng)的詳細(xì)的表現(xiàn),讓綜合很難port(一個(gè)新的編譯器必須寫入每一種架構(gòu))。3.1論述短期,中期和長(zhǎng)期調(diào)度之間的區(qū)別.Answer:a.短期調(diào)度:在內(nèi)存作業(yè)中選擇就緒執(zhí)行的作業(yè),并為他們分配CPU。b.中期調(diào)度:作為一種中等程度的調(diào)度程序,尤其被用于分時(shí)系統(tǒng),一個(gè)交換方案的實(shí)施,將部分運(yùn)行程序移出內(nèi)存,之后,從中斷處繼續(xù)執(zhí)行。c.長(zhǎng)期調(diào)度(作業(yè)調(diào)度程序):確定哪些作業(yè)調(diào)入內(nèi)存以執(zhí)行.它們主要的不同之處是它們的執(zhí)行的頻率。短期調(diào)度必須經(jīng)常調(diào)用一個(gè)新進(jìn)程,由于在系統(tǒng)中,長(zhǎng)期調(diào)度處理移動(dòng)的作業(yè)時(shí),并不頻繁被調(diào)用,可能在進(jìn)程離開系統(tǒng)時(shí)才被喚起。3.2問(wèn):描述一下內(nèi)核在兩個(gè)進(jìn)程間進(jìn)行上下文功換的動(dòng)作.Answer:總的來(lái)說(shuō),操作系統(tǒng)必須保存正在運(yùn)行的進(jìn)程的狀態(tài),恢復(fù)進(jìn)程的狀態(tài)。保存進(jìn)程的狀態(tài)主要包括CPU寄存器的值以與內(nèi)存分配,上下文切換還必須執(zhí)行一些確切體系結(jié)構(gòu)的操作,包括刷新數(shù)據(jù)和指令緩存。(書中答案)進(jìn)程關(guān)聯(lián)是由進(jìn)程的PCB來(lái)表示的,它包括CPU寄存器的值和內(nèi)存管理信息等。當(dāng)發(fā)生上下文切換時(shí),內(nèi)核會(huì)將舊進(jìn)程的關(guān)聯(lián)狀態(tài)保存在其PCB中,然后裝入經(jīng)調(diào)度要執(zhí)行的新進(jìn)程的已保存的關(guān)聯(lián)狀態(tài)。3.3考慮RPC機(jī)制。考慮的RPC機(jī)制。描述不可取的情況下可能出現(xiàn)或者不執(zhí)行的”最多一次”或”到底一旦“語(yǔ)義。說(shuō)明在沒有這些保障的情況下,可能使用的一種機(jī)制。Answer:如果一個(gè)RPC機(jī)制無(wú)法支持無(wú)論是“最多一次”或“至少一次”的語(yǔ)義,那么RPC服務(wù)器不能保證遠(yuǎn)端程序不會(huì)引起多個(gè)事件的發(fā)生。試想,如果一個(gè)遠(yuǎn)端程序在一個(gè)不支持這些語(yǔ)義的系統(tǒng)上從銀行賬戶中撤回投資的資金。很可能一個(gè)單一調(diào)用的遠(yuǎn)程過(guò)程會(huì)導(dǎo)致多種服務(wù)器的撤回。如果一個(gè)系統(tǒng)不能支持這兩種語(yǔ)義,那么這樣一個(gè)系統(tǒng)只能安全提供遠(yuǎn)程程序,這些遠(yuǎn)程程序沒有改變數(shù)據(jù),沒有提供時(shí)間敏感的結(jié)果,用我們的銀行賬戶做例,我們當(dāng)然需要“最多一次”或“至少一次”的語(yǔ)義執(zhí)行撤銷(或存款)。然而,賬戶余額成其它賬戶信息的查詢,如姓名,地址等,不需要這些語(yǔ)義。3.4圖表3.24里顯示的程序,說(shuō)明A行將會(huì)輸出什么?Answer:當(dāng)控制回到父進(jìn)程時(shí),它的值會(huì)保持在5,而子進(jìn)程將更新并拷貝這個(gè)值。3.5問(wèn):下面設(shè)計(jì)的好處和壞處分別是什么?系統(tǒng)層次和用戶層次都要考慮到.A,對(duì)稱和非對(duì)稱通信B,自動(dòng)和顯式緩沖C,復(fù)制發(fā)送和引用發(fā)送D,固定大小和可變大小消息Answer:A.對(duì)稱和非對(duì)稱通信:對(duì)稱通信的影響是它允許發(fā)送者和接收者之間有一個(gè)集合點(diǎn)。缺點(diǎn)是阻塞發(fā)送時(shí),不需要集合點(diǎn),而消息不能異步傳遞。因此,消息傳遞系統(tǒng),往往提供兩種形式的同步。B.自動(dòng)和顯式緩沖:自動(dòng)緩沖提供了一個(gè)無(wú)限長(zhǎng)度的隊(duì)列,從而保證了發(fā)送者在復(fù)制消息時(shí)不會(huì)遇到阻塞,如何提供自動(dòng)緩存的規(guī)范,一個(gè)方案也許能保存足夠大的內(nèi)存,但許多內(nèi)存被浪費(fèi)緩存明確指定緩沖區(qū)的大小。在這種狀況下,發(fā)送者不能在等待可用空間隊(duì)列中被阻塞。然而,緩沖明確的內(nèi)存不太可能被浪費(fèi)。C.復(fù)制發(fā)送和引用發(fā)送:復(fù)制發(fā)送不允許接收者改變參數(shù)的狀態(tài),引用發(fā)送是允許的。引用發(fā)送允許的優(yōu)點(diǎn)之一是它允許程序員寫一個(gè)分布式版本的一個(gè)集中的應(yīng)用程序。Java’sRMI公司提供兩種發(fā)送,但引用傳遞一個(gè)參數(shù)需要聲明這個(gè)參數(shù)是一個(gè)遠(yuǎn)程對(duì)象。D.固定大小和可變大小消息:涉與的太多是有關(guān)緩沖問(wèn)題,帶有定長(zhǎng)信息,一個(gè)擁有具體規(guī)模的緩沖課容納已知數(shù)量的信息緩沖能容納的可變信息數(shù)量是未知的??紤]Windows2000如何處理這種情況。帶有定長(zhǎng)信息(<256bytes),信息從發(fā)送者的地址空間被復(fù)制至接受進(jìn)程的地址空間。更大的信息(如變長(zhǎng)信息)使用共享內(nèi)存?zhèn)鬟f信息。第四章線程4.1舉兩個(gè)多線程程序設(shè)計(jì)的例子來(lái)說(shuō)明多線程不比單線程方案提高性能答:1)任何形式的順序程序?qū)€程來(lái)說(shuō)都不是一個(gè)好的形式。例如一個(gè)計(jì)算個(gè)人報(bào)酬的程序。2)另外一個(gè)例子是一個(gè)“空殼”程序,如C-shell和kornshell。這種程序必須密切檢測(cè)其本身的工作空間。如打開的文件、環(huán)境變量和當(dāng)前工作目錄。4.2描述一下線程庫(kù)采取行動(dòng)進(jìn)行用戶級(jí)線程上下文切換的過(guò)程答:用戶線程之間的上下文切換和內(nèi)核線程之間的相互轉(zhuǎn)換是非常相似的。但它依賴于線程庫(kù)和怎樣把用戶線程指給內(nèi)核程序。一般來(lái)說(shuō),用戶線程之間的上下文切換涉與到用一個(gè)用戶程序的輕量級(jí)進(jìn)程(LWP)和用另外一個(gè)線程來(lái)代替。這種行為通常涉與到寄存器的節(jié)約和釋放。4.3在哪些情況下使用多內(nèi)核線程的多線程方案比單處理器系統(tǒng)的單個(gè)線程方案提供更好的性能。答:當(dāng)一個(gè)內(nèi)核線程的頁(yè)面發(fā)生錯(cuò)誤時(shí),另外的內(nèi)核線程會(huì)用一種有效的方法被轉(zhuǎn)換成使用交錯(cuò)時(shí)間。另一方面,當(dāng)頁(yè)面發(fā)生錯(cuò)誤時(shí),一個(gè)單一線程進(jìn)程將不能夠發(fā)揮有效性能。因此,在一個(gè)程序可能有頻繁的頁(yè)面錯(cuò)誤或不得不等待其他系統(tǒng)的事件的情況下,多線程方案會(huì)有比單處理器系統(tǒng)更好的性能。4.4以下程序中的哪些組成部分在多線程程序中是被線程共享的?a.寄存值b.堆內(nèi)存c.全局變量d.棧內(nèi)存答:一個(gè)線程程序的線程共享堆內(nèi)存和全局變量,但每個(gè)線程都有屬于自己的一組寄存值和棧內(nèi)存。4.5一個(gè)采用多用戶線程的多線程方案在多進(jìn)程系統(tǒng)中能夠取得比在單處理器系統(tǒng)中更好的性能嗎?答:一個(gè)包括多用戶線程的多線程系統(tǒng)無(wú)法在多處理系統(tǒng)上同時(shí)使用不同的處理器。操作系統(tǒng)只能看到一個(gè)單一的進(jìn)程且不會(huì)調(diào)度在不同處理器上的不同進(jìn)程的線程。因此,多處理器系統(tǒng)執(zhí)行多個(gè)用戶線程是沒有性能優(yōu)勢(shì)的。4.6就如4.5.2章節(jié)描述的那樣,Linux沒有區(qū)分進(jìn)程和線程的能力。且Linux線程都是用相同的方法:允許一個(gè)任務(wù)與一組傳遞給clone()系統(tǒng)調(diào)用的標(biāo)志的進(jìn)程或線程。但許多操作系統(tǒng),例如windowsXP和Solaris,對(duì)進(jìn)程和線程都是一視同仁?;旧?,這種使用notation的系統(tǒng),一個(gè)進(jìn)程的數(shù)據(jù)結(jié)構(gòu)包括一個(gè)指向?qū)儆谶M(jìn)程的不同線程的指針。區(qū)別建模過(guò)程和在內(nèi)核中線程的兩種方法。答:一方面,進(jìn)程和線程被視為相似實(shí)體的系統(tǒng)中,有些系統(tǒng)代碼可以簡(jiǎn)化。例如,一個(gè)調(diào)度器可以在平等的基礎(chǔ)上考慮不同的進(jìn)程和線程,且不需要特殊的代碼,在調(diào)度中審查有關(guān)線程的進(jìn)程。另一方面,這種統(tǒng)一會(huì)使進(jìn)程資源限制更加困難。相反,一些額外的復(fù)雜性被需要,用來(lái)確定哪個(gè)線程與哪個(gè)進(jìn)程一致和執(zhí)行重復(fù)的計(jì)數(shù)任務(wù)。4.7由4.11給出的程序使用了Pthread的應(yīng)用程序編程接口(API),在程序的第c行和第p行分別會(huì)輸出什么?答:c行會(huì)輸出5,p行會(huì)輸出0.4.8考慮一個(gè)多處理器系統(tǒng)和用多線程對(duì)多線程模式編寫的多線程程序。讓程序中的用戶線程數(shù)量多于系統(tǒng)中的處理器的數(shù)量,討論下列情況下的性能意義:a.由程序分配的內(nèi)核線程的數(shù)量比處理器少由程序分配的內(nèi)核線程的數(shù)量與處理器相同由程序分配的內(nèi)核線程的數(shù)量大于處理器數(shù)量但少于用戶線程的數(shù)量答:當(dāng)內(nèi)核線程的數(shù)量少于處理器時(shí),一些處理器將仍然處于空閑狀態(tài)。因?yàn)?,調(diào)度圖中只有內(nèi)核線程的處理器,而不是用戶線程的處理器。當(dāng)程序分配的內(nèi)核線程的數(shù)量與處理器相同時(shí),那么有可能所有處理器將同時(shí)使用。然而,當(dāng)一個(gè)內(nèi)核塊內(nèi)的內(nèi)核(因頁(yè)面錯(cuò)誤或同時(shí)援引系統(tǒng)調(diào)用)相應(yīng)的處理器將閑置。當(dāng)由程序分配的內(nèi)核線程的數(shù)量大于處理器數(shù)量時(shí),封鎖一個(gè)內(nèi)核線程并調(diào)出,換入另一個(gè)準(zhǔn)備執(zhí)行的內(nèi)核線程。因此,增加多處理器系統(tǒng)的利用率。第五章CPU調(diào)度5.1為什么對(duì)調(diào)度來(lái)說(shuō),區(qū)分I/0限制的程序和CPU限制的程序是重要的?答:I/0限制的程序有在運(yùn)行I/O操作前只運(yùn)行很少數(shù)量的計(jì)算機(jī)操作的性質(zhì)。這種程序一般來(lái)說(shuō)不會(huì)使用很多的CPU。另一方面,CPU限制的程序利用整個(gè)的時(shí)間片,且不做任何阻礙I/O操作的工作。因此,通過(guò)給I/O限制的程序優(yōu)先權(quán)和允許在CPU限制的程序之前運(yùn)行,可以很好的利用計(jì)算機(jī)資源。5.2討論以下各對(duì)調(diào)度標(biāo)準(zhǔn)在某種背景下會(huì)有的沖突a.CPU利用率和響應(yīng)時(shí)間b.平均周轉(zhuǎn)時(shí)間和最大等待時(shí)間c.I/O設(shè)備利用率和CPU利用率答:a.CPU利用率和響應(yīng)時(shí)間:當(dāng)經(jīng)常性的上下文切換減少到最低時(shí),CPU利用率增加。通過(guò)減少使用上下文切換程序來(lái)降低經(jīng)常性的上下文切換。但這樣可能會(huì)導(dǎo)致進(jìn)程響應(yīng)時(shí)間的增加。b.平均周轉(zhuǎn)時(shí)間和最大等待時(shí)間:通過(guò)最先執(zhí)行最短任務(wù)可以使平均周轉(zhuǎn)時(shí)間最短。然而,這種調(diào)度策略可能會(huì)使長(zhǎng)時(shí)間運(yùn)行的任務(wù)永遠(yuǎn)得不到調(diào)度且會(huì)增加他們的等待時(shí)間。c.I/O設(shè)備利用率和CPU利用率:CPU利用率的最大化可以通過(guò)長(zhǎng)時(shí)間運(yùn)行CPU限制的任務(wù)和同時(shí)不實(shí)行上下文切換。I/O設(shè)備利用率的最大化可以通過(guò)盡可能調(diào)度已經(jīng)準(zhǔn)備好的I/O限制的任務(wù)。因此,導(dǎo)致上下文切換。5.3考慮指數(shù)平均公式來(lái)預(yù)測(cè)下一次CPU區(qū)間的長(zhǎng)度,使用以下參數(shù)值會(huì)有什么影響?a.a=0和t=100毫秒b.a=0.99和t=10毫秒答:當(dāng)a=0和t=100毫秒時(shí),公式總是會(huì)預(yù)測(cè)下一次的CPU區(qū)間為100毫秒。當(dāng)a=0.99和t=10毫秒時(shí),進(jìn)程最近的行為是給予更高的重量和過(guò)去的就能成相比。因此,調(diào)度算法幾乎是無(wú)記憶的,且簡(jiǎn)單預(yù)測(cè)未來(lái)區(qū)間的長(zhǎng)度為下一次的CPU執(zhí)行的時(shí)間片。5.4考慮下列進(jìn)程集,進(jìn)程占用的CPU區(qū)間長(zhǎng)度以毫秒來(lái)計(jì)算:進(jìn)程區(qū)間時(shí)間優(yōu)先級(jí)P1103P211P323P414P552假設(shè)在時(shí)刻0以進(jìn)程P1,P2,P3,P4,P5的順序到達(dá)。a.畫出4個(gè)Gantt圖分別演示用FCFS、SJF、非搶占優(yōu)先級(jí)(數(shù)字小代表優(yōu)先級(jí)高)和RR(時(shí)間片=1)算法調(diào)度時(shí)進(jìn)程的執(zhí)行過(guò)程。b.在a里每個(gè)進(jìn)程在每種調(diào)度算法下的周轉(zhuǎn)時(shí)間是多少?c.在a里每個(gè)進(jìn)程在每種調(diào)度算法下的等待時(shí)間是多少?d.在a里哪一種調(diào)度算法的平均等待時(shí)間對(duì)所有進(jìn)程而言最???答:a.甘特圖略b.周轉(zhuǎn)時(shí)間FCFSRRSJF非搶占優(yōu)先級(jí)P110191916P211211P3137418P4144219P5191496c.等待時(shí)間FCFSRRSJF非搶占優(yōu)先級(jí)P10996P210100P3115216P4133118P514942d.SJF5.5下面哪些算法會(huì)引起饑餓a.先來(lái)先服務(wù)b.最短工作優(yōu)先調(diào)度c.輪換法調(diào)度d.優(yōu)先級(jí)調(diào)度答:最短工作優(yōu)先調(diào)度和優(yōu)先級(jí)調(diào)度算法會(huì)引起饑餓5.6考慮RR調(diào)度算法的一個(gè)變種,在這個(gè)算法里,就緒隊(duì)列里的項(xiàng)是指向PCB的指針。a.如果把兩個(gè)指針指向就緒隊(duì)列中的同一個(gè)進(jìn)程,會(huì)有什么效果?b.這個(gè)方案的主要優(yōu)點(diǎn)和缺點(diǎn)是什么?c.如何修改基本的RR調(diào)度算法,從而不用兩個(gè)指針達(dá)到同樣的效果?答.a.實(shí)際上,這個(gè)過(guò)程將會(huì)增加它的優(yōu)先權(quán),因?yàn)橥ㄟ^(guò)經(jīng)常得到時(shí)間它能夠優(yōu)先得以運(yùn)行。b.優(yōu)點(diǎn)是越重要的工作可以得到更多的時(shí)間。也就是說(shuō),優(yōu)先級(jí)越高越先運(yùn)行。然而,結(jié)果將由短任務(wù)來(lái)承擔(dān)。c.分配一個(gè)更長(zhǎng)的時(shí)間給優(yōu)先級(jí)越高的程序。換句話說(shuō),可能有兩個(gè)或多個(gè)時(shí)間片在RR調(diào)度中。5.7考慮一個(gè)運(yùn)行十個(gè)I/O限制任務(wù)和一個(gè)CPU限制任務(wù)的系統(tǒng)。假設(shè),I/O限制任務(wù)一次分配給一個(gè)I/O操作1毫秒的CPU計(jì)算,但每個(gè)I/O操作的完成需要10毫秒。同時(shí),假設(shè)間接的上下文切換要0.1毫秒,所有的進(jìn)程都是長(zhǎng)進(jìn)程。對(duì)一個(gè)RR調(diào)度來(lái)說(shuō),以下情況時(shí)CPU的利用率是多少:a.時(shí)間片是1毫秒b.時(shí)間片是10毫秒答:a.時(shí)間片是1毫秒:不論是哪個(gè)進(jìn)程被調(diào)度,這個(gè)調(diào)度都會(huì)為每一次的上下文切換花費(fèi)一個(gè)0.1毫秒的上下文切換。CPU的利用率是1/1.1*100=92%。b.時(shí)間片是10毫秒:這I/O限制任務(wù)會(huì)在使用完1毫秒時(shí)間片后進(jìn)行一次上下文切換。這個(gè)時(shí)間片要求在所有的進(jìn)程間都走一遍,因此,10*1.1+10.1(因?yàn)槊總€(gè)I/O限定任務(wù)執(zhí)行為1毫秒,然后承擔(dān)上下文切換的任務(wù),而CPU限制任務(wù)的執(zhí)行10毫秒在承擔(dān)一個(gè)上下文切換之前)。因此,CPU的利用率是20、21.1*100=94%。5.8考慮一個(gè)實(shí)施多層次的隊(duì)列調(diào)度系統(tǒng)。什么策略能夠使一個(gè)計(jì)算機(jī)用戶使用由用戶進(jìn)程分配的最大的CPU時(shí)間片。答:這個(gè)程序可以使分配給它的沒有被完全利用的CPU時(shí)間最大化。它可以使用分配給它的時(shí)間片中的絕大部分,但在時(shí)間片結(jié)束前放棄CPU,因此提高了與進(jìn)程有關(guān)的優(yōu)先級(jí)。1.5.9考慮下面的基于動(dòng)態(tài)改變優(yōu)先級(jí)的可搶占式優(yōu)先權(quán)調(diào)度算法。大的優(yōu)先權(quán)數(shù)代表高優(yōu)先權(quán)。當(dāng)一個(gè)進(jìn)程在等待CPU時(shí)(在就緒隊(duì)列中,但未執(zhí)行),優(yōu)先權(quán)以α速率改變;當(dāng)它運(yùn)行時(shí),優(yōu)先權(quán)以速率β改變。所有的進(jìn)程在進(jìn)入就緒隊(duì)列時(shí)被給定優(yōu)先權(quán)為0。參數(shù)α和β可以設(shè)定給許多不同的調(diào)度算法。a.β>α>0時(shí)所得的是什么算法?b.α<β<0時(shí)所得的是什么算法?答:a.FCFSb.LIFO5.10解釋下面調(diào)度算法對(duì)短進(jìn)程編程度上的區(qū)別:a.FCFSb.RRc.多級(jí)反饋隊(duì)列答:a.FCFS區(qū)別短任務(wù)是因?yàn)槿魏卧陂L(zhǎng)任務(wù)后到達(dá)的短任務(wù)都將會(huì)有很長(zhǎng)的等待時(shí)間。RR對(duì)所有的任務(wù)都是能夠相同的(給它們相同的CPU時(shí)間區(qū)間),所以,短任務(wù)可以很快的離開系統(tǒng),只要它們可以先完成。多級(jí)反饋隊(duì)列和RR調(diào)度算法相似——它們不會(huì)先選擇短任務(wù)。5.11用WindowXP的調(diào)度算法,下列什么是數(shù)字優(yōu)先的線程。a.相對(duì)優(yōu)先級(jí)的值為REALTIME_PRIORITY_CLASS的屬于實(shí)體優(yōu)先類型的線程b.相對(duì)優(yōu)先級(jí)的值為NORMAL_PRIORITY_CLASS的屬于NORMAL類型的線程c.相對(duì)優(yōu)先級(jí)的值為HIGH_PRIORITY_CLASS的屬于ABOVE_NORMAL類型的線程答:a.26b.8c.145.12考慮在Solaris操作系統(tǒng)中的為分時(shí)線程的調(diào)度算法:a:一個(gè)優(yōu)先權(quán)是10的線程的時(shí)間片是多少??jī)?yōu)先權(quán)是55的呢?b:假設(shè)優(yōu)先權(quán)是35的一個(gè)線程用它所有的時(shí)間片在沒有任何阻止的情況下,這調(diào)度算法將會(huì)分配給這個(gè)線程什么樣新的優(yōu)先權(quán)?c:假設(shè)一個(gè)優(yōu)先權(quán)是35的線程在時(shí)間片結(jié)束前阻止I/O操作。這調(diào)度算法將會(huì)分配給這個(gè)線程什么樣新的優(yōu)先權(quán)?答:a:160和40b:35C:545.13傳統(tǒng)UNIX調(diào)度在優(yōu)先數(shù)和優(yōu)先級(jí)間成反比關(guān)系:數(shù)字越高,優(yōu)先權(quán)越低。該調(diào)度進(jìn)程利用下面的方程重新計(jì)算進(jìn)程的優(yōu)先權(quán)一次一秒:優(yōu)先權(quán)=(最近CPU使用率/2)+基本數(shù)這里的基本數(shù)=60,最近的CPU使用率是指一個(gè)表明優(yōu)先權(quán)從上一次重新計(jì)算后開始進(jìn)程被CPU使用的情況。假設(shè)最近進(jìn)程p1的CPU使用率是40個(gè),p2是18,p3是10。當(dāng)優(yōu)先權(quán)重新計(jì)算后這三個(gè)進(jìn)程的新的優(yōu)先權(quán)是什么?在此信息的基礎(chǔ)上,傳統(tǒng)UNIX的調(diào)度會(huì)不會(huì)提高或降低CPU限制的進(jìn)程的相對(duì)優(yōu)先權(quán)?答:分配給這些進(jìn)程的優(yōu)先權(quán)分別是80,69和65.這調(diào)度降低了CPU限制的進(jìn)程的相對(duì)優(yōu)先權(quán)。第六章管程6.1第一個(gè)著名的正確解決了兩個(gè)進(jìn)程的臨界區(qū)問(wèn)題的軟件方法是Dekker設(shè)計(jì)的。兩個(gè)進(jìn)程P0和P1共享以下變量: booleanflag[2]; /*initiallyfalse*/intturn;進(jìn)程Pi(i==0或1)和另一個(gè)進(jìn)程Pj(j==0或1)的結(jié)構(gòu)見圖7.27。證明這個(gè)算法滿足臨界區(qū)問(wèn)題的所有三個(gè)要求。do{flag[i]=ture;while(flag[j]){if(turn==j){flag[i]=false;while(turn==j);flag[i]=true;}}臨界區(qū)turn=j;flag[i]=false;剩余區(qū)}while(1); 圖7.27 Dekker算法中的進(jìn)程Pi結(jié)構(gòu)答:該算法滿足三個(gè)相互排斥條件。(1)相互排斥是為了確保使用的變量和標(biāo)志是可變的。如果所有進(jìn)程都把他們的變量設(shè)置為真,只有一個(gè)會(huì)成功,那就是哪個(gè)進(jìn)程輪到的問(wèn)題了。等待中的進(jìn)程只能夠進(jìn)入它的重要部分當(dāng)其他進(jìn)程在更新變量值時(shí)。6.1這兩個(gè)進(jìn)程的臨界區(qū)域問(wèn)題的最初的正確的軟件解決方案是由Dekker提出的。P0、P1兩個(gè)進(jìn)程,具有以下共同的變量:booleanflag[2];/*initiallyfalse*/intturn;進(jìn)程Pi(i==0or1)的結(jié)構(gòu)在6.25中已經(jīng)出現(xiàn)過(guò);其他進(jìn)程為Pj(j==1or0)。證明這個(gè)算法滿足關(guān)鍵問(wèn)題的三個(gè)要求。答:這個(gè)算法滿足臨界區(qū)域的三個(gè)條件:在標(biāo)記和返回變量的使用中,互斥條件是保證的。如果兩個(gè)進(jìn)程將它們的標(biāo)識(shí)設(shè)為真,那么只有一個(gè)進(jìn)程會(huì)成功進(jìn)行,即輪到的那個(gè)進(jìn)程。當(dāng)另一個(gè)進(jìn)程更新它的返回變量時(shí),等待的那個(gè)進(jìn)程只能進(jìn)入它的臨界區(qū)域。就緒的進(jìn)程,通過(guò)標(biāo)志,返回變量。這個(gè)算法沒有提供嚴(yán)格的交替。如果一個(gè)進(jìn)程想要進(jìn)入它們的臨界區(qū)域,它可以將它的標(biāo)識(shí)設(shè)為真,然后進(jìn)入它們的臨界區(qū)域。當(dāng)退出它的臨界區(qū)域,它可以設(shè)置轉(zhuǎn)向其他進(jìn)程的值。如果這個(gè)進(jìn)程想要在其他進(jìn)程之前再次進(jìn)入它的臨界區(qū)域,它會(huì)重復(fù)這樣的進(jìn)程:進(jìn)入它的臨界區(qū)域,在退出時(shí)轉(zhuǎn)向另一個(gè)進(jìn)程。在雙T返回變量的使用過(guò)程中,界等待受阻。假設(shè)兩個(gè)進(jìn)程想要進(jìn)入它們的責(zé)任所在的臨界區(qū)域。它們都將它們的標(biāo)志的值設(shè)為真;而只有輪到的那個(gè)線程可以執(zhí)行;其他的線程處于等待狀態(tài)。如果界等待沒有受阻,當(dāng)?shù)谝粋€(gè)進(jìn)程重復(fù)“進(jìn)入-退出”它的臨界區(qū)域這一過(guò)程。Dekker算法在一個(gè)進(jìn)程中設(shè)置一個(gè)轉(zhuǎn)向另一個(gè)進(jìn)程的值,從而保證另一個(gè)進(jìn)程接下來(lái)進(jìn)入它的臨界區(qū)域。6.2針對(duì)有n個(gè)進(jìn)程在帶有較低時(shí)間限制的等待n-1個(gè)的輪次這樣一個(gè)臨界區(qū)域最早的解決該問(wèn)題的正確方法是由艾森伯格和麥圭爾提出的。這些進(jìn)程有以下的共同的變量:枚舉pstate{idle,wantin,incs};pstateflag[n];intturn;所有的枚舉標(biāo)志被初始為空,輪次的最初值是無(wú)關(guān)緊要的(在0和n-1之間)。進(jìn)程p的結(jié)構(gòu)在6.26中有說(shuō)明。證明這個(gè)算法滿足臨界區(qū)域問(wèn)題的三項(xiàng)要求。答:a.互斥:注意到一個(gè)進(jìn)程只有在下列條件滿足時(shí)才能進(jìn)入臨界區(qū)域:沒有其他進(jìn)程在CS中有設(shè)置的標(biāo)識(shí)變量。這是由于進(jìn)程在CS中設(shè)置自身的標(biāo)識(shí)變量之前要先檢查其他進(jìn)程的狀態(tài)。我們保證沒有兩個(gè)進(jìn)程將同時(shí)進(jìn)入臨界區(qū)域。b.有空讓進(jìn):考慮以下情況,當(dāng)多進(jìn)程同時(shí)在CS中設(shè)置它們的標(biāo)識(shí)變量,然后檢查是否有其他進(jìn)程在cs中設(shè)置標(biāo)識(shí)變量。當(dāng)這種情況發(fā)生時(shí),所有的進(jìn)程意識(shí)到這里存在進(jìn)程競(jìng)爭(zhēng),在外層while(1)的循環(huán)下進(jìn)入下一次迭代,重置它們的標(biāo)識(shí)變量到want中?,F(xiàn)在只有唯一的進(jìn)程將設(shè)置它的輪次變量到cs中,這個(gè)唯一的進(jìn)程就是其序號(hào)是最接近輪次的。從這個(gè)角度來(lái)說(shuō),對(duì)于哪些序號(hào)次接近輪次的新的進(jìn)程就能決定進(jìn)入臨界區(qū)域,而且能同時(shí)在CS中設(shè)置它們的標(biāo)識(shí)。隨后這些進(jìn)程意識(shí)到這里存在競(jìng)爭(zhēng)的進(jìn)程,于是重新啟動(dòng)進(jìn)入臨界區(qū)域的進(jìn)程。在每次迭代中,進(jìn)程在cs中設(shè)置的序號(hào)值將變得更加接近輪次,最后我們得出以下結(jié)論:只有進(jìn)程k在cs中設(shè)置它的標(biāo)識(shí),而其他哪些序號(hào)在輪次和k之間不能在cs中設(shè)置它們的標(biāo)識(shí)。這個(gè)進(jìn)程僅能進(jìn)入臨界區(qū)域。c.有限等待:有限等待需要滿足以下事實(shí):當(dāng)進(jìn)程k在打算進(jìn)入臨界區(qū)域時(shí),它的標(biāo)識(shí)不再置為空閑。任何序號(hào)不在輪次和k之間的進(jìn)程不能進(jìn)入臨界區(qū)域。與此同時(shí),所有序號(hào)落在輪次和k之間且又想要進(jìn)入臨界區(qū)域的進(jìn)程能夠進(jìn)入臨界區(qū)域(這是基于系統(tǒng)一直在進(jìn)步的事實(shí)),這個(gè)輪次值變得越來(lái)越接近k。最后,要么輪次變?yōu)閗,要么沒有哪些序號(hào)在輪次和k之間的進(jìn)程,這樣進(jìn)程k就進(jìn)入臨界區(qū)域了。6.3忙等待的含義是什么?在操作系統(tǒng)中還有哪些其他形式的等待?忙等待能完全避免嗎?給出你的答案。答:忙等待意味著一個(gè)進(jìn)程正在等待滿足一個(gè)沒有閑置處理器的嚴(yán)格循環(huán)的條件。或者,一個(gè)進(jìn)程通過(guò)放棄處理器來(lái)等待,在這種情況下的塊等待在將來(lái)某個(gè)適當(dāng)?shù)臅r(shí)間被喚醒。忙等待能夠避免,但是承擔(dān)這種開銷與讓一個(gè)進(jìn)程處于沉睡狀態(tài),當(dāng)相應(yīng)程序的狀態(tài)達(dá)到的時(shí)候進(jìn)程又被喚醒有關(guān)。6.4解釋為什么自旋鎖不適合在單處理器系統(tǒng),而經(jīng)常在多處理器系統(tǒng)下使用?答:自旋鎖不適合在單處理器系統(tǒng)是因?yàn)閺淖孕i中打破一個(gè)進(jìn)程的條件只有在執(zhí)行一個(gè)不同的進(jìn)程時(shí)才能獲得。如果這個(gè)進(jìn)程沒有閑置處理器,其他進(jìn)程不能夠得到這個(gè)機(jī)會(huì)去設(shè)定一個(gè)第一個(gè)進(jìn)程進(jìn)展需要的程序條件。在一個(gè)多處理器系統(tǒng)中,其他進(jìn)程在其他處理器上執(zhí)行,從而為了讓第一個(gè)進(jìn)程從自旋鎖中釋放修改程序狀態(tài)。6.5如果一個(gè)同步元是在一個(gè)用戶級(jí)程序中使用的,解釋在一個(gè)單處理器系統(tǒng)中為什么通過(guò)停止中斷去實(shí)現(xiàn)這個(gè)同步元是不適合的?答:如果一個(gè)用戶級(jí)程序具有停止中斷的能力,那么它能夠停止計(jì)時(shí)器中斷,防止上下文切換的發(fā)生,從而允許它使用處理器而不讓其他進(jìn)程執(zhí)行。6.6解釋為什么在一個(gè)多處理器系統(tǒng)中中斷不適合同步元?答:由于只有在防止其他進(jìn)程在一個(gè)中斷不能實(shí)現(xiàn)的處理器上執(zhí)行來(lái)停止中斷,中斷在多處理器系統(tǒng)中是不夠的。在對(duì)于進(jìn)程能在其他處理器上執(zhí)行是沒有心智的,所以進(jìn)程停止中斷不能保證互斥進(jìn)入程序狀態(tài)。6.76.8服務(wù)器能夠設(shè)計(jì)成限制打開連接的數(shù)量。比如,一臺(tái)服務(wù)器可以在任何時(shí)候有n個(gè)插座連接。這n個(gè)連接一形成,服務(wù)器就不能接收再有進(jìn)來(lái)的連接直到一個(gè)現(xiàn)有的連線釋放。解釋為什么信號(hào)量能夠通過(guò)服務(wù)器限制當(dāng)前連線的數(shù)量而被使用。答:信號(hào)量初始化為允許開放式的插座連接的數(shù)量。當(dāng)一個(gè)連接被接受,收購(gòu)方法調(diào)用。當(dāng)連接釋放時(shí),釋放方法調(diào)用。如果系統(tǒng)道道了允許開放式的插座連接的數(shù)量,相繼調(diào)用收購(gòu)方法將受阻直到一個(gè)現(xiàn)有的連線終止,釋放方法調(diào)用。6.9證明如果獲得和釋放的信號(hào)量操作沒有動(dòng)態(tài)地執(zhí)行,那么互斥會(huì)受干擾。答:收購(gòu)操作自動(dòng)遞減和信號(hào)量有關(guān)的值。如果兩個(gè)收購(gòu)操作在信號(hào)量的值為1的信號(hào)量上執(zhí)行,而且這兩種操作不是自動(dòng)執(zhí)行的,那么這兩個(gè)操作在進(jìn)展中會(huì)遞減信號(hào)量的值,從而干擾互斥。10(程序,不用翻)(6.13)6.12證明管程和信號(hào)量是相當(dāng)于它們能在執(zhí)行相同類型的同步問(wèn)題時(shí)使用答:在用下列方法使用信號(hào)量時(shí),管程可以實(shí)施。每個(gè)條件變量是由一個(gè)隊(duì)列中的線程等待條件組成的。每個(gè)線程有一個(gè)和它的隊(duì)列進(jìn)入有關(guān)的信號(hào)量。當(dāng)線程表現(xiàn)出等待操作時(shí),它創(chuàng)造一個(gè)心得信號(hào)量(初始化為0),附加信號(hào)量到和條件變量有關(guān)的隊(duì)列中,在新創(chuàng)造的信號(hào)量上執(zhí)行阻塞信號(hào)遞減操作。6.15討論在讀者-作者問(wèn)題中的公平和吞吐量的權(quán)衡問(wèn)題。提出一種解決讀者-作者問(wèn)題而不引起饑餓的方法答:在讀者-作者問(wèn)題中吞吐量是由利益多的讀者增加的,而不是讓一個(gè)作家獨(dú)占式地獲得共同的價(jià)值觀。另一個(gè)方面,有利于讀者可能會(huì)導(dǎo)致饑餓的作者。在讀者-作者問(wèn)題中的借能夠通過(guò)保持和等待進(jìn)程有關(guān)的時(shí)間戳來(lái)避免。當(dāng)作者完成他的任務(wù),那么喚醒那些已經(jīng)等了最長(zhǎng)期限的進(jìn)程。當(dāng)讀者到達(dá)和注意到另一個(gè)讀者正在訪問(wèn)數(shù)據(jù)庫(kù),那么它只有在沒有等待的作者時(shí)才能進(jìn)入臨界區(qū)域。這些限制保證公平。6.16管程的signal操作和信號(hào)量的signal操作有什么不同?管程的signal操作在以下情況下是不能繼續(xù)進(jìn)行的:當(dāng)執(zhí)行signal操作并且無(wú)等待線程時(shí),那么系統(tǒng)會(huì)忽略signal操作,認(rèn)為signal操作沒有發(fā)生過(guò)。如果隨后執(zhí)行wait操作,那么相關(guān)的線程就會(huì)被阻塞。然后在信號(hào)量中,即使沒有等待線程,每個(gè)signal操作都會(huì)是相應(yīng)的信號(hào)量值增加。接下來(lái)的等待操作因?yàn)橹暗男盘?hào)量值的增加而馬上成功進(jìn)行。6.17假設(shè)signal語(yǔ)句只能作為一個(gè)管程中的最后一條語(yǔ)句出現(xiàn),可以怎樣簡(jiǎn)化6.7節(jié)所描述的實(shí)現(xiàn)?如果signal語(yǔ)句作為最后一條語(yǔ)句出現(xiàn),那么鎖會(huì)使發(fā)出信號(hào)的進(jìn)程轉(zhuǎn)化成接受信號(hào)的進(jìn)程。否則,發(fā)出信號(hào)的進(jìn)程將解鎖,并且接受信號(hào)的進(jìn)程則需要和其他進(jìn)程共同操作獲得鎖從而使操作繼續(xù)下去。6.21假設(shè)將管程中的wait和signal操作替換成一個(gè)單一的構(gòu)件await(B),這里B是一個(gè)普通的布爾表達(dá)式,進(jìn)程執(zhí)行直到B變成真用這種方法寫一個(gè)管程實(shí)現(xiàn)讀者—作者問(wèn)題。解釋為什么一般來(lái)說(shuō)這種結(jié)構(gòu)實(shí)現(xiàn)的效率不高。要使這種實(shí)現(xiàn)達(dá)到高效率需要對(duì)await語(yǔ)句加上哪些限制?(提示,限制B的一般性,參見Kessels[1977].)讀者—作者問(wèn)題可以進(jìn)行以下修改,修改中產(chǎn)生了await聲明:讀者可以執(zhí)行“await(activewriters==0&&waitingwriters==0)”來(lái)確保在進(jìn)入臨界區(qū)域時(shí)沒有就緒的作者和等待的作者。作者可以執(zhí)行“await(activewriters==0&&activereaders==0)”來(lái)確保互斥。在signal操作后,系統(tǒng)檢查滿足等待條件滿足的等待線程,檢查其中被喚醒的等待線程。這個(gè)要求相當(dāng)復(fù)雜,并且可能需要用到交互的編譯器來(lái)評(píng)估在不同時(shí)間點(diǎn)下的條件??梢酝ㄟ^(guò)限制布爾條件,使布爾變量和其他部分分開作為獨(dú)立的程序變量(僅僅用來(lái)檢查是否相等的一個(gè)靜態(tài)值)。在這種情況下,布爾條件可以傳達(dá)給運(yùn)行時(shí)系統(tǒng),該系統(tǒng)可以執(zhí)行檢查每一個(gè)它所需要的時(shí)間,以確定哪些線程被喚醒。6.23為什么Solaris、Linux和Windows2000都使用自旋鎖作為多處理器系統(tǒng)的同步機(jī)制而不作為單處理器系統(tǒng)的同步機(jī)制?Solaris,Linux和Windows2000中只有在多處理器系統(tǒng)才能使用自旋鎖作為一個(gè)同步機(jī)制。自旋鎖不適合單處理器的系統(tǒng),因?yàn)榇蚱屏诉@一進(jìn)程的自旋鎖只有通過(guò)執(zhí)行不同的進(jìn)程才可以得到。如果這一進(jìn)程不會(huì)放棄此處理器,其他進(jìn)程就無(wú)法設(shè)置第一個(gè)進(jìn)程所要求的程序條件,從而不能繼續(xù)操作。在一個(gè)多處理器系統(tǒng),其他進(jìn)程執(zhí)行其他處理器,從而修改程序狀態(tài)從自旋鎖中釋放第一個(gè)進(jìn)程。6.24在基于日志的系統(tǒng)中可以給事務(wù)提供支持,在相應(yīng)日志記錄寫到穩(wěn)定存儲(chǔ)之前不能允許真正地更新數(shù)據(jù)項(xiàng)。為什么這個(gè)限制是必需的?如果事務(wù)需要放棄,那么更新的數(shù)據(jù)項(xiàng)的值應(yīng)該要恢復(fù)到原來(lái)的值。這就需要原來(lái)值的數(shù)據(jù)在進(jìn)行操作之前完成更新。6.25證明兩段鎖協(xié)議能確保沖突的串行執(zhí)行。調(diào)度是指一個(gè)或多個(gè)事務(wù)的執(zhí)行順序。一個(gè)串行調(diào)度是指每個(gè)事務(wù)執(zhí)行的原子調(diào)度。如果一個(gè)調(diào)度由兩個(gè)不同的事務(wù)組成,通過(guò)連續(xù)的操作從這兩個(gè)事務(wù)中獲得相同的數(shù)據(jù),并至少有一個(gè)write操作,然后有所謂的沖突。如果一個(gè)調(diào)度可以通過(guò)一系列非沖突操作的交換而轉(zhuǎn)化成串行調(diào)度,那么這個(gè)調(diào)度為是沖突可串行化。這兩階段加鎖協(xié)議確保沖突串行化,因?yàn)楠?dú)占鎖(這是用于寫操作)必須連續(xù)收購(gòu),不釋放任何鎖在獲?。ㄔ鲩L(zhǎng))的階段。其他事務(wù)希望獲得同樣的鎖必須等待第一個(gè)事務(wù)開始釋放鎖。通過(guò)要求任何鎖必須首先釋放所有鎖,從來(lái)避免潛在的沖突。6.26分配一個(gè)新時(shí)間戳給已經(jīng)恢復(fù)到原值的事務(wù)有什么影響?對(duì)于新進(jìn)入系統(tǒng)進(jìn)程的事務(wù),其所賦予的時(shí)間戳是如何大于原先事務(wù)的時(shí)間戳的?在原先事務(wù)的訪問(wèn)變量改變后執(zhí)行事務(wù),那么相應(yīng)的事務(wù)也恢復(fù)到原先的值。如果他們沒有執(zhí)行此項(xiàng)操作(也就是說(shuō)沒有重復(fù)的原先事務(wù)的訪問(wèn)變量值),那么這些操作在適當(dāng)?shù)臅r(shí)候就不會(huì)受到約束。6.27假設(shè)數(shù)目有限的資源中的一個(gè)單一的資源型必須加以管理。進(jìn)程需要一定數(shù)量的這種資源,一旦用完將釋放它們。例如,許多商業(yè)軟件包提供了一定數(shù)量的許可證,這表明一些應(yīng)用程序可以同時(shí)運(yùn)行.當(dāng)應(yīng)用程序啟動(dòng)時(shí),許可證的計(jì)數(shù)遞減。當(dāng)申請(qǐng)終止,許可證計(jì)數(shù)遞增。如果所有的許可證都在使用,那么要求啟動(dòng)該應(yīng)用程序的申請(qǐng)被剝奪了。只有當(dāng)現(xiàn)有的許可證持有人終止申請(qǐng)并切許可證已經(jīng)返還,那么這種申請(qǐng)將被授予.下列程序段是用來(lái)管理一個(gè)數(shù)目有限的情況下的可用資源。最多的資源數(shù)量和一些可用的資源數(shù)量如下所示:#defineMAXRESOURCES5intavailableresources=MAXRESOURCES;Whenaprocesswishestoobtainanumberofresources,itinvokesthedecreasecount()function:/*decreaseavailableresourcesbycountresources*//*return0ifsufficientresourcesavailable,*//*otherwisereturn-1*/intdecreasecount(intcount){if(availableresources<count)return-1;else{availableresources-=count;return0;}}Whenaprocesswantstoreturnanumberofresources,itcallsthede-creasecount()function:/*increaseavailableresourcesbycount*/intincreasecount(intcount){availableresources+=count;return0;}前面的程序段將會(huì)產(chǎn)生一個(gè)競(jìng)爭(zhēng)的條件。如下:確定數(shù)據(jù)參與競(jìng)爭(zhēng)當(dāng)競(jìng)爭(zhēng)的條件發(fā)生時(shí),確定代碼段的位置(或是區(qū)域)利用Java同步,確定競(jìng)爭(zhēng)的條件,同時(shí)修改decreaseCount()以使一個(gè)線程在沒有足夠的現(xiàn)有的資源下阻塞。a.確定數(shù)據(jù)參與競(jìng)爭(zhēng):可以利用的變量資源當(dāng)競(jìng)爭(zhēng)的條件發(fā)生時(shí),確定代碼段的位置(或是區(qū)域):代碼使現(xiàn)有的資源遞減和代碼現(xiàn)有資源遞增的聲明可以放在競(jìng)爭(zhēng)的條件。使用信號(hào)量,確定競(jìng)爭(zhēng)條件:使用信號(hào)量表示當(dāng)前可用資源變量,并且用信號(hào)量遞增和信號(hào)量遞減的操作代替遞增和遞減的操作。
7.1假設(shè)有如圖7.1所示的交通死鎖。證明這個(gè)例子中實(shí)際上包括了死鎖的四個(gè)必要條件。給出一個(gè)簡(jiǎn)單的規(guī)則用來(lái)在這個(gè)系統(tǒng)中避免死鎖。死鎖的四個(gè)必要條件:(1)互斥;(2)占有并等待;(3)非搶占;(4)循環(huán)等待?;コ獾臈l件是只有一輛車占據(jù)道路上的一個(gè)空間位置。占有并等待表示一輛車占據(jù)道路上的位置并且等待前進(jìn)。一輛車不能從道路上當(dāng)前的位置移動(dòng)開(就是非搶占)。最后就是循環(huán)等待,因?yàn)槊總€(gè)車正等待著隨后的汽車向前發(fā)展。循環(huán)等待的條件也很容易從圖形中觀察到。一個(gè)簡(jiǎn)單的避免這種的交通死鎖的規(guī)則是,汽車不得進(jìn)入一個(gè)十字路口如果明確地規(guī)定,這樣就不會(huì)產(chǎn)生相交。7.2考慮如下的死鎖可能發(fā)生在哲學(xué)家進(jìn)餐中,哲學(xué)家在同個(gè)時(shí)間獲得筷子。討論此種情況下死鎖的四個(gè)必要條件的設(shè)置。討論如何在消除其中任一條件來(lái)避免死鎖的發(fā)生。死鎖是可能的,因?yàn)檎軐W(xué)家進(jìn)餐問(wèn)題是以以下的方式滿足四個(gè)必要條件:1)相斥所需的筷子,2)哲學(xué)家守住的筷子在手,而他們等待其他筷子,3)沒有非搶占的筷子,一個(gè)筷子分配給一個(gè)哲學(xué)家不能被強(qiáng)行拿走,4)有可能循環(huán)等待。死鎖可避免克服的條件方式如下:1)允許同時(shí)分享筷子,2)有哲學(xué)家放棄第一雙筷子如果他們無(wú)法獲得其他筷子,3)允許筷子被強(qiáng)行拿走如果筷子已經(jīng)被一位哲學(xué)家了占有了很長(zhǎng)一段時(shí)間4)實(shí)施編號(hào)筷子,總是獲得較低編號(hào)的筷子,之后才能獲得較高的編號(hào)的筷子。7.3一種可能以防止死鎖的解決辦法是要有一個(gè)單一的,優(yōu)先于任何其他資源的資源。例如,如果多個(gè)線程試圖訪問(wèn)同步對(duì)象A?…E,那么就可能發(fā)生死鎖。(這種同步對(duì)象可能包括互斥體,信號(hào)量,條件變量等),我們可以通過(guò)增加第六個(gè)對(duì)象來(lái)防止死鎖。每當(dāng)一個(gè)線程希望獲得同步鎖定給對(duì)象A???E,它必須首先獲得對(duì)象F的鎖.該解決方案被稱為遏制:對(duì)象A???E的鎖內(nèi)載對(duì)象F的鎖。對(duì)比此方案的循環(huán)等待和Section7.4.4的循環(huán)等待。這很可能不是一個(gè)好的解決辦法,因?yàn)樗a(chǎn)生過(guò)大的范圍。盡可能在狹隘的范圍內(nèi)定義死鎖政策會(huì)更好。7.4對(duì)下列問(wèn)題對(duì)比循環(huán)等待方法和死鎖避免方法(例如銀行家算法):a.運(yùn)行費(fèi)用b.系統(tǒng)的吞吐量死鎖避免方法往往會(huì)因?yàn)樽粉櫘?dāng)前資源分配的成本從來(lái)增加了運(yùn)行費(fèi)用。然而死鎖避免方法比靜態(tài)地防止死鎖的形成方法允許更多地并發(fā)使用資源。從這個(gè)意義上說(shuō),死鎖避免方案可以增加系統(tǒng)的吞吐量。7.5在一個(gè)真實(shí)的計(jì)算機(jī)系統(tǒng)中,可用的資源和進(jìn)程命令對(duì)資源的要求都不會(huì)持續(xù)很久是一致的長(zhǎng)期(幾個(gè)月)。資源會(huì)損壞或被替換,新的進(jìn)程會(huì)進(jìn)入和離開系統(tǒng),新的資源會(huì)被購(gòu)買和添加到系統(tǒng)中。如果用銀行家算法控制死鎖,下面哪些變化是安全的(不會(huì)導(dǎo)致可能的死鎖),并且在什么情況下發(fā)生?增加可用資源(新的資源被添加到系統(tǒng))減少可用資源(資源被從系統(tǒng)中永久性地移出)增加一個(gè)進(jìn)程的Max(進(jìn)程需要更多的資源,超過(guò)所允許給予的資源)減少一個(gè)進(jìn)程的Max(進(jìn)程不再需要那么多資源)增加進(jìn)程的數(shù)量f.減少進(jìn)程的數(shù)量增加可用資源(新的資源被添加到系統(tǒng)):這個(gè)可以在沒有任何問(wèn)題的情況下安全地改變減少可用資源(資源被從系統(tǒng)中永久性地移出):這可能會(huì)影響到系統(tǒng),并導(dǎo)致可能性死鎖因?yàn)橄到y(tǒng)的安全性假定其擁有一定數(shù)量的可用資源增加一個(gè)進(jìn)程的Max(進(jìn)程需要更多的資源,超過(guò)所允許給予的資源):這可能會(huì)影響到系統(tǒng),并可能導(dǎo)致死鎖減少一個(gè)進(jìn)程的Max(進(jìn)程不再需要那么多資源):這個(gè)可以在沒有任何問(wèn)題的情況下安全地改變?cè)黾舆M(jìn)程的數(shù)量:如果允許分配資源給新進(jìn)程,那么該系統(tǒng)并沒有進(jìn)入一個(gè)不安全的狀態(tài)。減少進(jìn)程的數(shù)量:這個(gè)可以在沒有任何問(wèn)題的情況下安全地改變7.6假設(shè)系統(tǒng)中有四個(gè)相同類型的資源被三個(gè)進(jìn)程共享。每個(gè)進(jìn)程最多需要兩個(gè)資源。證明這個(gè)系統(tǒng)不會(huì)死鎖。假設(shè)該系統(tǒng)陷入死鎖。這意味著,每一個(gè)進(jìn)程持有一個(gè)資源,并且正等待另一個(gè)資源。因?yàn)橛腥齻€(gè)進(jìn)程和四個(gè)資源,一個(gè)進(jìn)程就必須獲取兩個(gè)資源。這一進(jìn)程并不需要更多的資源,因此當(dāng)其完成時(shí)會(huì)返回其資源。7.7假設(shè)一個(gè)系統(tǒng)有m個(gè)資源被n個(gè)進(jìn)程共享,進(jìn)程每次只請(qǐng)求和釋放一個(gè)資源。證明只要系統(tǒng)符合下面兩個(gè)條件,就不會(huì)發(fā)生死鎖:a.每個(gè)進(jìn)程需要資源的最大值在1到m之間b.所有進(jìn)程需要資源的最大值的和小于m+nAnswer:使用Section7.6.2的術(shù)語(yǔ),可以有:a._ni=1Maxi<m+nb.Maxi≥1foralliProof:Needi=Maxi?AllocationiIfthereexistsadeadlockstatethen:c._ni=1Allocationi=mUsea.toget:_Needi+_Allocationi=_Maxi<m+nUsec.toget:_Needi+m<m+nRewritetoget:_ni=1Needi<n //符號(hào)打不出來(lái),大家自己看答案這意味著存在一個(gè)Pi的進(jìn)程,其Needi=0.如果Maxi>=1,那么Pi進(jìn)程至少有一個(gè)資源可以釋放。從而系統(tǒng)就不會(huì)進(jìn)入死鎖狀態(tài)。7.8假設(shè)哲學(xué)家進(jìn)餐問(wèn)題中,筷子被擺放在桌子的中央,它們中的任何一雙都可以被哲學(xué)家使用。假如每次只能請(qǐng)求一根筷子,試描述一種在沒有引起死鎖的情況下,一個(gè)特殊的請(qǐng)求請(qǐng)求能否被滿足的簡(jiǎn)單的規(guī)則,將筷子分配給哲學(xué)家。Answer:以下規(guī)則避免了死鎖:當(dāng)一個(gè)哲學(xué)家發(fā)出一個(gè)需要第一根筷子的請(qǐng)求時(shí),如果沒有別的哲學(xué)家有兩根筷子或者只留有一根筷子時(shí),這個(gè)請(qǐng)求就不被允許。7.9與上一題目中所給的環(huán)境相同。假如現(xiàn)在每個(gè)哲學(xué)家請(qǐng)求三根筷子來(lái)吃飯,而且這種資源請(qǐng)求仍舊是分開發(fā)生的。試描述一種類似的在沒有引起死鎖的情況下,一個(gè)特殊的請(qǐng)求請(qǐng)求能否被滿足的簡(jiǎn)單的規(guī)則,將筷子分配給哲學(xué)家。Answer:當(dāng)一個(gè)哲學(xué)家發(fā)出一個(gè)需要第一根筷子的請(qǐng)求時(shí),滿足其情況,如果1)那個(gè)哲學(xué)家已經(jīng)有2根筷子,并且還有2根筷子剩余,2)那個(gè)哲學(xué)家已經(jīng)有1根筷子,并且還有2根筷子剩余,3)最少有1根筷子剩余,并且最少有一個(gè)哲學(xué)家擁有3根筷子,4)那個(gè)哲學(xué)家沒有筷子,但有2根筷子剩余,并且最少存在另外一個(gè)擁有2根筷子的哲學(xué)家放下他的筷子。7.10我們可以通過(guò)把數(shù)組的維度減少到1,而從一般的銀行家算法中得到一個(gè)單一資源類型的銀行家算法。試通過(guò)一個(gè)例子說(shuō)明對(duì)于每個(gè)資源類型,多資源類型的銀行家方案不能通過(guò)單一資源類型方案的單獨(dú)運(yùn)用來(lái)實(shí)現(xiàn)。Answer:假設(shè)一個(gè)系統(tǒng)有資源A,B,C和進(jìn)程P0,P1,P2,P3,P4,并按照下圖來(lái)分配ALLOCATIONABCP0,010P1,302P2302P3211P4002還需要下列資源的數(shù)量NeedABCP0743P1020P2600P3011P4431如果可利用的資源是(230),我們可以看到,進(jìn)程P0請(qǐng)求(0,2,0)是不能被滿足的,因?yàn)樗華vailiable少(210),從而導(dǎo)致沒有一個(gè)進(jìn)程可以被完成。然而,如果我們把三種資源看做是三個(gè)獨(dú)立資源類型的銀行家算法,可以得到以下各表:對(duì)于資源AAllocatedNeedP0,07P130P236P320P404在次序P1,P3,P4,P2,P0下,各進(jìn)程可以被滿足。對(duì)于資源BAllocatedNeedP0,32P102P200P311P403在次序P2,P3,P1,P0,P4下,各進(jìn)程可以被滿足。對(duì)于資源CAllocatedNeedP0,03P120P220P311P421在次序P1,P2,P0,P3,P4下,各進(jìn)程可以被滿足。我們可以看出,如果我們使用多重資源類型的銀行家算法,對(duì)于進(jìn)程P0的請(qǐng)求(020)是無(wú)法滿足的,因?yàn)樗瓜到y(tǒng)處于一個(gè)不安全的狀態(tài),然而,如果我們使用單一資源類型的銀行家算法,把它們看做是三個(gè)分開的資源,這個(gè)請(qǐng)求是允許的。同時(shí),如果我們有多重資源類型,我們則必須使用多重資源類型的銀行家算法。7.11考慮下面的一個(gè)系統(tǒng)在某一時(shí)刻的狀態(tài):Allocation Max AvailableABCD ABCD ABCDP0 0012 0012 1520P1 1000 1750P2 1354 2356P3 0632 0652P4 0014 0656使用銀行家算法回答下面問(wèn)題:a.Need矩陣的內(nèi)容是怎樣的?b.系統(tǒng)是否處于安全狀態(tài)?c.如果從進(jìn)程P1發(fā)出一個(gè)請(qǐng)求(0420),這個(gè)請(qǐng)求能否被滿足?Answer:a.Need矩陣的內(nèi)容是P0(0000)P1(0750)P2(1002)P3(0020)P4(0640)。b..系統(tǒng)處于安全狀態(tài),因?yàn)锳vailable矩陣等于(1520),進(jìn)程P0和P3都可以運(yùn)行,當(dāng)進(jìn)程P3運(yùn)行完時(shí),它釋放它的資源,而允許其它進(jìn)程運(yùn)行。c.可以被滿足,滿足以后,Available矩陣等于(1100),當(dāng)以次序P0,P2,P3,P1,P4運(yùn)行時(shí)候,可以完成運(yùn)行。7.12在死鎖檢測(cè)算法中,樂觀假設(shè)是什么?這種假設(shè)怎樣可以被違反?Answer:樂觀假設(shè)是在資源分配方面和進(jìn)程請(qǐng)求資源的過(guò)程中,不存在任何形式的循環(huán)等待。如果在實(shí)際過(guò)程中,一個(gè)循環(huán)等待確實(shí)發(fā)生,這種假設(shè)可以被違反。8.1解釋內(nèi)部碎片和外部碎片的區(qū)別?Answer:內(nèi)部碎片是某一區(qū)域或某一頁(yè)中,未被占據(jù)其位置的作業(yè)所使用的區(qū)域。直到作業(yè)完成,釋放頁(yè)或區(qū)域,這個(gè)空間才能被系統(tǒng)所利用。8.2考慮下面產(chǎn)生二進(jìn)制的過(guò)程。編譯器是用來(lái)為每個(gè)獨(dú)立單元產(chǎn)生目標(biāo)代碼,連接編輯器是用來(lái)聯(lián)合各個(gè)部分的目標(biāo)單元組成一個(gè)單一的程序二進(jìn)制。連接編輯器是怎樣對(duì)內(nèi)存地址改變指令和數(shù)據(jù)的捆綁?從編譯器到連接編輯器,什么信息需要被通過(guò),而使內(nèi)存綁定連接編輯器作業(yè)比較容易?Answer:連接編輯器不得不將分解的符號(hào)地址替換為在最終的程序二進(jìn)制中,與變量相聯(lián)系的實(shí)際地址。為了完成這個(gè),單元必須追蹤那些查閱到的未分解的符號(hào)指令。在連接期間,全部程序二進(jìn)制中的每個(gè)單元會(huì)被分配到一序列的地址空間,當(dāng)它完成時(shí),對(duì)于未分解的符號(hào)關(guān)系,可以通過(guò)這個(gè)二進(jìn)制輸出,當(dāng)每個(gè)另外單元包含一系列需要修復(fù)的指令時(shí),這個(gè)二進(jìn)制可以在另外單元被修復(fù)。8.3按順序給出5個(gè)部分的內(nèi)存,分別是100KB,500KB,200KB,300KB和600KB,用firstfit,best-fit和worst-fit算法,能夠怎樣按順序分配進(jìn)程212KB,417KB,112KB,426KB和426KB?哪個(gè)算法充分利用了內(nèi)存空間?Answer:a.First-fit:212Kisputin500Kpartition417Kisputin600Kpartition112Kisputin288Kpartition(newpartition288K=500K?212K)426KmustwaitBest-fit:212Kisputin300Kpartition417Kisputin500Kpartition112Kisputin200Kpartition426Kisputin600KpartitionWorst-fit:212Kisputin600Kpartition417Kisputin500Kpartition112Kisputin388Kpartitiono.426KmustwaitBest-fit:算法充分利用了內(nèi)存空間。8.4在運(yùn)行過(guò)程中,許多系統(tǒng)允許程序分配更多的內(nèi)存給它的地址空間。在程序堆中的數(shù)據(jù)分配是這種分配方式的一個(gè)實(shí)例。在下面的方案中,為了支持動(dòng)態(tài)內(nèi)存分配的要求是什么?a.連續(xù)內(nèi)存分配b.純段式分配c.純頁(yè)式分配Answer:a.連續(xù)內(nèi)存分配:當(dāng)沒有足夠的空間給程序去擴(kuò)大它已分配的內(nèi)存空間時(shí),將要求重新分配整個(gè)程序。純段式分配:當(dāng)沒有足夠的空間給段去擴(kuò)大它的已分配內(nèi)存空間時(shí),將要求重新分配整個(gè)段。純頁(yè)式分配:在沒有要求程序地址空間再分配的方案下,新頁(yè)增加的分配是可能的。比較在主存組織方案中,連續(xù)內(nèi)存分配,純段式分配和純頁(yè)式分配在下面問(wèn)題中的關(guān)系。a.外部碎片b.內(nèi)部碎片c.通過(guò)進(jìn)程分享代碼的能力Answer:連續(xù)內(nèi)存分配會(huì)產(chǎn)生外部碎片,因?yàn)榈刂房臻g是被連續(xù)分配的,當(dāng)舊進(jìn)程結(jié)束,新進(jìn)程初始化的時(shí)候,洞會(huì)擴(kuò)大。連續(xù)內(nèi)存分配也不允許進(jìn)程共享代碼,因?yàn)橐粋€(gè)進(jìn)程的虛擬內(nèi)存段是不被允許闖入不連續(xù)的段的。純段式分配也會(huì)產(chǎn)生外部碎片,因?yàn)樵谖锢韮?nèi)存中,一個(gè)進(jìn)程的段是被連續(xù)放置的,以與當(dāng)死進(jìn)程的段被新進(jìn)程的段所替代時(shí),碎片也將會(huì)產(chǎn)生。然而,段式分配可以使進(jìn)程共享代碼;比如,兩個(gè)不同的進(jìn)程可以共享一個(gè)代碼段,但是有不同的數(shù)據(jù)段。純頁(yè)式分配不會(huì)產(chǎn)生外部碎片,但會(huì)產(chǎn)生內(nèi)部碎片。進(jìn)程可以在頁(yè)granularity中被分配,以與如果一頁(yè)沒有被完全利用,它就會(huì)產(chǎn)生內(nèi)部碎片并且會(huì)產(chǎn)生一個(gè)相當(dāng)?shù)目臻g浪費(fèi)。在頁(yè)granularity,頁(yè)式分配也允許進(jìn)程共享代碼。在一個(gè)頁(yè)式分配系統(tǒng)中,為什么一個(gè)進(jìn)程不被允許進(jìn)入它所不擁有的內(nèi)存?操作系統(tǒng)怎么能被允許進(jìn)入其它內(nèi)存?它為什么應(yīng)當(dāng)可以或不可以進(jìn)入?Answer:地址在頁(yè)式分配系統(tǒng)上是一個(gè)邏輯頁(yè)號(hào)和一個(gè)偏移量。在邏輯頁(yè)號(hào)的基礎(chǔ)上產(chǎn)生一個(gè)物理頁(yè)號(hào),物理頁(yè)通過(guò)搜索表被找到。因?yàn)椴僮飨到y(tǒng)控制這張表的內(nèi)容,只有在這些物理頁(yè)被分配到進(jìn)程中時(shí),它可以限制一個(gè)進(jìn)程的進(jìn)入。一個(gè)進(jìn)程想要分配一個(gè)它所不擁有的頁(yè)是不可能的,因?yàn)檫@一頁(yè)在頁(yè)表中不存在。為了允許這樣的進(jìn)入,操作系統(tǒng)只簡(jiǎn)單的需要準(zhǔn)許入口給無(wú)進(jìn)程內(nèi)存被加到進(jìn)程頁(yè)表中。當(dāng)兩個(gè)或多個(gè)進(jìn)程需要交換數(shù)據(jù)時(shí),這是十分有用的。它們只
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44619-2024福壽螺檢疫鑒定方法
- 家用水龍頭過(guò)濾器產(chǎn)品供應(yīng)鏈分析
- 包裝用紙袋產(chǎn)品供應(yīng)鏈分析
- 工商管理輔助行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 含藥喉嚨噴劑產(chǎn)品供應(yīng)鏈分析
- 發(fā)行預(yù)付費(fèi)代金券行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 刷子用貉毛產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 年金保險(xiǎn)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 虛擬現(xiàn)實(shí)游戲用耳機(jī)項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 安排和舉辦青年足球訓(xùn)練項(xiàng)目行業(yè)經(jīng)營(yíng)分析報(bào)告
- 道路改造工程可行性研究報(bào)告
- 國(guó)家開放大學(xué)英語(yǔ)3形考答案
- 自然災(zāi)害專題
- GB/T 7404.1-2000內(nèi)燃機(jī)車用排氣式鉛酸蓄電池
- GB/T 12346-2006腧穴名稱與定位
- 貝加爾湖畔劉思遠(yuǎn) 簡(jiǎn)譜領(lǐng)唱與混聲四部合唱【原調(diào)-F】
- 初中青春期健康教育課件
- 六年級(jí)語(yǔ)文課外閱讀含答案
- 校長(zhǎng)在初三年級(jí)家長(zhǎng)會(huì)講話課件
- 骨質(zhì)疏松癥診療指南
- 蜜蜂養(yǎng)殖技術(shù)課件
評(píng)論
0/150
提交評(píng)論