1. 程式人生 > >現代作業系統 第四章 檔案系統 習題

現代作業系統 第四章 檔案系統 習題

Chapter04

第四章 檔案系統 習題


知識點小記


  1. 檔案型別:
    ①普通檔案:包含有使用者資訊的檔案,分為ASCII檔案和二進位制檔案。
    ②目錄:管理檔案系統結構的系統檔案;
    ③字元特殊檔案(UNIX):與輸入/輸出有關,用於序列I/O類裝置,如終端、印表機、網路等。
    ④塊特殊檔案(UNIX):用於磁碟類裝置。
  2. 檔案訪問方式:順序訪問、隨機訪問。
  3. 絕對路徑名:由從根目錄到檔案的路徑組成;相對路徑名:所有不從根目錄開始的路徑名。
  4. 檔案系統存放在磁碟上。磁碟可劃分為一個或多個分割槽,每個分割槽有一個獨立的檔案系統。磁碟的0號扇區稱為主引導記錄
    (MBR),用來引導計算機。MBR的結尾是分割槽表,該表給出了每個分割槽的起始和結束地址
  5. 計算機被引導時,BIOS讀入並執行MBR。MBR做的第一件事是確定活動分割槽,讀入它的第一個塊—“引導塊”。
  6. 檔案儲存的實現:
    ①連續分配。優點:實現簡單;讀操作效能較好。缺點:隨時間推移會產生大量碎片。
    ②連結串列分配。優點:可以充分利用每個磁碟塊,不會因為磁碟碎片而浪費儲存空間;順序讀取檔案方便。缺點:隨機訪問相當緩慢;由於指標佔去了一些位元組,每個磁碟塊儲存資料的位元組數不再是2的整數次冪,降低了系統效率。
    ③採用記憶體中的表進行連結串列分配。把之前每個磁碟塊的指標字放在記憶體中的一個表(檔案分配表FAT)中,就可以解決上述連結串列的兩個不足。缺點:必須把整個表放在記憶體中,如果磁碟塊很多,表佔用的空間會很大,此時該方法並不實用,不能較好地擴充套件並應用於大型磁碟中。
  7. 用i節點記錄各個檔案分別包含哪些磁碟塊。檔案開啟時,其i節點才在記憶體中。
  8. 目錄系統的主要功能是把ASCII檔名對映成定位檔案資料所需的資訊。作業系統利用使用者給出的路徑名找到相應目錄項。目錄項中提供了查詢檔案磁碟塊所需要的資訊。
  9. 檔案屬性儲存的位置:①直接放在目錄項中,目錄中有一個固定大小的目錄項列表,每個檔案對應一項,其中包括一個固定長度的檔名、一個檔案屬性的結構體以及說明磁碟位置的一個或多個磁碟地址;②把檔案屬性存放在i節點中,這是目錄項會更短:只有檔名和i節點號。第二種方法更好。
  10. 日誌結構檔案系統LFS、日誌檔案系統、虛擬檔案系統VFS。
  11. 虛擬檔案系統,抽象出所有檔案系統共有的部分,並將這部分程式碼放在單獨的一層,該層呼叫底層的實際檔案系統來具體管理資料。絕大多數UNIX採用VFS。
  12. 改善檔案系統的效能:
    ①快取記憶體
    ②塊提前讀:只適用於實際順序讀取的檔案
    ③減少磁碟臂運動:把可能順序訪問的塊放在一起
  13. 檔案系統例項:
    ①MS-DOS檔案系統:按32位的數字儲存檔案的大俠,理論上檔案大小能夠大至4GB,通過記憶體中的檔案分配表(FAT)來跟蹤檔案塊。
    ②UNIX V7檔案系統:檔案系統從根目錄開始形成樹狀,加上鍊接,形成了一個有向無環圖。
    ③CD-ROM檔案系統:不需要記錄空閒塊。每個CD-ROM有16塊作為開始,製造商可以在這一區域放入載入程式。接下來的一塊放基本卷描述符,包含CD-ROM的一些基本資訊(系統識別符號32位元組、卷識別符號32位元組、釋出識別符號218位元組、資料預備識別符號128位元組)。

