1. 程式人生 > >《現代作業系統(中文第四版)》課後習題答案 第一章 引論

《現代作業系統(中文第四版)》課後習題答案 第一章 引論

多數是根據英文版原版答案翻譯過來,少部分加了個人的理解

1、作業系統的兩大主要作用是什麼?

1.為應用程式提供一個資源集的清晰抽象(另一種說法:作業系統給使用者提供了一個可擴充套件的機器。個人理解是通過對底層的抽象,對外提供各種介面支援擴充套件); 2.管理各種軟硬體資源。

2、在1.4節中描述了9中不同型別的作業系統,列舉每種作業系統的應用(每種系統一種應用)

1.大型作業系統(Mainframe operating system):大型保險公司的索賠流程處理系統

2.伺服器作業系統(Server operating system):比如蘋果手機的Siri所提供的語音到文字的轉換服務

3.多處理器作業系統(Multiprocessor operating system):視訊編輯與渲染

4.個人計算機作業系統(Personal computer operating system):文書處理應用

5.掌上計算機作業系統(Handheld computer operating system):上下文感知推薦系統

6.嵌入式作業系統(Embedded operating system):為DVD錄影機設計的錄影程式。

7.感測器節點作業系統(Sensor-node operating system):野外溫度監測

8.實時作業系統(Real-time operating system):航空管制系統

9.智慧卡作業系統(Smart-card operating system):電子支付

3.分時系統和多道程式系統的區別是什麼?

在分時系統中,多個使用者可以使用他們自己的終端同時訪問和執行計算系統上的計算。 多道程式設計系統允許使用者同時執行多個程式。 所有分時系統都是多道程式設計系統,但並非所有多道程式設計系統都是分時系統,因為多道程式設計系統可以在只有一個使用者的PC上執行。

4.為了使用快取記憶體,主存被劃分為若干cache行,同城每行長32或64位元組。每次快取一整個cache行,每次快取一整行而不是一個位元組或一個字,這樣的優點是什麼?

經驗證據表明,儲存器訪問表現出引用區域性原則,即如果讀取某一個位置,則接下來訪問這個位置的概率非常高,尤其是緊隨其後的記憶體位置。 因此,通過快取整個快取行,接下來快取命中的概率會增加。 此外,現代的硬體可以將32或64位元組塊整個傳輸到快取記憶體行,比單個位元組讀取,總共讀32或64位元組的速度要快得多。

5.在早期計算機中,每個位元組的讀寫直接由CPU處理(即沒有DMA)。對於多到程式而言這種組織方式有什麼含義?

DMA(Direc Memory Access):直接儲存器訪問。
多道程式設計的主要原因是在某個程式等待I/O完成時,可以讓CPU做一些其他操作。 如果沒有DMA,則CPU完全佔用I/O,因此通過多道程式設計沒有任何收益增加獲得(至少在CPU利用率方面)。 無論程式執行多少I/O,CPU都將100%處於忙碌。 這當然假設主要的延遲是資料被複制時的等待。 如果由於其他原因(例如,到達序列線路)I/O很慢,CPU可以執行其他工作。

6.與訪問I/O裝置相關的指令通常是特權指令,也就是說,他們能在核心態執行而在使用者態則不行,說明為什麼這些指令是特權指令。

典型的例子,比如對於I/O裝置(例如,印表機)的訪問,通常對不同使用者限制也不同。某些使用者可以允許列印任意數量的頁面,某些使用者可能根本不允許列印,而一些使用者可能僅限於列印一定數量的頁面。 這些限制由系統管理員根據某些策略設定。 需要強制執行此類策略,以便使用者級別的程式不會干擾它們。

7.系列計算機的思想在20世界60年代由IBM引入System/360大型機。現在這種思想是消亡還是存活?

依然活著。 例如,英特爾使Core i3,i5和i7 CPU具有各種不同的屬性,包括速度和功耗。 所有這些計算機都在架構上相容。 只是它們的價格和效能不同。

