現代作業系統 第一章 引論 習題
第1章 引論 習題
注:非引用部分,為自己思考後答案,非標準答案。
Q1:作業系統的主要兩大作用是什麼?
A:考察作業系統有兩種觀點:資源管理觀點和擴充套件的機器觀點,對應著兩種功能:為使用者程式提供抽象和管理計算機資源。
Q2:在1.4節中描述了9中不同型別的作業系統,列舉每種作業系統的應用。
A:
- 大型機作業系統---大型公司的資料中心 ---提供批處理、事務處理和分時;
- 伺服器作業系統---大型的個人計算機、工作站、大型機---提供列印服務、檔案服務或Web服務;
- 多處理器作業系統---配有通訊、連線和一致性等專門功能的伺服器作業系統的變體;
- 個人計算機作業系統---為單個使用者提供良好的支援,廣泛用於字處理、電子表格、遊戲和Internet訪問;
- 掌上計算機作業系統---平板電腦、智慧手機和其他掌上計算機系統;
- 嵌入式作業系統---微波爐、電視機、汽車、DVD燒錄機、行動電話以及MP3播放器;
- 感測器節點作業系統---可以彼此通訊並且實用無線通訊基站的微型計算機--用於建築物周邊保護、國土邊界保衛、森林火災探測、氣象預測用的溫度和降水測量;
- 實時作業系統---工廠中的實時計算機必須收集生產過程的資料並用有關資料控制機器,分為硬實時系統和軟實時系統;
- 智慧卡作業系統---電子支付的智慧卡。
Q3:分時系統和多道程式系統的區別是什麼?
A:
多道程式系統是在計算機記憶體中同時存放幾道相互獨立的程式,使它們在管理程式控制之下,相互穿插的執行。 兩個或兩個以上程式在計算機系統中同處於開始和結束之間的狀態。這就稱為多道程式技術執行的特徵:多道、巨集觀上並行、微觀上序列。
多道程式設計指的是允許多個程式同時進入一個計算機系統的主儲存器並啟動進行計算的方法。也就是說,計算機記憶體中可以同時存放多道(兩個以上相互獨立的)程式,它們都處於開始和結束之間。從巨集觀上看是並行的,多道程式都處於執行中,並且都沒有執行結束;從微觀上看是序列的,各道程式輪流使用CPU,交替執行。引入多道程式設計技術的根本目的是為了提高CPU的利用率,充分發揮計算機系統部件的並行性,現代計算機系統都採用了多道程式設計技術。
分時作業系統是使一臺計算機同時為幾個、幾十個甚至幾百個使用者服務的一種作業系統。把計算機與許多終端使用者連線起來,分時作業系統將系統處理機時間與記憶體空間按一定的時間間隔,輪流地切換給各終端使用者的程式使用。由於時間間隔很短,每個使用者的感覺就像他獨佔計算機一樣。分時作業系統的特點是可有效增加資源的使用率。例如UNIX系統就採用剝奪式動態優先的CPU排程,有力地支援分時操作。
分時作業系統是給不同使用者提供程式的使用,而多道程式系統則是不同程式間的穿插執行。
總之,分時作業系統主要是針對於多使用者來說的,而多道程式系統主要是針對於多程式來說的,注意使用者和程式之間的區別。
Q4:....每次快取一整個cache行(通常每行32或64位元組),而不是一個位元組或一個字,這樣做的優點是什麼?
A:根據區域性性原理:CPU訪問儲存器時,無論是存取指令還是存取資料,所訪問的儲存單元都趨於聚集在一個較小的連續區域中。一次快取一整個cache行可以使之後快取記憶體的命中率提高,減少時間代價。
Q5:在早期計算機中,每個位元組的讀寫直接由CPU處理(沒有DMA)。對於多道程式而言這種組織方式有什麼含義?
A:若沒有DMA,當前作業因等待磁帶或其他I/O操作而暫停,CPU就只能簡單的踏步直至該I/O完成。對於商業資料處理,I/O操作等待的時間通常佔到80%~90%,所以必須採取某種措施減少CPU空閒時間的浪費。採取多道程式設計,可以在一個作業等待I/O操作完成時,讓另一個作業使用CPU,提高CPU的利用率。
Q6:與訪問I/O裝置相關的指令通常是特權指令,也就是說,他們能在核心態執行而在使用者態則不行。說明為什麼這些指令是特權指令。
A:不允許在使用者程式中使用的指令為特權指令。如果讓使用者在自己的程式裡直接使用“I/O指令”,那麼這個使用者可以根據自己的需要啟動裝置進行輸入/輸出,。這樣一來,通過裝置所做的輸入/輸出就可能會丟失資訊或產生出錯。因此,必須把“I/O指令”規定為是特權指令。同樣地,“設定時鐘”、“置控制暫存器”等指令,也都應該規定為是特權指令。判斷一條指令是否是特權指令,原則是看這條指令的執行,是否會引起系統工作的衝突或意外。
Q7:系列計算機的思想在20世紀60年代有IBM引入System/360大型機。現在這種思想已經消亡了,還是繼續活躍著?
A:它依然存在。例如,Intel以各種各樣的不同的屬性包括速度和能力消耗來生產 Pentium I,II,III和4。所有這些機器的體系結構都是相容的,僅僅是價格上的不同,這些都是家族思想的本質。
Q8:緩慢採用GUI的一個原因是支援它的硬體的成本(高昂)。為了支援25行80列字元的單色文字螢幕應該需要多少視頰RAM? 對於1024x768畫素24位色彩點陣圖需要多少視訊RAM? 在1980年($5/KB)這些RAM的成本是多少?現在它的成本是多少?
A:25x80字元的單色文字螢幕需要2000位元組的緩衝器。1024*768畫素24位顏色的點陣圖需要2359296位元組。1980年這兩種選擇將分別地耗費$10和$11520。而對於當前的價格,將少於$1/MB。
Q9:在建立一個作業系統時有幾個設計目的,例如資源利用、及時性、健壯性等。請列舉兩個可能互相矛盾的設計目的。
A:考慮公平和實時。要求每一個考慮公平和實時。要求每一個程序都以公平的方式分配資源, 沒有程序 能得到超過公平份額的資源 。另一方面,實時要求 使程序在規定的時間內執行完畢的基礎上分配資源 。一個實時的程序可能會得到一個不成比例的資源份額。
Q10:核心態和使用者態有哪些區別?解釋在設計作業系統時存在兩種不同的模式有什麼幫助。
A:
區別:處於使用者態執行時,程序所能訪問的記憶體空間和物件受到限制,其所處 於佔有的處理機是可被搶佔的 ; 而處於核心態執行中的程序,則能訪問所 有的記憶體空間和物件,且所佔有的處理機是不允許被搶佔的。 幫助:引用特權級的概念是為了保護計算機,一些危險指令只有作業系統可以 執行,防止普通程式濫用其他程式的資源。如間諜軟體要想開啟攝像頭就必須向特權級0的驅動程式請求開啟,否則就不允許。
Q11:一個255GB大小的磁碟有65536個柱面,每個磁軌有255個扇區,每個扇區有512位元組。這個磁碟有多少碟片和磁頭?假設平均尋道時間為11ms,平均旋轉延遲為7ms,讀取速率為11MB/s,計算從一個扇區讀取400KB需要的平均時間。
A:假設碟片有n個,則每個柱面就有n個磁軌。 n·65536·255·512=255·2^30 ====> 碟片數n=2^5=32片。 磁頭數=碟片書*2 =====>磁頭數為64個。 (英文答案上是16,8,我也搞不懂為啥,式子是一樣的。。。) 平均訪問時間=平均尋道時間+平均旋轉延遲+傳輸時間+····· t=11ms+7ms+400KB/(11MB/s)=21.636ms
Q12:下面的哪一條指令只能在核心態中使用? a)禁止所有的中斷。 b)讀日期 -時間鍾。 c)設定日期 -時間鍾。 d)改變儲存器映像。
A:acd。
補充知識:處於使用者態執行時,程序所能訪問的記憶體空間和物件受到限制;而處於核心態執行中的程序則能訪問所有的記憶體空間和物件。2.程序在核心態執行時是不可被剝奪的;而在使用者態執行態是可被剝奪的。 以下是一些常用指令的執行狀態:
- 遮蔽所有中斷指令,在核心態下執行。
- 設定時鐘日期指令,在核心態下執行。
- 改變儲存映像圖指令,在核心態下執行。
- 停機指令,在核心態下執行。
- 存取某地址單元的內容指令,在使用者態下執行。
- 讀時鐘日期指令,在使用者態下執行。
Q13:、考慮一個 有兩CPUCPUCPU的系統,並且每一個CPU有兩個執行緒(超執行緒)。假設有三個程式 P0,P1 ,P2 ,分別以執行時間5ms ,10ms ,20ms 開始。執行這些程式需要多少時間?假設這三個程式都是 100%限於CPU,在執行時無阻塞,並且一旦設定就不改變 CPU。
A:這些程式的執行時間因程式的組合的不同而不同,一共有以下 4種: 1)(P0,P1) and P2 => (5ms + 10ms) and 20ms => 20ms 2)(P0,P2) and P1 => (5ms + 20ms) and 10ms => 25ms 3)(P1,P2) and P0 => (10ms + 20ms) and 50ms => 30ms 4)(P0,P1,P2) => (5ms + 10ms + 20ms) => 35ms
Q14:一臺計算機有一個四級流水線,每一級都花費相同的時間執行其工作,即 1ns。這臺機器每秒可執行多少條指令?
A:從管道中每納秒出現一條指令。意味著該機器每秒執行十億條指令。
Q15:10、假設一個計算機系統有快取記憶體、記憶體(RAM)以及磁碟,作業系統用虛擬記憶體。讀取快取中的一個詞需要 2ns,RAM 需要 10ns,磁碟需要 10ms。如果快取的命中率是 95%,記憶體的是(快取失效時)99%,讀取一個詞的平均時間是多少?
A:E(t) = 0.95 x 2ns+0.05 x 0.99 x 10ns+0.05 x 0.01 x10ms = 5002.395 ns
Q16:在使用者程式進行一個系統呼叫,以讀寫磁碟檔案時,該程式提供指示說明了所需要的檔案,一個指向資料緩衝區的指標以及計數。然後,控制權轉給作業系統,它呼叫相關的驅動程式。假設驅動程式啟動磁碟並且直到中斷髮生才終止。在從磁碟讀的情況下,很明顯,呼叫者會被阻塞(因為檔案中沒有資料)。在向磁碟寫時會發生什麼情況?需要把呼叫者阻塞一直等到磁碟傳送完成為止嗎?
A:也許。如果呼叫者取回控制,並且在最終發生寫操作時立即重寫資料,將會寫入錯誤的資料。然而,如果驅動程式在返回之前首先複製將資料複製到一個專用的緩衝器,那麼呼叫者可以立即繼續執行。另一個可能性是允許呼叫者繼續,並且在緩衝器可以再用時給它一個訊號,但是這需要很髙的技巧,而且容易出錯。
Q17:什麼是陷阱指令?在作業系統中解釋它的用途。
A:TRAP指令,即陷阱指令是CPU的內部事件,是由於系統呼叫引起處理機中斷的指令。在系統呼叫中,TRAP負責由使用者模式轉換為核心模式,並將返回地址儲存至堆疊中以備後用。
Q18:在分時系統中為什麼需要程序表?在只有一個程序存在的個人計算機系統中,該程序控制整個機器直到程序結束,這種機器也需要程序表嗎?
A:程序表是為了儲存當前被掛起、甚或是被延遲和阻塞的程序狀態。在單一程序的系統中是不需要,因為單一程序從不掛起。
Q19:對於下列系統呼叫 ,給出引起失敗的條件:fork、exec以及unlink。
A:如果程序表中沒有空閒的槽(或者沒有記憶體和交換空間),fork 將失敗。 如果所給的檔名不存在,或者不是一個有效的可執行檔案,exec將失敗。 如果將要解除連結的檔案不存在,或者呼叫unlink的程序沒有許可權,則unlink將失敗。
Q20:下列資源能使用哪種多路複用(時間、空間或者兩者皆可):CPU,記憶體,磁碟,網絡卡,印表機,鍵盤以及顯示器。
A: 時間:CPU,印表機,網絡卡,鍵盤,顯示器; 空間:記憶體,磁碟,顯示器;
Q22:在
count = write(fd, buffer, nbytes);
呼叫中,是否能將函式返回值傳遞給count變數而不是nbytes變數?如果能,為什麼?
A:如果fd不正確,呼叫失敗,將返回1。同樣,如果磁碟滿,呼叫也失敗,要求寫入的位元組數和實際寫入的位元組數可能不等。在正確終止時,總是返回nbytes。 (感覺這個標準答案有點答非所問。。)
Q23:有一個檔案,其檔案描述符是fd,內含下列位元組序列:3,1,4,1,5,9,2,6,5,3,5。有如下系統呼叫:
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);
其中lseek呼叫尋找檔案中的位元組3。在讀操作完成之後,buffer 中的內容是什麼?
A:1,5,9,2。lseek將檔案指標移動偏移量3,到索引3處;read從檔案指標出開始讀四個位元組,儲存到緩衝區buffer處。
Q24:假設一個10MB的檔案在磁碟連續扇區的同一個軌道上(軌道號為50)。磁碟的磁頭臂此時位於第100號軌道。要想從磁碟上找回這個檔案,需要多長時間? 假設磁頭臂從一個柱面移動到下一個柱面需要1ms,當檔案的開始部分儲存在的扇區旋轉到磁頭下需要5ms,並且讀的速率是200MB/s。
A:t = 5ms + 1ms * (100-50) + 10MB/(200MB/s) = 105ms
Q25:塊特殊檔案和字元特殊檔案的基本差別是什麼?
A:塊特殊檔案包含被編號的塊,每一塊都可以獨立地讀取或者寫入。而且可以定位於任何塊,並且開始讀出或寫入。這些對於字元特殊檔案是不可能的。 補充:塊特殊檔案(block special file)用於磁碟類裝置;字元特殊檔案(character special file)和輸入輸出有關,用於序列I/O類裝置,如終端、印表機、網路等。
Q26:在圖1-7的例子中庫呼叫稱為read,而系統呼叫自身稱為read,這兩者都有相問的名字是正常的嗎? 如果不是,哪一個更重要?
A:系統呼叫實際上並沒有名稱,除了在檔案中這樣描述之外。當庫例程read陷入核心時,它將系統呼叫號碼放入暫存器或者堆疊中。該號碼通常用於一張表的索引。這裡確實沒有使用任何名稱。而另一方面,庫例程的名稱是十分重要的,因為它將用於程式中。
Q27:現代作業系統將程序的地址空間從機器實體記憶體中分離出來。列舉這種設計的兩個好處。
A:這允許可執行程式在不同的執行中載入到機器記憶體的不同部分。 此外,它允許程式大小超過機器記憶體的大小。
Q28:對程式設計師而言,系統呼叫就像對其他庫過程的呼叫一樣。有無必要讓程式設計師瞭解哪一個庫過程導致了系統呼叫?在什麼情形下,為什麼?
A:就程式邏輯而言,庫例程呼叫哪個系統呼叫是沒有關係的。但是,如果需要考慮效能問題,無需系統呼叫就可以完成的任務將使程式執行更快。所有的系統呼叫都會導致使用者環境和核心環境的切換開銷。更進一步,在多使用者系統中,在系統呼叫完成之前,作業系統可能排程到其他的程序,這將使得呼叫過程的處理更加遲緩。
Q29:圖1-23說明有一批UNIX的系統呼叫沒有與之等價的Win32 API。對於所列出的每一個沒有Win32等價的呼叫,若程式設計師要把一個UNIX程式轉換到Windows下執行,會有什麼後果?
A: Link: Win32程式不能給檔案另外一個名稱,或者使某個檔案出現在多個目錄中。同時,試圖建立連結 可以便於測試,並且在檔案上加鎖。 Mount和umount: Wmdows程式不能建立關於標準的路徑的假定命名,因為具有多個磁碟驅動器的系統 上路徑名,其驅動器部分是不同的。 Chmod: Windows程式設計師不得不假定所有的使用者都能訪問每個檔案。 Kill: Windows程式設計師不能kill行為失常的程式。
Q30:可移植的作業系統是從一個系統體系結構移動到另一個系統體系結構而不需要任何修改的作業系統。請解釋為什麼建立一個完全可移植性的作業系統是不可行的。描述一下在設計一個高度可移植的作業系統時你設計的兩個高階層是什麼樣的。
A:每一個系統體系結構都有它自己可以執行的一套指令。因此,奔騰不能執行SPARC程式或者SPARC無法執行奔騰程式。另外,不同的架構使用不同的匯流排架構(如VME匯流排,ISA,PCI,MCA,SBU,…)以及CPU的字長(通常是32或64位)。由於硬體上的這些差異,建立一個完全可移植的作業系統是不可行的。一個高度可移植的作業系統將包括兩個高階層——一個機器相關層和一個機器獨立層。機器相關層遮蔽硬體的細節,必須為每一個架構單獨實現,該層提供了一個統一的介面。機器獨立層只需要實現一次。為了實現高度可移植,機器相關層應儘可能小。
Q31:請解釋在建立基於微核心的作業系統時策略與機制分離帶來的好處。
A:策略和機制的分離,使作業系統的設計人員在核心中實現了少量的基本原語。這些原語被簡化,因為它們不依賴於任何特定的策略。然後,它們在使用者級別可以被用來實現更復雜的機制和策略。
(補充)所謂機制,是指實現某一功能的具體執行機構。而策略,則是在機制的基礎上,藉助於某些引數和演算法來實現該功能的優化,或達到不同的功能目標。通常,機制處於一個系統的基層,而策略則處於系統的高層。在傳統的OS中,將機制放在OS的核心的較低層,把策略放在核心的較高層次中。而在微核心作業系統中,通常將機制放在OS的微核心中。正因為如此,才有可能將核心做得很小。
Q32:虛擬機器由於很多因素而十分流行,然而它們也有一些缺點,給出一個缺點。
A:虛擬機器建立在主機上,也是檔案,很容易被破壞;增加了記憶體的使用和處理器的間接費用。
Q33:下面是單位轉換的練習: (a) 一微年是多少秒? (b) 微米常稱為micron。那麼meigamicron是多長? (c) 1PB儲存器中有多少位元組? (d) 地球的質量是6000 yottagram,換算成kilogram 是多少?
A:(a) 365 x 10^(-6) x 24 x 60 x 60 = 31.536 s
(b) 10^6 x 10^(-6) = 1 m
(c) 2^(50) bytes
(d) 6000 x 10^24 / 10^3 = 6 x 10^24 kg
Q34:寫一個和圖1-19類似的shell,但是包含足夠的實際可工作的程式碼,這樣可測試它。還可以新增某些功能,如輸入輸出重定向、管道以及後臺作業等。
Q35:如果你有一個個人UNIX類作業系統(Linux、MINIX/3、FreeBSD等),可以安全地崩潰和再啟動,請寫一個試圖建立無限制數量子程序的shell指令碼並觀察所發生的事。在執行實驗之前,通過shell鍵入sync,在磁碟上備好檔案緩衝區以避免毀壞檔案系統。注意:在沒有得到系統管理員的允許之前,不要在分時系統上進行這一嘗試。其後果將會立即出現,嘗試者可能會被抓住並受到懲罰。
Q36:用一個類似於UNIX od 的工具考察並嘗試解釋UNIX類系統或Windows 的目錄。提示:如何進行取決於OS允許做什麼。一個有益的技巧是在軟盤上建立一個目錄,其中包含一個作業系統,然後使用另一個允許進行此類訪問的不同的作業系統讀取盤上的原始資料。