習題答案


Q1: 給出檔案/etc/passwd的五種不同的路徑名。(提示:考慮目錄項”.”和”…”。)

A:
/etc/passwd
/./etc/passwd
/././etc/passwd
/./././etc/passwd
/etc/…/etc/passwd
/etc/…/etc/…/etc/passwd
/etc/…/etc/…/etc/…/etc/passwd
/etc/…/etc/…/etc/…/etc/…/etc/passwd


Q2:在Windows中,當用戶雙擊資源管理器中列出的一個檔案時,就會執行一個程式,並以這個檔案作為引數。作業系統要知道執行的是哪個程式,請給出兩種不同的方法。

A:Windows使用副檔名。每種副檔名對應一種檔案型別和某些能處理這種型別的程式。另一種方式時記住哪個程式建立了該檔案,並執行那個程式。Macintosh以這種方式工作。


Q3:在早期的UNIX系統中,可執行檔案(a.out)以一個非常特別的魔數開始,這個數不是隨機選擇的。這些檔案都有檔案頭,後面是正文段和資料段。為什麼要為可執行檔案挑選一個非常特別的魔數,而其他型別檔案的第一個字反而有一個或多或少是隨機選擇的魔數?

A:這些系統直接把程式載入記憶體,並且從word0(魔數)開始執行。為了避免將header作為程式碼執行,魔數是一條branch指令,其目標地址正好在header之上。按這種方法,就可能把二進位制檔案直接讀取到新的程序地址空間,並且從0 開始執行。


Q4: 在UNIX中open系統呼叫絕對需要嗎?如果沒有會產生什麼結果?

A: open呼叫的目的是:把檔案屬性和磁碟地址表裝入記憶體,便與後續呼叫的快速訪問。
首先,如果沒有open系統呼叫,每次讀取檔案都需要指定要開啟的檔案的名稱。系統將必須獲取其i節點,雖然可以快取它,但面臨一個問題是何時將i節點寫回磁碟。可以在超時後寫回磁碟,雖然這有點笨拙,但它可能起作用。


Q5:在支援順序檔案的系統中總有一個檔案迴繞操作,支援隨機存取檔案的系統是否也需要該操作?

A:否。如果要再次讀取檔案,只需隨機訪問位元組0。


Q6:某一些作業系統提供系統呼叫rename給檔案重新命名,同樣也可以通過把檔案複製到新檔案並刪除原檔案而實現檔案重新命名。請問這兩種方法有何不同?

A:rename呼叫不會改變檔案的建立時間和最後的修改時間,但是建立一個新的檔案,其建立時間和最後的修改時間都會改為當前的系統時間。另外,如果磁碟滿,複製可能會失敗。


Q7: 在有些系統中有可能把部分檔案對映進記憶體中。如此一來系統應該施加什麼限制?這種部分對映如何實現?

A:檔案的對映部分必須以頁邊界開始,並且長度為整數頁數。每個對映的頁面使用檔案本身作為後備儲存。未對映的記憶體使用臨時檔案或分割槽作為後備儲存。


Q8: 有一個簡單作業系統只支援單一目錄結構,但是允許該目錄中有任意多個檔案,且帶有任意長度的名字。這樣可以模擬層次檔案系統嗎?如何進行?

A:使用檔名,如/usr/ast/file。雖然它看起來像一個層次化的路徑名稱,但它只是一個包含嵌入的斜槓的單一名稱。


Q9: 在UNIX 和Windows 中通過使用一個特殊的系統呼叫把檔案的“當前位置”指標移到指定位元組,從而實現了隨機訪問。請提出一個不使用該系統呼叫完成隨機存取的替代方案。

A:一種方法是在讀取系統呼叫中新增一個額外的引數,告訴你要讀取哪個地址。實際上,每次讀取都有可能在檔案中進行搜尋。該方案的缺點是(1)每個讀取呼叫都含有額外引數,以及(2)要求使用者跟蹤檔案指標在哪裡。


Q10.考慮圖4-8中的目錄樹,如果當前工作目錄是/usr/jim,則相對路徑名為…/ast/x的檔案的絕對路徑名是什麼?
圖4-8

