1. 程式人生 > 其它 >《現代作業系統(中文第四版)》課後習題 第一章(部分)

《現代作業系統(中文第四版)》課後習題 第一章(部分)

(受AlphalINF邀請,接著寫16-26題)

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

有可能。向磁碟寫時,如果呼叫者取回控制,在最終發生寫操作時立刻重寫資料,將會寫入錯誤的資料
資料。但是如果驅動程式在返回前將資料複製到一個專用的緩衝器,那麼呼叫者可以繼續執行。另
外,可以允許呼叫者繼續,當緩衝器被呼叫時,給它一個訊號,不過這很麻煩並且容易出錯。

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

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

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

程序表是為了儲存當前被掛起、或者是被延遲和阻塞的程序狀態。現代個人計算機有許許多多的程序在進行,即使當用戶什麼事都沒做、什麼程式都沒有在執行時。它們需要檢查更新,下載郵件以及許多其他的事。在單一程序的系統中不需要程序表,因為單一程序從不掛起。

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

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

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

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

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

時間複用: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。

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

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

塊特殊檔案包含被編號的塊,每一塊都可以獨立地讀取或者寫入。而且定位任意塊和開始讀出或寫入是很容易的。但是這對於字元特殊檔案是不可能的。

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

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