8.緩慢採用GUI的一個原因是支援他的硬體的成本高昂,為了支援25行80列的單色文字螢幕,需要多少視訊RAM?對於1024x768畫素24位色彩圖需要多少RAM?在1980年每Kb 5美元,這些RAM成本是多少?現在成本多少?

  1. 25x80x1 = 2000位元組
  2. 1024x768x3 = 2359296位元組(一位元組8位,24位就是三個位元組)
  3. 成本自行計算

9.在建立一個作業系統時有幾個設計目的,例如資源利用、及時性、健壯性等,請列舉兩個可能相互矛盾的設計目的。

考慮公平性和實時性。 公平性要求每個程序都以公平的方式分配其資源,沒有任何程序獲得超過公平份額。 另一方面,實時性需要根據不同程序必須完成執行的時間來分配資源。 實時程序可能會獲得不成比例的資源份額。 他們就是互相矛盾的。

10.核心態和使用者態有哪些區別?解釋在設計作業系統時存在兩種不同的模式有什麼幫助。

大多數現代CPU提供兩種執行模式:核心態和使用者態。 CPU可以執行其指令集中的每條指令,並在核心態下執行時使用硬體的各種功能。 但是使用者態只能執行部分指令,執行時僅使用部分功能。 擁有兩種模式允許設計人員以使用者態執行使用者程式,從而拒絕他們訪問關鍵指令。

11.一個255GB大小的磁碟有65535個柱面,每個柱面255個扇區。每個扇區512位元組。這個磁碟有多少碟片和磁頭?假設平均尋道時間為11ms,平均旋轉延遲為7ms,讀取速度100MB/s,計算從一個扇區讀取400kb需要的平均時間。

磁頭數= 255 GB /(65536 * 255 * 512)= 16
碟片數量= 16/2 = 8
讀取操作完成的時間是尋道時間+旋轉延遲+傳輸時間。 尋道時間為11 ms,旋轉延遲為7 ms,傳輸時間為4 ms,因此平均傳輸時間為22 ms。

12、下面哪一條指令只能在核心態使用?

  • a 禁止所有的中斷
  • b 讀日期-時間時鐘
  • c 設定日期-時間時鐘
  • d 改變儲存器映像

    選擇 a、c、d

13、考慮一個有兩個CPU的系統,且每一個CPU有兩個執行緒(超執行緒)。假設有三個程式P0、P1\P2,分別以執行時間5ms, 10ms,20ms開始,執行這些程式需要多少時間?假設這三個程式都是100%限於CPU,在執行時無阻賽,並且一旦設定就不改變CPU。
原文:https://blog.csdn.net/qq475703980/article/details/82534394

14、一臺計算機有一個四級流水線,每一級都花費相同的時間執行其工作,即1ns, 這臺機器每秒可執行多少條指令?

15.假設一個計算機系統有快取記憶體、記憶體以及磁碟,作業系統用呼你記憶體。讀取快取中的一個詞需要1ns, 記憶體需要10ns, 磁碟需要10ms。如果快取命中率是95%, 記憶體的是99%(快取失效時),讀取一個詞的平均時間是多少?

16.在使用者程式進行一個系統呼叫,以讀寫磁碟檔案時,該程式提供指示說明了所需要的檔案,一個指向資料緩衝區的指標以及計數。然後,控制權轉給作業系統,它呼叫相關的驅動程式。假設驅動程式啟動磁碟並且直到中斷髮生才終止。在從磁碟讀的情況下,很明顯,呼叫者會被阻塞(因為檔案中沒有資料)。在向磁碟寫時會發生什麼情況?需要把呼叫者阻塞一直等到磁碟傳送完成為止嗎?