A: …將搜尋移動到/usr,所以…/ast就是/usr/ast。因此…/ast/x與/usr/ast/x相同。


Q11: 正如書中所提到的,檔案的連續分配會導致磁碟碎片,因為當一個檔案的長度不等於塊的整數倍時,檔案中的最後一個磁碟塊中的空間會浪費掉,請問這是內碎片還是外碎片?並將它與先前一章的有關討論進行比較。

A:原答案:由於這些被浪費的空間在分配單元(檔案)之間,而不是在它們內部,因此,這是外部碎片。這類似於交換系統或者純分段系統中出現的外部碎片。
網上有人說這個答案是錯的,說應該是內部碎片,這裡是混淆了記憶體的內部/外部碎片,和磁碟的內部/外部碎片的區別。

外部碎片和內部碎片的區別 - CSDN部落格

一、在記憶體上(使用連續分配演算法來管理分配記憶體時會產生)的外部碎片和內部碎片兩個概念

記憶體碎片分為:內部碎片和外部碎片

【內部碎片】
內部碎片就是已經被分配出去(能明確指出屬於哪個程序)卻不能被利用的記憶體空間;
內部碎片是處於(作業系統分配的用於裝載某一程序的記憶體)區域內部或頁面內部的儲存塊。佔有這些區域或頁面的程序並不使用這個儲存塊。而在程序佔有這塊儲存塊時,系統無法利用它。直到程序釋放它,或程序結束時,系統才有可能利用這個儲存塊。

單道連續分配只有內部碎片。多道固定連續分配既有內部碎片,又有外部碎片。

【外部碎片】
外部碎片指的是還沒有被分配出去(不屬於任何程序),但由於太小了無法分配給申請記憶體空間的新程序的記憶體空閒區域。
外部碎片是處於任何兩個已分配區域或頁面之間的空閒儲存塊。這些儲存塊的總和可以滿足當前申請的長度要求,但是由於它們的地址不連續或其他原因,使得系統無法滿足當前申請。

產生外部碎片的一種情況:

舉個例子,在記憶體上,分配三個作業系統分配的用於裝載程序的記憶體區域A、B和C。假設,三個記憶體區域都是相連的。故而三個***記憶體區域***不會產生外部碎片。現在假設B對應的程序執行完畢了作業系統隨即收回了B,這個時候A和C中間就有一塊空閒區域了。

多道可變連續分配只有外部碎片。

總之,在記憶體上,外部碎片是位於任何兩個作業系統分配的用於裝載程序的記憶體區域或頁面之間的空閒區域,內部碎片是位於一個作業系統分配的用於裝載程序的記憶體區域或頁面內部的空閒區域。

二、在磁碟上的外部碎片和內部碎片兩個概念

很多人會把檔案碎片跟簇的概念混淆起來。其實對windows系統來說硬碟上的每個分割槽都是由最小儲存單元——簇組成的。就好比,一面牆是由一塊塊轉頭組成的。簇的大小可以在分割槽格式化時由使用者定義,一般是數個KB大小,比如是8KB。假設我有一個檔案,大小是80MB零1KB(1MB=1000KB),換算一下就是80,001KB,其中的80,000KB正好佔用10000個簇,**剩下的那1KB,不得以也要佔用1個簇,但這最後一個簇還有7KB的空間沒用上了。而且這個未完全使用的簇,其他檔案也不允許繼續使用。**這就造成了一點點的空間浪費。
不少人就把這被浪費了的7KB空間就是磁碟上的內部碎片。

