網上似乎沒有中文版的題解,那我自己來寫一份
注意:中文版的書翻譯得不是特別好,看不懂題目的話建議去看英文原版書
1,操作系統的量大主要作用是什么?
為應用程序提供一個資源集的清晰抽象(個人理解為通過對計算機底層的抽象,為各類應用程序提供格式一致的接口),管理各種軟硬件資源。
2,列舉9種操作系統上的應用
①大型機操作系統:銀行數據存儲系統
②服務器操作系統:Apple的Siri所提供的語音轉文本
③多處理器操作系統:使用多核CPU進行渲染的視頻編輯軟件
④個人計算機操作系統:辦公軟件
⑤掌上計算機操作系統:各類手機App
⑥嵌入式操作系統:MP3播放系統
⑦傳感器節點操作系統:溫度計控制
⑧實時操作系統:飛機飛控
⑨智能卡系統:羊城通控制系統
3,分時操作系統和多道操作系統的區別
分時操作系統是使一台計算機采用時間片輪轉的方式同時為幾個、幾十個甚至幾百個用戶服務的一種操作系統。分時操作系統將系統處理機時間與內存空間按一定的時間間隔,輪流地切換給各終端用戶的程序使用。
多道操作系統在內存中同時存放多個作業,使之同時處於運行狀態,這些作業共享CPU和外部設備等資源。當一個作業等待I/O完成時,另一個作業可以使用CPU。
所有分時系統都是多道程序設計系統,但並非所有多道程序設計系統都是分時系統,因為多道程序設計系統沒有輪流地切換給各終端用戶使用。
4,為了使用高速緩存,主存被划分為若干cache行,同城每行長32或64字節。每次緩存一整個cache行,每次緩存一整行而不是一個字節或一個字,這樣的優點是什么?
經驗證據表明,存儲器訪問表現出引用局部原則,即如果讀取某一個位置,則接下來訪問這個位置的概率非常高,尤其是緊隨其后的內存位置。
因此,通過緩存整個緩存行,接下來緩存命中的概率會增加。 此外,現代的硬件可以將32或64字節塊整個傳輸到高速緩存行,比單個字節讀取,總共讀32或64字節的速度要快得多。
5,在早期計算機中,每個字節的讀寫直接由CPU處理(即沒有DMA)。對於多道程序設計而言這種組織方式有什么含義?
多道程序設計的主要原因是在某個程序等待I/O完成時,可以讓CPU做一些其他操作。 如果沒有DMA,則CPU完全占用I/O,因此通過多道程序設計沒有任何收益增加獲得(至少在CPU利用率方面)。 無論程序執行多少I/O,CPU都將100%處於忙碌。 這當然假設主要的延遲是數據被復制時的等待。 如果由於其他原因(例如,到達串行線路)I/O很慢,CPU可以執行其他工作。
6、與訪問I/O設備相關的指令通常是特權指令,也就是說,他們能在內核態執行而在用戶態則不行,說明為什么這些指令是特權指令。
特權指令:只能被操作系統內核使用的指令。這些指令運行於處理器核心態的代碼不受任何的限制,可以自由地訪問任何有效地址,進行直接端口訪問。
非特權指令:能夠被所有程序使用的指令。這些指令運行於用戶態的代碼
不允許在用戶程序中使用的指令為特權指令。如果讓用戶在自己的程序里直接使用“I/O指令”,那么這個用戶可以根據自己的需要啟動設備進行輸入/輸出,。這樣一來,通過設備所做的輸入/輸出就可能會丟失信息或產生出錯。因此,必須把“I/O指令”規定為是特權指令。同樣地,“設置時鍾”、“置控制寄存器”等指令,也都應該規定為是特權指令。判斷一條指令是否是特權指令,原則是看這條指令的執行,是否會引起系統工作的沖突或意外。
7,系列計算機的思想在20世紀60年代有IBM引入System/360大型機。現在這種思想已經消亡了,還是繼續活躍着?
它依然存在着,例如Intel的Core i3,i5和i7 CPU具有不同的屬性,包括速度和功耗。但整個系列都在架構上兼容。
8,緩慢采用GUI的一個原因是支持他的硬件的成本高昂,為了支持25行80列的單色文本屏幕,需要多少視頻RAM?對於1024x768像素24位色彩圖需要多少RAM?在1980年每Kb 5美元,這些RAM成本是多少?現在成本多少?
第一題:25×8×1=2000B 成本約為10$
第二題:1024×768×24/8=2.25MB 不到一分錢
9,在建立一個操作系統時有幾個設計目的,例如資源利用、及時性、健壯性等。請列舉兩個可能互相矛盾的設計目的。
考慮公平和實時。要求每一個考慮公平和實時。要求每一個進程都以公平的方式分配資源, 沒有進程 能得到超過公平份額的資源 。另一方面,實時要求 使進程在規定的時間內執行完畢的基礎上分配資源 。一個實時的進程可能會得到一個不成比例的資源份額。
10,內核態和用戶態有哪些區別?解釋在設計操作系統時存在兩種不同的模式有什么幫助。
在內核態下,CPU可以執行其指令集中的每條指令,並在內核態下執行使用硬件的各種功能。cpu可以訪問內存的所有數據,包括外圍設備,例如硬盤,網卡,cpu也可以將自己從一個程序切換到另一個程序
但是用戶態只能執行部分指令,執行時僅使用部分功能。只能受限的訪問內存,且不允許訪問外圍設備,占用cpu的能力被剝奪,cpu資源可以被其他程序獲取
擁有兩種模式允許設計人員以用戶態運行用戶程序,從而拒絕他們訪問關鍵指令。
11,一個255GB大小的磁盤有65535個柱面,每個柱面255個扇區。每個扇區512字節。這個磁盤有多少盤片和磁頭?假設平均尋道時間為11ms,平均旋轉延遲為7ms,讀取速度100MB/s,計算從一個扇區讀取400kb需要的平均時間。
磁頭數=255GB/255/65536/512B=32個
盤片數=32/2=16片
平均時間=旋轉延時+尋道時間+讀取時間=7ms+11ms+400kb/100MB/s=22ms
12、下面的哪一條指令只能在內核態中使用?
a)禁止所有的中斷。
b)讀日期 -時間鍾。
c)設置日期 -時間鍾。
d)改變存儲器映像。
答案:a,c,d (個人理解b不會修改系統設置所以不是內核態指令)
13、考慮一個有兩個CPU的系統,且每一個CPU有兩個線程(超線程)。假設有三個程序P0、P1、P2,分別以運行時間5ms, 10ms,20ms開始,運行這些程序需要多少時間?假設這三個程序都是100%限於CPU,在運行時無阻塞,並且一旦設定就不改變CPU。
運行時間可能是20,25,30,35ms,取決於操作系統的調度邏輯
當(P0,P1)在一個CPU上,P2在另一個CPU上運行時,耗時20ms
當(P0,P2)在一個CPU上,P1在另一個CPU上運行時,耗時25ms
當(P1,P2)在一個CPU上,P0在另一個CPU上運行時,耗時30ms
當(P0,P1,P2)在同一個CPU上運行時,耗時35ms
14、一台計算機有一個四級流水線,每一級都花費相同的時間執行其工作,即1ns, 這台機器每秒可執行多少條指令?
答:在流水線中,每1ns都有一條指令會被執行完畢,所以機器每秒能執行1億條指令。
15、假設一個計算機系統有高速緩存、內存以及磁盤,操作系統用呼你內存。讀取緩存中的一個詞需要1ns, 內存需要10ns, 磁盤需要10ms。如果緩存命中率是95%, 內存的是99%(緩存失效時),讀取一個詞的平均時間是多少?
t=0.95*1ns+0.05*(0.99*10ns+0.01*10ms)= 5.001445 μs
16、在用戶程序進行一個系統調用,以讀寫磁盤文件時,該程序提供指示說明了所需要的文件,一個指向數據緩沖區的指針以及計數。然后,控制權轉給操作系統,它調用相關的驅動程序。假設驅動程序啟動磁盤並且直到中斷發生才終止。在從磁盤讀的情況下,很明顯,調用者會被阻塞(因為文件中沒有數據)。在向磁盤寫時會發生什么情況?需要把調用者阻塞一直等到磁盤傳送完成為止嗎?
有可能。向磁盤寫時,如果調用者取回控制,在最終發生寫操作時立刻重寫數據,將會寫入錯誤的數據數據。但是如果驅動程序在返回前將數據復制到一個專用的緩沖器,那么調用者可以繼續執行。另外,可以允許調用者繼續,當緩沖器被調用時,給它一個信號,不過這很麻煩並且容易出錯。
17、什么是陷阱指令?在操作系統中它的用途。
陷阱指令就是將一個處理器的執行模式從用戶模式切換到內核模式。這個指令允許用戶程序調用操作系統內核中的函數。
18、分時系統中為什么需要進程表?在只有一個進程存在的計算機中,需要進程表嗎?
進程表是為了存儲當前被掛起、或者是被延遲和阻塞的進程狀態。現代個人計算機有許許多多的進程在進行,即使當用戶什么事都沒做、什么程序都沒有在運行時。它們需要檢查更新,下載郵件以及許多其他的事。在單一進程的系統中不需要進程表,因為單一進程從不掛起。
19、說明有沒有理由在一個非空的目錄中安裝一個文件系統。如果這樣做,如何做?
有可能有理由,裝配文件系統會使得裝配目錄中已有的任何文件都不可訪問,所以裝配點通常是空的。然而,系統管理人員可能需要將位於被裝配目錄中非常重要的文件復制到裝配點,以至於它們在進行設備檢查和修理時,可以在緊急事件中的普通路徑找到這些文件。
20、對於下列系統調用,給出引起失敗的條件:fork,exec以及unlink.
如果進程表中沒有空閑的槽(或者沒有內存和交換空間),fork將失敗。如果所給的文件名不存在,或者不是一個有效的可執行文件,exec將失敗。如果將要解除鏈接的文件不存在,或者調用unlink的進程沒有權限,unlink將失敗。
21、下列資源能使用哪種多路復用(時間、空間或者兩者皆可):CPU、內存、磁盤、網卡、打印機、鍵盤以及顯示器?
時間復用:CPU、網卡、打印機、鍵盤。
空間復用:內存、磁盤。
兩者:顯示。
22、在count = write(fd, buffer,nbytes);調用中,是否能將函數返回值傳遞給 count變量而不是nbtes變量?如果能,為什么?
(中文版對這一題翻譯存在一定的疏漏,英文版原意是:函數count=write(fd,buffer,nbytes)的返回值,是否有可能和nbytes不同,如果能,為什么)
調用可能失敗,比如fd不正確,那么將返回-1。而磁盤滿的時候,調用也失敗,因為這時不可能寫入被請求的字節數。而在正確的終止時,會總是返回nbytes。
23、有一個文件,其文件描述符是fd,內含下列字節序列:3,1,4,1,5,9,2,6,5,3,5。有如下系統調用:
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);
其中lseek調用尋找文件中的字節3。在讀操作完成之后,buffer中的內容是什么?
答案:1、5、9、2
24、假設一個10MB的文件在磁盤連續扇區的同一個軌道上(軌道號:50)。磁盤的磁頭臂此時位於第100號軌道。要想從磁盤上找回這個文件,需要多長時間? 假設磁頭臂從一個柱面移動到下一個柱面需要1ms,當文件的開始部分存儲在的扇區旋轉到磁頭下需要5ms,並且讀的速率是200MB/s。
答:找到文件需要的時間=1ms*50(移動到50號磁道的時間)+ 5 ms (旋轉到文件開始部分存儲在的扇區的時間)+10/200*1000ms(讀取10MB的時間)=105ms
25、塊特殊文件和字符特殊文件的基本差別是什么?
塊特殊文件包含被編號的塊,每一塊都可以獨立地讀取或者寫入。而且定位任意塊和開始讀出或寫入是很容易的。但是這對於字符特殊文件是不可能的。
26、在圖1-7的例子中庫調用稱為read,而系統調用自身稱為read,這兩者都有相同的名字是正常的嗎? 如果不是,哪一個更重要?
系統調用實際上沒有名稱,除了在文件中這樣描述外。當庫例程陷入內核時,它將系統調用號碼放入寄存器或者堆棧中。這個號碼通常用於一張表的索引。這里沒有使用任何名稱。另一方面,庫例程的名稱是非常重要的,因為它將用於程序中。
27,現代操作系統將進程的地址空間從機器物理內存中分離出來,列舉這種設計的兩個好處。
1,允許程序在不同的運行狀態中,將不同的數據放入內存中。
2,允許程序使用比物理內存還要多的內存,彌補物理內存的不足。
3,為進程提供了一致的地址空間簡化了內存管理
28,對程序員而言,系統調用就像對其他庫過程的調用一樣。有無必要讓程序員了解哪一個庫過程導致了系統調用?在什么情形下,為什么?
一般不需要,除非在重視性能的場景下。因為使用系統調用,需要額外的開銷。
29,圖1-23說明有一批UNIX的系統調用沒有與之相等價的Win32 API,對於所列出的每一個沒有Win32等價的調用,若程序員要把一個UNIX程序轉換到Windows下運行,會有什么后果?
對於沒有等價調用的部分,在Windows下將無法運行。
31,請解釋在建立基於微內核的操作系統時策略與機制分離帶來的好處。
機制的分離允許系統設計師在內核態中執行盡量少的源語,這將使得源語得以簡化,降低系統內核的開發難度,提高代碼的可維護性。其余模塊可以作為普通的進程,即使發生錯誤也只會導致模塊崩潰,而不會導致系統崩潰。能有效提高系統的可靠性。
32,虛擬機由於很多因素而十分流星,然而他們也有一些缺點,請給出缺點:
對硬件資源的消耗更大