答:也許。如果呼叫者取回控制,並且在最終發生寫操作時立即重寫資料,將會寫入錯誤的資料。然而,如果驅動程式在返回之前首先複製將資料複製到一個專用的緩衝器,那麼呼叫者可以立即繼續執行。另一個可能性是允許呼叫者繼續,並且在緩衝器可以再用時給它一個訊號,但是這需要很髙的技巧,而且容易出錯。

17.什麼是陷阱指令?在作業系統中他的用途。

陷阱指令將一個處理器的執行模式從使用者模式切換到核心模式。該指令允許使用者程式呼叫作業系統核心中的函式。

18.分時系統中為什麼需要程序表?在只有一個程序存在的計算機中,需要程序表嗎、

程序表是為了儲存當前被掛起、甚或是被延遲和阻塞的程序狀態。在單一程序的系統中是不需要,因為單一程序從不掛起。

19、說明有沒有理由在一個非空的目錄中安裝一個檔案系統。如果這樣做,如何做?

裝配檔案系統將使得裝配目錄中已有的任何檔案都不可訪問,因此裝配點通常都是空的。然而,系統管理人員可能需要將某些位於被裝配目錄中的非常重要的檔案複製到裝配點,使得他們在進行裝置檢查或修理時,可以在緊急事件中的普通路徑上找到這些檔案。

20、對於下列系統呼叫,給出引起失敗的條件:fork,exec以及unlink.

如果程序表中沒有空閒的槽(或者沒有記憶體和交換空間),fork 將失敗。如果所給的檔名不存在,或者不是一個有效的可執行檔案,exec將失敗。如果將要解除連結的檔案不存在,或者呼叫unlink的程序沒有許可權,則unlink將失敗。

21【】.下列資源能使用哪種多路複用(時間、空間或者兩者皆可):CPU、記憶體、磁碟、網絡卡、印表機、鍵盤以及顯示器?

22.在count = write(fd, buffer,nbytes);呼叫中,是否能將函式返回值傳遞給 count變數而不是nbtes變數?如果能,為什麼?

如果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,並且讀的速率是100MB/s。

找到檔案需要的時間=1 * 50 ms (移動到50軌道號的時間) + 5 ms (旋轉到檔案開始部分儲存在的扇區的時間) + 10/100 * 1000 ms (讀取10MB的時間) = 155 ms

25.塊特殊檔案和字元特殊檔案的基本差別是什麼?

答:塊特殊檔案包含被編號的塊,每一塊都可以獨立地讀取或者寫入。而且可以定位於任何塊,並且開始讀出或寫入。這些對於字元特殊檔案是不可能的。

26.在圖1-7的例子中庫呼叫稱為read,而系統呼叫自身稱為read,這兩者都有相問的名字是正常的嗎? 如果不是,哪一個更重要?

系統呼叫實際上並沒有名稱,除了在檔案中這樣描述之外。當庫例程read陷入核心時,它將系統呼叫號碼放入暫存器或者堆疊中。該號碼通常用於一張表的索引。這裡確實沒有使用任何名稱。而另一方面,庫例程的名稱是十分重要的,因為它將用於程式中。

27、現代作業系統將程序的地址空間從機器實體記憶體中分離出來,列舉這種設計的兩個好處。

這允許可執行程式在不同的執行中 載入到機器記憶體的不同部分。 此外,它還使程式大小可以超過機器記憶體的大小(虛擬記憶體)。

28、對程式設計師而言,系統呼叫就像對其他庫過程的呼叫一樣。有無必要讓程式設計師瞭解哪一個庫過程導致了系統呼叫?在什麼情形下,為什麼?

答:就程式邏輯而言,庫例程呼叫哪個系統呼叫是沒有關係的。但是,如果需要考慮效能問題,無需系統呼叫就可以完成的任務將使程式執行更快。所有的系統呼叫都會導致使用者環境和核心環境的切換開銷。更進一步,在多使用者系統中,在系統呼叫完成之前,作業系統可能排程到其他的程序,這將使得呼叫過程的處理更加遲緩。