磁碟上的外部碎片(即平時所說的磁碟碎片,磁碟碎片清理工具只能清理磁碟上的外部碎片,清除不了磁碟上的內部碎片,除非改變檔案系統的分配單位即簇的大小,使之是一個檔案大小的整數倍。)實際上指的是一個檔案佔據那些簇是不連續的,就相當於檔案被分割開來,分別存放在相互間斷的幾段簇上。檔案被分割為幾個部分就是幾個碎片。所以碎片其實是指檔案碎片,可以理解成,檔案破碎成片之意。而且檔案碎片之間有時候順序還是錯亂的。比如說,有時候“檔案裡靠後的碎片”所佔的簇段在硬碟上反而會排在“檔案裡位置靠前的碎片”簇段的前面。這樣一來,一個檔案就會以比較混亂的順序存放在硬碟上。
顯然計算機讀取連續的有序的資料肯定要比不連續的亂序的資料來得快。所以整理碎片可能會大幅度提高系統性能。
舉個例子,起初硬碟某個分割槽是空白的,寫入三個檔案A、B和C。顯然這個時候,三個檔案都是順次佔用三個簇段
(這個說明存放檔案所用的檔案系統應該是類似FAT這樣的檔案系統,具體參看註釋1)
。故而三個檔案不會產生碎片。
現在假設你刪除了B檔案,這個時候A和C中間就有一塊空閒簇段了。此時還是不存在檔案碎片的,因為每個檔案各自佔據的簇段都是連續的,沒有檔案被分割。而如果現在需要寫入一個檔案D,而且D比剛剛刪去的檔案B要大。那麼A和C之間的空閒簇段就不足以放入D,再假設C後面的空閒簇段也不足以放下D,這個時候D就勢必要分割成兩塊存放,一塊放在A和C之間,另一塊放在C之後。這樣一來,檔案碎片就產生了。D檔案有兩個檔案碎片。
磁碟碎片整理要做的工作就是:把C檔案前移,一直移到緊接A檔案的簇段上去。這樣A和C之間就沒有空閒簇了,C之後剩下的將是一段完整的空閒簇段,足以放下檔案D。這樣D就也佔據一段連續的簇段。碎片也就消除了。


Q12:描述一個損壞的資料塊對以下三種形式的檔案的影響:(a)連續的,(b)連結串列的,(c)索引的。

A: 如果資料塊在相鄰的分配系統中被破壞,那麼只有該塊受到影響;檔案塊的其餘部分可以被讀取。在連結串列分配的情況下,不能讀取損壞的塊;而且,從該損壞的塊開始的所有塊的位置資料也會丟失。在索引分配的情況下,只有受損壞的資料塊受到影響。


Q13: 一種在磁碟上連續分配並且可以避免空洞的方案是,每次刪除一個檔案後就緊縮一下磁碟。由於所有的檔案都是連續的,複製檔案時需要尋道和旋轉延遲以便讀取檔案,然後全速傳送。在寫回檔案時要做同樣的工作。假設尋道時間為5ms,旋轉延遲為4ms,傳送速率為8MB/s,而檔案平均長度是8 KB,把一個檔案讀入記憶體並寫回到磁碟上的一個新位置需要多長時間?運用這些數宇,計算緊縮16GB磁碟的一半需要多長時間?

A:傳送一個檔案需要的時間 = 8KB / (8MB/s) = 0.9765625 ms
把一個檔案讀入記憶體並寫回到磁碟上的一個新位置所需時間 = (5+4+0.9765625)x 2 = 19.953125 ms
緊縮16GB磁碟的一半,需要傳送 8GB/8KB=2^20個檔案,所需時間2M x 19.953125 = 20922368 ms = 20922.368 s


Q14:基於前一個問題的答案,緊縮磁碟有什麼作用嗎?

A:因為在系統刪除的所有檔案都會以碎片的形式存在磁碟中,當碎片到達一定量磁碟就不能再裝檔案了,必須進行外部清理,所以緊縮磁碟會釋放更多的儲存空間,但在每個檔案刪除後都壓縮磁碟不是一個好辦法。


Q15:某些數字消費裝置需要儲存資料,比如存放檔案等。給出一個現代裝置的名字,該裝置需要檔案儲存,並且適合連續的分配空間。

A:數碼相機按順序記錄一系列照片,儲存在某種非易失性儲存媒介(例如,快閃記憶體)上。當照相機復位時,該媒介被清空。然後,按順序依次記錄一張照片,直到儲存滿,然後上載到硬碟上。對於這種應用,相機內部檔案的連續檔案系統時最理想。


Q16:考慮圖4-13中的i節點。如果它含有用4個位元組表示的10個直接地址,而且所有的磁碟塊大小是1024KB,那麼檔案最大可能有多大?
在這裡插入圖片描述