29、圖1-23說明有一批UNIX的系統呼叫沒有與之相等價的Win32 API,對於所列出的每一個沒有Win32等價的呼叫,若程式設計師要把一個UNIX程式轉換到Windows下執行,會有什麼後果?

答:某些 UNIX呼叫沒有相應的Win32 API:

Link: Win32程式不能給檔案另外一個名稱,或者使某個檔案出現在多個目錄中。同時,試圖建立連結可以便於測試,並且在檔案上加鎖。

Mount和umount: Wmdows程式不能建立關於標準的路徑的假定命名,因為具有多個磁碟驅動器的系統上路徑名,其驅動器部分是不同的。

Chmod: Windows程式設計師不得不假定所有的使用者都能訪問每個檔案。

Kill: Windows程式設計師不能kill行為失常的程式。

30、可移植的作業系統是能從一個系統體系結構到另一個體繫結構的移動不需要任何修改的作業系統。請解釋為什麼建立一個完全可移植性的作業系統是不可行的。描述一下在設計一個髙度可移植的作業系統時你設計的高階的兩層是什麼樣的。

答:每一個系統體系結構都有它自己可以執行的一套指令。因此,奔騰不能執行SPARC程式或者SPARC無法執行奔騰程式。另外,不同的架構使用不同的匯流排架構(如VME匯流排,ISA,PCI,MCA,SBU,…)以及CPU的字長(通常是32或64位)。由於硬體上的這些差異,建立一個完全可移植的作業系統是不可行的。一個高度可移植的作業系統將包括兩個高階層——一個機器相關層和一個機器獨立層。機器相關層遮蔽硬體的細節,必須為每一個架構單獨實現,該層提供了一個統一的介面。機器獨立層只需要實現一次。為了實現高度可移植,機器相關層應儘可能小
原地址:https://blog.csdn.net/qq475703980/article/details/82534394

31、請解釋在建立基於微核心的作業系統時策略與機制的分離帶來的好處。

答:策略和機制的分離,使作業系統的設計人員在核心中實現了少量的基本原語。這些原語被簡化,因為它們不依賴於任何特定的策略。然後,它們在使用者級別可以被用來實現更復雜的機制和策略。

32、虛擬機器由於很多因素而十分流行,然而他們也有一些缺點,給出一個缺點。

33、下面是單位轉換的練習:

a)一微年是多少秒?

b)微米常稱為micron。那麼gigamicron是多長?

c) 1TB儲存器中有多少位元組?

d)地球的質量是6000 yottagram, 換算成kilogram是多少?

答:這些都可以直接轉換:

(a)一微年 = 10-6×365×24×3600 = 31.536 s。

(b)1000m或lkm。

(c)有240位元組,也就是1,099,511,627,776位元組。

(d)它是 6×1024公斤„

34、寫一個和圖1-19類似的shell,但是包含足夠的實際可工作的程式碼,這樣讀者可測試它。讀者還可以新增某些功能,如輸入輸出重定向,管道以及後臺作業。

答:略。

35、如果讀者擁有一個個人UNIX類作業系統(Linux、MINIX、FreeBSD等),可以安全地崩潰和再啟動,請寫一個可以試圖建立一個無限制數量子程序的shell指令碼並觀察所發生的事。在執行實驗之前,通過shell鍵人sync,在磁碟上備好檔案緩衝區以避免毀壞檔案系統。注意:在沒有得到系統管理員的允許之前,不要在分時系統上進行這一嘗試,其後果將會立即發生,嘗試者可能會被抓住並受到懲罰。

答:略。

36、用一個類似於UNIX od或MS-DOS DEBUG的程式考察並嘗試解釋UNIX類系統或Windows的目錄。提示:如何進行取決於OS允許做什麼。一個有益的技巧是在一個有某個作業系統的軟盤上建立一個目錄,然後使用一個允許進行此類訪問的不同的作業系統讀盤上的原始資料。

答:略。