A: i節點包含10個直接磁碟地址還有一個間接塊的地址,這個間接塊裡存放著額外的磁碟地址,額外的磁碟地址有1024KB/4B=218個,假設檔案佔用了所有可能的磁碟塊,共計218+10=262154塊,每塊1MB,檔案最大可能有262154MB。


Q17:一個班的學生資訊儲存在一個檔案中,這些記錄可以被隨意訪問和更新,假設每個學生的記錄大小都相同,那麼在連續的、連結串列的和表格/索引的這三種分配方式中,哪種方式最合適?

A: 對於隨機訪問,表格/索引和連續的都是合適的,連結串列分配則不合適,因為對於給定的記錄,它通常需要多次磁碟讀取。


Q18: 考慮一個大小始終在4KB和4MB之間變化的檔案,連續的、連結串列的和表格/索引的這三種分配方式中,哪種方式最合適?

A:由於檔案大小變化很大,連續分配效率低下,需要隨著檔案大小的增長重新分配磁碟空間,隨著檔案大小的縮小壓縮空閒塊。連結分配和表/索引分配都是有效的;在這兩者之間,對於隨機訪問場景,表/索引分配將更加有效。


Q19: 有建議說,把短檔案的資料存在i節點之內會提高效率並且節省磁碟空間,對於圖4-13中的i節點,在i節點之內可以存放多少位元組的資料?
在這裡插入圖片描述

A: 答:必須有一種方式來標記磁碟地址儲存資料,而不是指標。如果在屬性之間的某處存在一點空餘,可以使用它。這將留下所有九個指標的資料。如果每個指標是k個位元組,那麼儲存的檔案可能長達9k位元組。如果屬性中沒有剩餘位,則第一個磁碟地址可以儲存無效地址,將以下位元組標記為資料而不是指標。在這種情況下,最大檔案為8k位元組。


Q20: 兩個計算機科學系的學生Carolyn和Elinor正在討論i節點。Carolyn認為儲存器容量越來越大,價格越來越便宜,所以當開啟檔案時,直接取i節點的副本,放到記憶體i節點表中,建立一個新i節點將更簡單、更快,沒有必要搜尋整個i節點來判斷它是否已經存在。Elinor則不同意這一觀點。他們兩個人誰對?

A:Elinor是正確的。表格中同時有i節點的2個備份是災難性的,除非都是隻讀的。最壞的情況就是當兩個都同時被更新時。當把i節點寫回磁碟時,後寫入的會把先寫入的刪除,而磁碟塊就丟失了。


Q21: 說明硬連線優於符號連結的一個優點,並說明符號連結優於硬連線的一個優點。

A:硬連線無需額外的磁碟空間,而只需在i節點中記錄有多少個連結。符號連結需要空間儲存所指的檔案的名稱。符號連結可以指向其他機器上的檔案,甚至是Internet上的檔案。而硬連線只能指向其自己分割槽中的檔案。

為解決檔案的共享使用,Linux 系統引入了兩種連結:硬連結 (hard link) 與軟連結(又稱符號連結,即 soft link 或 symbolic link)。連結為 Linux 系統解決了檔案的共享使用,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等好處。若一個 inode 號對應多個檔名,則稱這些檔案為硬連結。換言之,硬連結就是同一個檔案使用了多個別名(見 圖 2.hard link 就是 file 的一個別名,他們有共同的 inode)。硬連結可由命令 link 或 ln 建立。如下是對檔案 oldfile 建立硬連結。
link oldfile newfile
ln oldfile newfile
由於硬連結是有著相同 inode 號僅檔名不同的檔案,因此硬連結存在以下幾點特性:

  • 檔案有相同的 inode 及 data block;
  • 只能對已存在的檔案進行建立;
  • 不能交叉檔案系統進行硬連結的建立;
  • 不能對目錄進行建立,只可對檔案建立;
  • 刪除一個硬連結檔案並不影響其他有相同 inode 號的檔案。

軟連結與硬連結不同,若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。軟連結就是一個普通檔案,只是資料塊內容有點特殊。軟連結有著自己的 inode 號以及使用者資料塊(見 圖 2.)。因此軟連結的建立與使用沒有類似硬連結的諸多限制:軟連結與硬連結不同,若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。軟連結就是一個普通檔案,只是資料塊內容有點特殊。軟連結有著自己的 inode 號以及使用者資料塊(見 圖 2.)。因此軟連結的建立與使用沒有類似硬連結的諸多限制:

  • 軟連結有自己的檔案屬性及許可權等;
  • 可對不存在的檔案或目錄建立軟連結;
  • 軟連結可交叉檔案系統;
  • 軟連結可對檔案或目錄建立;
  • 建立軟連結時,連結計數 i_nlink 不會增加;
  • 刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢復為正常的軟連結)。

當然軟連結的使用者資料也可以是另一個軟連結的路徑,其解析過程是遞迴的。但需注意:軟連結建立時原檔案的路徑指向使用絕對路徑較好。使用相對路徑建立的軟連結被移動後該軟連結檔案將成為一個死連結(如下所示的軟連結 a 使用了相對路徑,因此不宜被移動),因為連結資料塊中記錄的亦是相對路徑指向。


Q22: 分別闡釋硬連結和軟連結與i節點分配方式的區別。

A:給定檔案的硬連結的所有目錄條目都指向單個i節點。在軟連結的情況下,為軟連結建立一個新的i節點,這個i node實質上指向正在連結的原始檔案。


Q23: 考慮一個塊大小為4KB、使用自由列表(free-list method)的4TB的磁碟,多少個塊地址可以被存進一個塊中?

A: 磁碟上的塊數=4 TB/4 KB=2^30。因此,每個塊地址可以是32位(4位元組),最接近的冪次為2。因此,每個塊可以儲存4 kb/4=1024個地址。


Q24:空閒磁碟空間可用空閒塊表或點陣圖來跟蹤。假設磁碟地址需要D位,一個磁碟有B個塊,其中有F個空閒。在什麼條件下,空閒塊表採用的空間少於點陣圖?設D為16位,請計算空閒磁碟空間的百分比。

A:每個磁碟地址需要D位,且有F個空閒塊,故需要空閒表為DF位,採用點陣圖則需要B位,當DF<B時,空閒表採用的空間少於點陣圖,當D=16時,得F/B<1/D=6.25%,即空閒空間的百分比少於6.25%。


Q25:一個空閒塊點陣圖開始時和磁碟分割槽首次初始化類似,比如:1000 0000 0000 0000(首塊被根目錄使用),系統總是從最小編號的盤塊開始尋找空閒塊,所以在有6塊的檔案A寫入之後,該點陣圖為1111 1110 0000 0000。請說明在完成如下每一個附加動作之後點陣圖的狀態:
a)寫入有5塊的檔案B。
b)刪除檔案A。
c)寫入有8塊的檔案C。
d)刪除檔案B。
A:
a)1111 1111 1111 0000
b)1000 0001 1111 0000
c)1111 1111 1111 1100
d)1111 1110 0000 1100


Q26: 如果因為系統崩潰而使存放空間磁碟塊資訊的空閒塊表或點陣圖完全丟失,會發生什麼情況?有什麼辦法從這個災難中恢復嗎,還是該磁碟徹底無法使用?分別就UNIX和FAT-16檔案系統討論你的答案。

A: 這根本不是一個嚴重的問題。恢復很簡單,只需要時間。恢復演算法是對所有檔案中的所有塊進行列表,並將補碼作為新的空閒列表。在UNIX中,這可以通過掃描所有的i節點來完成。在FAT檔案系統中,因為沒有空閒列表,所以問題不會發生。但是即使有,要恢復的一切都是掃描脂FAT尋找空閒的條目。


Q27: Oliver Owl在大學計算中心的工作是更換用於通宵資料備份的磁帶,在等待每盤磁帶完成的同時,他在寫一篇畢業論文,證明莎士比亞戲劇是由外星訪客寫成的。由於僅有一個系統,所以只能在正在做備份的系統上執行文字編輯程式。這樣的安排有什麼問題嗎?

A:Oliver Owl的論文可能不會像他所希望的那麼可靠。備份程式可能備份當前開啟用於寫入的檔案,但是該檔案中的資料的狀態可能是不確定的。


Q28:在教材中我們詳細討論過增量轉儲。在Windows中很容易說明何時要轉儲一個檔案,因為每個檔案都有一個存檔位。在UNIX中沒有這個位,那麼UNIX備份程式怎樣知道哪個檔案需要轉儲?

A:他們必須跟蹤磁碟上的檔案最後一次轉儲的時間。每次轉儲後,一個條目被附加到該檔案上。在轉儲過程中,檔案被讀取,時間記錄在最後一個條目上。任何從那以後被更改的檔案都要被轉儲。


Q29: 假設圖4-25中的檔案21自上次轉儲之後沒有修改過,在什麼情況下圖4-26中的四張點陣圖會不同?
4-25
4-26

A: (a)和(b)中,21不會被標記。在(c)中,沒有變化。在(d)中,21不會被標記。


Q30:有人建議每個UNIX檔案的第一部分最好和其i節點放在同一個磁碟塊中,這樣做有什麼好處?

A:許多UNIX檔案很短。如果整個檔案與i節點放在同一個磁碟塊中,則只需要一個磁碟訪問即可讀取檔案,而不是兩個。即使對於較長的檔案,也會有一點好處,因為需要更少的磁碟訪問。


Q31: 考慮圖4-27。對某個特殊的塊號,計數器的值在兩個表中有沒有可能都是數值2? 這個問題如何糾正?
4-27

A: 這是不應該發生的,但由於Bug可能某個地方會發生這種問題。這意味著有些塊會出現在兩個檔案中,而且在空閒塊表中也會出現兩次。修復這個問題的第一步是從空閒塊表中刪除這兩個副本。接下來,必須獲取一個空閒塊,並將該錯誤塊的內容複製到獲取的空閒塊中。最後,新獲取的塊的副本插到其中一個檔案之中。這時,系統將再次一致。


Q32: 檔案系統的效能與快取記憶體的命中率有很大的關係(即在快取記憶體中找到所需塊的概率)。從快取記憶體中讀取資料需要1ms,而從磁碟上讀取需要40ms,若命中率為h,給出讀取資料所需平均時間的計算公式。並畫出h從0到1.0變化時的函式曲線。

A: T=1 x h + 40 x (1-h) =40-39h ms (0 <= h <= 1)


Q33: 對於與計算機相連線的一個外部USB硬碟驅動器,通寫快取記憶體和塊快取記憶體哪種方式更合適?

A: 在這種情況下,最好是使用通寫快取記憶體,因為它將資料寫入硬碟驅動器,同時也更新快取。這將確保更新後的檔案始終在外部硬碟驅動器上,即使使用者在磁碟同步完成之前不小心刪除了硬碟。

Write-through(直寫模式)在資料更新時,同時寫入快取Cache和後端儲存。此模式的優點是操作簡單;缺點是因為資料修改需要同時寫入儲存,資料寫入速度較慢。


Q34:考慮一個將學生記錄存放在檔案中的應用,它以學生ID作為輸入,隨後讀入、更新和寫相應的學生記錄。這個過程重複進行知道應用結束。塊預讀(block read-ahead)技術在這裡適用嗎?

A: 不是很適用。塊預讀技術依次讀取塊,在其使用之前,以提高效能。在該應用程式中,由於使用者可以在給定時刻輸入任何學生ID,因此很可能不會順序訪問記錄。因此,在這種情況下,預讀技術將不是非常有用的。


Q35: 考慮一個有10個數據塊的磁碟,這些資料塊從塊14到23.有兩個檔案在這個磁碟上:f1和f2。這個目錄結構顯示f1和f2的第一個資料塊分別為22和16。給定FAT表項如下,那些資料塊被分配給f1和f2?
(14,18);(15,17);(16,23);(17,21);(18,20);(19,15);(20,-1);(21,-1);(22,19);(23,14)
在上面的符號中,(x,y)表示儲存在表項x中的值指向資料塊y。

A:
f1: 22、19、15、17、21
f2: 16、23、14、18、20


Q36:考慮圖4-21 背後的思想,目前磁碟平均尋道時間為8ms,旋轉速率為15000rpm,每道為262 144 位元組。對大小各為1KB、2KB和4KB的磁碟塊,傳送速率各是多少?
4-21

A:對於15000 rpm(每分鐘旋轉),每旋轉一週需60/15000=0.004秒=4ms。那麼讀取k位元組的平均存取時間為8ms(尋道時間)+ 2ms(旋轉延遲:4ms/2)+(k/262144)·4ms(讀取k位元組的時間)。對於1 KB,2 KB,4 KB的塊,訪問時間分別為10.015625ms,10.03125ms和10.0625ms(幾乎沒有什麼不同)。其資料速率分別為102240 KB/sec,204162 KB/sec,407056 KB/sec。


Q37:某個檔案系統使用2KB的磁碟塊,而中間檔案大小值為1KB。如果所有的檔案都是正好1KB大,那麼浪費掉的磁碟空間的比例是多少?你認為一個真正的檔案系統所浪費的空間比這個數值大還是小?請說明理由。

A:1KB/2KB·100%=50%。在實踐中,每個檔案系統都有大檔案以及許多小檔案。例如,32769位元組的檔案將使用17個磁碟塊進行儲存,得到的空間利用效率為32768/34816,約為94%。


Q38: 給定磁碟塊大小為4KB,塊指標地址值為4位元組,使用10個直接地址(direct address)和一個間接塊(indirect block)可以訪問的最大檔案大小是多少位元組?

A: 一個間接塊中地址指向的磁碟塊可以儲存4KB/4B=2^10個塊指標,總共磁碟塊有10+1024=1034個,檔案大小為1034·4KB=4235264B。


Q39:MS-DOS中的檔案必須在記憶體中的FAT-16表中競爭空間。如果某個檔案使用了k個表項,其他任何檔案就不能使用這k個表項,這樣會對所有檔案的總長度帶來什麼限制?

A:它將所有檔案長度的總和限制為不大於磁碟。這不是一個非常嚴重的限制。


Q40: 一個UNIX 系統使用4KB磁碟塊和4位元組磁碟地址。如果每個i節點中有10個直接表項以及一個一次間接塊、一個二次間接塊和一個三次間接塊,那麼檔案的最大為多大?

A:一次間接塊含4KB/4B=210個指標,二次間接塊含220個指標,三次間接塊含2^30個指標。
4KB x ( 10 + 2^10 + 2^20 + 2^30) = 4KB x 1074791434 = 4TB。
// 這是我自己算的,歡迎指正


Q41:對於檔案/usr/ast/courscs/os/handout.t,若要調入其i節點需要多少個磁碟操作?假設其根目錄的i節點在記憶體中,其他路徑都不在記憶體中。並假設所有的目錄都在一個磁碟塊中。

A:需要以下磁碟讀取操作:
(1) directory /
(2) i-node for /usr
(3) directory /usr
(4) i-node for /usr/ast
(5) directory /usr/ast
(6) i-node for /usr/ast/courses
(7) directory /usr/ast/courses
(8) i-node for /usr/ast/courses/os
(9)directory /usr/ast/courses/os/
(10)i-node for /usr/ast/courses/os/handout.t
一共需要10個磁碟讀取操作。


Q42: 在許多UNIX系統中,i節點存放在磁碟的開始之處。一種替代設計方案是,在檔案建立時分配i節點,並把i節點存放在該檔案首個磁碟塊的開始之處。請討論這個方案的優缺點。

A:一些優點如下:首先,沒有磁碟空間浪費在未使用的i節點上。第二,不可能用完i節點。第三,需要更少的磁碟移動,因為可以在一個操作中讀取i節點和初始資料。一些缺點如下:首先,目錄條目現在需要一個32位的磁碟地址,而不是一個16位的i節點號碼。第二,對於不包含資料的檔案(空檔案,裝置檔案)也將使用整個磁碟塊。第三,檔案系統完整性檢查將會更慢,因為需要為每個i節點讀取整個塊,並且i節點分散在磁碟上。第四,尺寸被仔細設計以適應塊大小的檔案因為i節點的存在將不再適合塊大小,使得效能變差。


Q43~Q48略