408 知識點筆記——作業系統(檔案系統、裝置管理)

大白羊_Aries發表於2020-11-19

4 檔案管理

【檔案系統模型】

下圖所示為檔案系統模型。可將該模型分為 3 個層次,其最底層是物件及其屬性;中間層是對物件進行操縱和管理的軟體集合;最高層是檔案系統提供給使用者的介面

其中對物件操縱和管理的軟體集合這個層次,是檔案系統的核心部分。檔案系統的功能大多是在這一層實現的,其中包括:對檔案儲存空間的管理、對檔案目錄的管理、用於將檔案的邏輯地址轉化為實體地址的機制、對檔案讀和寫的管理以及對檔案的共享與保護等功能

在這裡插入圖片描述
△☼▽

在這裡插入圖片描述

分析:D,根據上述理論,顯然 A 不正確;在多級目錄結構中,從根目錄到任何資料檔案,都只有一條唯一的路徑。在該路徑上從樹的根(即主目錄開始),把全部目錄檔名與資料檔名依次用 / 連線起來,即構成該資料檔案的路徑名。系統中的每個檔案都有唯一的路徑名,所以 B 不正確,對檔案的訪問只需要通過路徑名即可;C 錯在物理塊大小可以任意指定,它必須和外存分配方式相符合;D 正確,基於檔案系統的概念,可以把資料組成分為資料項、記錄和檔案 3 級,記錄是一組相關資料項的集合,用於描述一個物件在某方面的屬性,記錄是檔案存取的基本單位,資料項是檔案可使用的最小單位

△☼▽

在這裡插入圖片描述

分析:
(1)將有可能導致該共享檔案的其他使用者無檔案可用,或者使用了不是其需要的檔案
(2)使用者可以通過修改目錄項來改變對檔案的存取許可權,從而非法使用檔案系統;另外,對目錄項隨意修改會造成嚴重的管理混亂
(3)解決方法是不允許使用者直接執行上述操作,而必須經由作業系統呼叫來執行這些操作

【檔案控制塊(FCB)】

檔案控制塊一般在建立該檔案時建立,開啟檔案時只是將檔案控制塊的內容讀入記憶體,讀和寫檔案時對檔案內容操作,它們必須依靠檔案控制塊的指示,例如外存地址、讀寫許可權等。關閉檔案只是將檔案控制塊寫回磁碟,刪除檔案時將檔案控制塊清除

檔案控制塊至少應該包含以下資訊:

  • 檔名
  • 檔案的結構:說明檔案的邏輯結構是記錄式檔案還是流式檔案,若為記錄式檔案還需要進一步說明記錄是否定長、記錄長度及個數;說明檔案的物理結構是順序檔案、索引順序檔案還是索引檔案
  • 檔案的物理位置:如對於連續檔案應給出檔案第一塊的實體地址及所佔塊數,對於索引順序檔案只需要給出第一塊的實體地址,對於索引檔案則應給出索引表地址
  • 存取控制資訊
  • 管理資訊

△☼▽

在這裡插入圖片描述

分析:B,索引結構的檔案才需要索引表地址

△☼▽

在這裡插入圖片描述

分析:因為原本整個檔案控制塊都是在目錄中的,而檔案控制塊分解法將檔案控制塊的部分內容放在了目錄外,所以檢索完目錄後別忘了還需要一次訪盤找齊所有的檔案控制塊內容

(1)分解前,每個盤塊最多容納 512B/64B = 8 個檔案控制塊,有 254 (254=8×31+6)個檔案控制塊,需要 32 個盤塊,所找的目錄項在第 i 個盤塊時所需的磁碟訪問次數為 i,故平均訪問磁碟次數 = [8×(1+2+…+31)+6×32]/254 = 16.38次

分解後,每個盤塊最多容納 512B/10B = 51 (注意是整除)個檔案控制塊,254 (254=51×4+50)個檔案控制塊,需要 5 個盤塊,故平均訪問磁碟次數 = [51×(2+3+…+5)+50×6]/254 = 3.99 次

(2)分解前平均訪問磁碟次數 = (1+2+…+n)/n = (n+1)/2 次,分解後平均訪問磁碟次數 = [2+3+…+(m+1)]/m = (m+3)/2,要使得分解後的訪問次數減少就要求 (m+3)/2 < (n+1)/2,即 m < n-2

【索引節點】

有些作業系統採用了檔名和檔案描述資訊分開的方法,將檔案描述資訊單獨形成一個索引節點,簡稱 i 結點。檔案目錄中的每個目錄項僅由檔名和指向該檔案 i 節點的指標構成

存放在磁碟上的索引節點稱為磁碟索引節點,每個檔案都有唯一的磁碟索引節點。當檔案被開啟時,磁碟索引接節點被複制到記憶體的索引節點中,以便使用,存放在記憶體中的索引節點就稱為記憶體索引節點

【使用者訪問許可權】

可以把使用者訪問許可權抽象為一個矩陣,行代表使用者,列代表訪問許可權

△☼▽

在這裡插入圖片描述

分析:D,4×5=20

【目錄檢索】

要實現使用者對檔案的按名存取,系統先利用使用者提供的檔名形成檢索路徑,再對目錄進行查詢。在順序檢索中時,路徑名的一個分量名未找到,說明路徑名中的某個目錄或檔案不存在,就不需要再查詢了

目錄進行查詢的方式有兩種:線性檢索和雜湊方法,線性檢索即 root/…/filename,線代作業系統中一般採用這種方式查詢檔案

為了加快檔案查詢速度,可以設立當前目錄,於是檔案路徑可以從當前目錄進行查詢,不必都從根目錄開始逐級檢索

在順序檢索法的查詢完成後,得到的是檔案的邏輯地址

【目錄結構】

1)單級目錄結構

2)二級目錄結構

二級目錄結構將檔案目錄分成主檔案目錄和使用者檔案目錄。系統為每個使用者建立一個單獨的使用者目錄資訊(UFD),其中的表項登記了該使用者建立的所有檔案及其說明資訊。主檔案目錄(MFD)則記錄系統中各個使用者檔案目錄的情況,每個使用者佔一個表項,表目中包括使用者名稱及相應使用者目錄所在的儲存位置等

檔案刪除時,只需在使用者檔案目錄中刪除該檔案的目錄項。若刪除後該使用者目錄表為空,則表明該使用者已脫離了系統,從而可以將主檔案目錄表中該使用者的對應項刪除

二級目錄結構可以解決檔案重名的問題,並可以獲得較高的查詢速度,但二級目錄結構缺乏靈活性,特別是當使用者需要在某些任務上進行合作和訪問其他檔案時會產生很多問題

△☼▽

在這裡插入圖片描述

分析:採用二級目錄結構,解決同名問題

在這裡插入圖片描述

△☼▽

在這裡插入圖片描述

分析:
(1)系統應採用二級目錄結構

在這裡插入圖片描述
(2)題(1)中所給出的二級目錄結構能夠滿足要求,使用者檔案目錄中的 P1、P2、P3 均可改為 P
(3)在學生存取程式和資料時,檔案系統會先搜尋主檔案目錄,找到該學生的使用者目錄後,即可在使用者目錄中找到指定的檔案,比如學生 S1,由路徑 /S1/P 找到的檔案就是 S1 的程式檔案,因為它與學生 S2 的程式檔案 /S2/P 不是同一個檔案,所以不會引起衝突,檔案 A 可由 3 個學生同時開啟執行讀操作

3)樹形目錄結構

樹形目錄結構由一個根目錄和若干層子目錄組成。這種目錄結構一是能夠解決檔案重名問題,二是能夠解決檔案多而根目錄容量有限帶來的問題。但是在樹形目錄中查詢一個檔案,需要按照路徑名逐級訪問中間結點,增加了磁碟訪問次數,進而影響了查詢速度

路徑名:在樹形目錄結構中,往往使用路徑名來唯一標識檔案。從根目錄出發的路徑稱為絕對路徑,從當前目錄開始直到檔案為止的路徑稱為相對路徑

當前路徑:考慮到一個程式在一段時間內所訪問的檔案通常具有區域性性,因此可在這段時間內指定某個目錄作為當前目錄(或工作目錄)。程式對各檔案的訪問都是相對於當前目錄進行的,此時檔案使用的路徑名為相對路徑

△☼▽
在這裡插入圖片描述

分析:
(1)
① 因為在目錄 D 下沒有檔名為 A 的檔案,所以可以在目錄 D 下建立一個檔案,取名為 A
② 根目錄下已有目錄名為 A 的目錄,不能再將目錄 C 改名為 A

(2)
① 使用者 E 要想共享檔案 Q,只要找到 Q 的路徑即可,即使用者 E 可以通過路徑 . . / . . / D / G / K / O / Q ../../D/G/K/O/Q ../../D/G/K/O/Q 來訪問檔案 Q, . . .. .. 表示上一級目錄
② 可以把當前目錄設定為 P 這個目錄,這樣一來,直接用 S 和 T這兩個檔名就能訪問這兩個檔案,不需要每次都從根目錄開始尋找路徑;也可以在目錄 G 下建立兩個連結,直接連結到 S 和 T 上
③ 可以修改檔案 I 的存取控制表,在擁有對 I 的訪問權的使用者列表中只留下使用者 E,其他使用者的名字都從 I 的訪問許可權使用者列表中刪除

△☼▽

在這裡插入圖片描述

分析:
(1)
① 可以,因為目錄 D 中不存在已命名為 A 的檔案或目錄
② 不可以,因為目錄 C 所在的目錄表中已經有一個名為 A 的目錄

(2)
① 首先需要使用者 E 有訪問檔案 M 的許可權,使用者 E 通過自己的主目錄找到其父目錄 C,再訪問到目錄 C 的父目錄(根目錄),然後依次通過目錄 D、G、K、O 即可訪問到檔案 M
② 原本使用者 G 需要通過依次訪問目錄 K 和 P 才能訪問到檔案 S 和 T,為了提高訪問速度,可以在目錄 G 下建立兩個連結檔案,分別連結到檔案 S 和 T 上,這樣使用者 G 就可以直接訪問者兩個檔案了

(3)使用者 E 可以通過修改檔案 I 的存取許可權控制表進行保護,不讓別的使用者看到,具體來說,就是在檔案 I 的存取控制表中僅留下使用者 E 的訪問全相,而不讓其他使用者訪問

△☼▽

在這裡插入圖片描述

分析:
(1)

在這裡插入圖片描述
(2)使用者 usera 的 file1 的檔案路徑名為 /usr/name/usera/asdf/file1;使用者 userb 的 file1 的檔案路徑名為 /name/userb/asdf/file1
(3)要將使用者 userb 的目錄檔案 asdf 下的檔案 file2 換名為 userb 目錄下的newfile,先從 userb 的主目錄 name 查起,將此目錄項中的各個目錄項與 asdf 相比較,直到找到 asdf;再取出 asdf 項中各個目錄項與 file2 相比,直到找到 file2,;將 file2 的目錄項讀入記憶體指定區域,將 file2 改寫為 newfile,再寫回 userb 的目錄中,最後要刪除 asdf 目錄中 file2 的目錄項

【無結構檔案】

無結構檔案是指由字元流構成的檔案,故又稱為流式檔案

【改善磁碟 I/O 效能的方法】

1)重排 I/O 請求次序

重排 I/O 請求次序的含義就是將磁碟請求訪問順序進行重新排序,就是有關磁碟訪問排程策略的選擇對 I/O 的效能影響。對於相同的訪問請求集合,訪問順序會受到排程策略的選擇影響,因此會有不同的尋道時間,而尋道時間是磁碟訪問時間中最大的一項,因此不同的排程策略會影響磁碟裝置的 I/O 效能

2)磁碟快取

預讀和滯後寫也是常見的提升磁碟 I/O 速度的方法。預讀是指當訪問一個磁碟塊時,將相鄰的後續幾個也一併讀出放在快取中,若用到,則直接讀入記憶體,省去了尋道的時間。而滯後寫是指系統將一個資料輸出到磁碟上時,先不直接寫入磁碟,而是先儲存在快取中,以防短期內系統又要對這個資料進行改動。如果要改動資料,直接修改快取即可,而不需要啟動磁碟進行修改

△☼▽

在這裡插入圖片描述

分析:A,理論如上描述

△☼▽

在這裡插入圖片描述

分析:A,磁碟快取記憶體是一種軟體機制,它允許系統吧通常存放在磁碟上的一些資料保留在記憶體中,以便對那些資料的進一步訪問而不需要再訪問磁碟

3)優化檔案物理的分佈

優化檔案物理的分佈,這有一個典型的例子,就是將檔案儲存在磁碟的連續單扇區與間隔扇區的對比。磁碟是在不斷旋轉的,讀出一塊兒資料之後經系統處理之後才能讀下一塊資料,這時磁碟已經轉過了所要讀的下一塊兒資料,需要等下一圈才能讀,增加了旋轉延遲;而間隔扇區儲存就可以避免這個問題,將第二個資料快成放在間隔的幾個扇區之後,當系統處理完第一塊準備讀第二塊時,磁頭恰好轉至第二塊所在扇區,直接開始讀,這樣可以有效地縮短旋轉延遲,進而縮短磁碟訪問時間

△☼▽

在這裡插入圖片描述

分析:轉速為 20ms/r,每磁軌有 10 記錄,那麼每讀出一記錄的時間為 20ms/10 = 2ms

對於第一種記錄分佈,讀出並處理 A 需要 6ms,處理完時讀寫頭已經轉到 D 處,因此為了讀出 B,再轉 8 個記錄,後續均是如此,故總時間為 6ms+9×(2+4+16)ms = 204ms

對於第二種記錄分佈,處理完 A 後,讀寫頭在 B 處可立即讀出並處理,故一共旋轉 2.8 圈,最後一個記錄的處理要 4ms,總時間為 20ms×2.8+4ms = 60ms

△☼▽

在這裡插入圖片描述

分析:
(1)每讀出一個記錄的時間為 27/9 = 3ms,讀出並處理完一個記錄的時間為 5ms,因此讀出並處理完 A,此時讀寫頭已經轉到了 B 中間 ,因此為了讀出 B,必須要再等待 25 ms(因為多走了 2ms 讀寫頭在 B 中間),後續 7 個記錄也是如此,故總時間為 5ms+8×(25+5)ms = 245ms
(2)由上述分析可知,當讀出並處理完 A,此時讀寫頭在第二個磁碟塊中間,於是將 B 放在第三個盤塊處,讀出並處理完 A 後再轉 1ms 就可以順序讀出並處理 B,故而記錄可按照如下方式存放

在這裡插入圖片描述
此時處理檔案的總時間為 5ms+8×6ms = 53ms

4)磁碟分割槽(注意不是改善磁碟 I/O 效能的方法)

磁碟分割槽從實質上說就是對磁碟的一種格式化。但磁碟的 I/O 效能是由呼叫順序以及磁碟本身性質決定的和分割槽的多少並無太大關係,而且如果設定過多分割槽,還會導致一次 I/O 需要啟動多個分割槽,反而會降低效率

【格式化】

一個新的磁碟是一個空白板,必須分成扇區以便磁碟控制器能讀和寫,這個過程稱為 低階格式化(或物理格式化)。低階格式化為磁碟的每個扇區採用特別的資料結構,包括校驗碼。為了使用磁碟儲存檔案,作業系統還需要將自己的資料結構記錄在磁碟上,這分為兩步:第一步是將磁碟分為由一個或多個柱面組成的分割槽,每個分割槽可以作為一個獨立的磁碟;在分割槽之後,第二步是 邏輯格式化(建立檔案系統),在這一步,作業系統將初始的檔案系統資料結構儲存在磁碟上,這些資料結構包括空閒和已分配的空間和一個初始為空的目錄

△☼▽

在這裡插入圖片描述

分析:C,磁碟儲存器的最小讀寫單位為一個扇區,即磁碟按塊存取;根據上述理論,易知磁碟格式化容量比非格式化容量要小,故 B)選項是正確的

【檔案刪除】

刪除檔案時,存放檔案的盤塊常常返回到空閒盤塊鏈,有些系統同時清除盤塊中的內容,而另一些系統則不清除,下面對這兩種方式從效能、安全性、方便性三個角度進行比較

效能方面:因為後一種方式在刪除檔案時減少了訪問磁碟的次數,故其速度比前一種方式更快

安全性方面:把一個內容沒有被清除的磁碟分配給下一個使用者使用,則有可能使其獲得盤塊中的內容,故前一種方式更加安全

方便性方面:如果盤塊中的內容沒有被清除,則當使用者因誤操作而刪除檔案時,有可能通過某種辦法恢復被刪除的檔案,故後一種方式更為方便

【硬連結/軟連結】

1)硬連結

目錄項中只有檔名和指向索引節點的指標,兩個不同的目錄項只需要指向相同的索引節點即可實現共享,即一個共享檔案只有一個索引節點

在這裡插入圖片描述
在索引節點中再增加一個計數值來統計指向該索引節點的目錄項的個數,這樣一來就需要在刪除檔案時先判斷計數值

這種方法能夠實現檔案的異名共享,但當檔案被多個使用者共享時,檔案擁有者不能刪除檔案

△☼▽

在這裡插入圖片描述

分析:B,兩個程式 各自維護自己的檔案描述符,故 Ⅰ. 錯誤

2)軟連結

該方是建立一個稱為連結的新的目錄項,在新目錄項中包含了被共享檔案的路徑名,可以是絕對路徑或者相對路徑。當需要訪問一個檔案時,就搜尋目錄表,如果目錄項標記為連結,那麼就可以獲得真正檔案的名稱,再搜尋目錄。在利用符號鏈方式實現檔案共享時,只有穩健擁有者才能擁有指向其索引節點的指標,而共享該檔案的其他使用者只有該檔案的路徑名,並不擁有指向其索引節點的指標。當檔案擁有者把一個共享檔案刪除後,其他使用者試圖通過符號鏈去訪問一個已被刪除的共享檔案時,會因系統找不到該檔案而使訪問失敗,於是再將符號鏈刪除,此時不會產生任何影響。符號鏈方式有一個很大的優點,就是它能夠用於連結(通過計算機網路)世界上任何地方的計算機中的檔案

3)關於引用的問題

建立符號連結時,引用計數值直接複製;建立硬連結時,引用計數加 1;刪除檔案時,刪除操作對於符號連結時不可見的,但硬連結需要先判斷引用值是否為 0

【檔案外存分配方式】

在該小點處只總結了三種分配方式分別適合於什麼要求的檔案,而不具體討論三種分配方式,三種分配方式的詳細內容在下面其後的各小點中依次給出

1)連續分配

視訊檔案屬於有結構檔案中的定長記錄檔案,適合用連續分配來組織,連續分配的優點主要有順序訪問容易、順序訪問速度快等。為了實現快速隨機播放,要保證最短的查詢時間,不宜選取鏈式和索引結構

△☼▽

在這裡插入圖片描述

分析:A,理論如上所述

2)索引分配

△☼▽

在這裡插入圖片描述

分析:B,只有索引結構既具有隨機存取功能,又能滿足檔案大小不固定的要求(即動態增長)

△☼▽

在這裡插入圖片描述

分析:B,理由如上題所述

3)三者比較

連續分配具有隨機存取功能,但不便於檔案長度的動態增長,且可能會出現外部碎片。連結分配便於檔案長度的動態增長,但不具有隨機存取功能。索引分配既具有隨機存取功能,也便於檔案長度動態增長

適合隨機存取的程度總結為:連續分配 > 索引分配 > 連結分配

△☼▽

在這裡插入圖片描述

分析:D,理論如上所述

【連續分配】

連續分配方式保證了邏輯檔案的記錄順序與儲存器中檔案佔用盤塊的順序一致。但其容易產生碎片,需要定期進行儲存空間的緊縮。顯然,連續分配方式不適合檔案隨時間動態增長和減少的情況,也不適合使用者事先不知道檔案大小的情況

△☼▽

在這裡插入圖片描述

分析:
(1)4TB/1KB = 232,塊號佔 32 位,即 4B,因此索引表項中塊號至少佔 4B;每個索引區有 512B/4B = 128 個索引項,故單個檔案最大長度為 128KB

(2)剩餘的 504 位元組可表示 504B/6B = 84 個索引項,由於是直接索引,故這部分能表示的大小為 84KB;再看前 8 位元組,起始塊號的 6B 對單個檔案的長度沒有任何影響,剩下的 2B(16 位) 表示塊數,可表示 216 個塊,即可表示 216KB 大小的空間,故單個檔案的最大長度為 (216+84)KB

4TB 的空間有 32 個磁碟塊,僅需要 4B 即可表示所有的磁碟塊,於是,若要使單個檔案的長度達到最大,可以擴大 8 位元組中表示快塊數所佔的位元組數,故取起始塊號佔 4B,塊數佔 4B,這樣單個檔案的最大長度為 (232+84)KB

【連結分配】

1)隱式連結

連結物理塊的指標隱式地放在每個物理塊中,目錄項中有指向索引順序檔案的第一塊盤塊和最後一塊盤塊,此外每個盤塊都含有指向下一個盤塊的指標(這裡在計算檔案大小時需要注意盤塊大小減去指標大小,指標大小反應了最大可定址的盤塊數)。若要訪問某一個盤塊,需要從第一個盤塊開始一個個盤塊都讀出指標來(這裡注意,如果存在插入某個中間塊時需要一個個地找到插入位置的前一個塊,然後讀出該塊,修改其下地址欄位並將其存回,再存回新額記錄塊),所以存在隨機訪問效率低下的問題;由於其中任何一個盤塊的指標錯誤都會導致後面盤塊位置的丟失,因此可靠性較差

在這裡插入圖片描述

由下面一道題來解釋一下上述兩個括號內的內容:

△☼▽

在這裡插入圖片描述

分析:
假設邏輯地址為 L,邏輯塊號為 n,首先根據邏輯檔案的檔名找到目錄表中該檔案對應的目錄項,找出第一個索引塊的地址 d1,若 n < 511,取出第一個索引塊第 n 項的值,即為查詢邏輯塊號所對應的物理塊號 W;如果 n ≥ 511,得到第二個索引塊的地址 d2,令 n = n-511,若此時 n ≥ 511,則繼續得第三個索引塊的地址 d3,依次類推,直到 n < 511 時,取出第 i 個索引塊第 n 項的值,即為查詢邏輯塊號所對應的物理塊號 W

△☼▽

在這裡插入圖片描述

分析:
(1)系統採用順序分配方式時,插入記錄需要移動其他的記錄塊,且注意檔案 F 放入儲存區前後均有足夠的空閒磁碟空間,要求最少的訪問儲存塊數,則把前 29 條記錄前移,若算訪盤次數移動一條記錄讀出和存回各是一次訪盤,29 條記錄前移需要訪盤 58 次,存回第 30 條記錄訪盤 1 次,故一共訪盤 59 次
(2)檔案系統採用連結分配方式時,插入記錄並不用移動其他記錄,只需找到相應的記錄,修改指標即可。插入的記錄為其第 30 條記錄,那麼需要找到檔案系統的第 29 塊,一共需要訪盤 29 次,然後把第 29 塊的下塊地址部分賦給新塊,把新塊存回會訪盤 1 次,然後在記憶體中修改第 29 塊的下塊地址欄位,再存回磁碟,一共訪盤 31 次。4 個位元組共 32 位,可以定址 232 = 4G 塊儲存塊,每塊的大小為 1KB,即 1024B,其中下塊地址部分佔 4B,資料部分佔 1020B,那麼該系統的檔案最大長度是 4G×1020B=4080GB

2)顯示連結

用於連結物理塊的指標顯示存放在記憶體的一張連結串列中,每個磁碟設定一張連結表,該表稱為檔案分配表(FAT),由於還是連結方式,因此在 FAT 中找一個記錄的對應物理塊地址時還是需要一個個找下去,不能隨機查詢,但是與隱式連結相比,該方法是在記憶體中而非在磁碟中查詢,所以能節省不少時間

在這裡插入圖片描述
注意:從上圖可知,FAT 採用的是靜態連結串列

△☼▽ 我們從下面這道真題來好好分析一下關於顯示連結的點

在這裡插入圖片描述

分析:
(1) 由目錄檔案的每個目錄項包括檔名和檔案的第一個簇號可知,dir 目錄和 dir1 目錄檔案的內容如下:

在這裡插入圖片描述
(2)2B = 16bit,因此 FAT表中最多允許有 216 個表項,故 FAT 的最大長度為 216×2B=128KB,該檔案系統支援的檔案最大長度為 216×4B=256MB
(3)在 FAT 的每個表項中存放下一個簇號(採用靜態連結串列),故 file1 的簇號存放在 FAT 的100 號表項中,簇號 108 存放在 FAT 的106 號表項中
(4)先在 dir 目錄檔案裡找到 dir1 的簇號,然後讀取 48 號簇,得 dir1 目錄檔案,接著找到 file1 的第一個簇號,據此在 FAT 裡查詢 file1 的第 5000 個位元組(5000>1024×4),最後訪問磁碟中的該簇,(解釋一點:我們知道第 5000 個位元組在檔案儲存的第二個簇中,但是我們需要先確定檔案儲存的起始簇號,然後才能通過 FAT 表確定第二個簇所對應的簇號,而 FAT 和 dir 目錄檔案都已讀入記憶體)故在此過程中需要訪問 48 號和 106 號簇

【FAT技術】

在 FAT 中引入了卷的概念,支援將一個物理磁碟分成四個邏輯磁碟,每個邏輯磁碟就是一個卷(也稱為分割槽),也就是說每個卷都是一個能夠被單獨格式化和使用的邏輯單元,供檔案系統分配空間時使用

一個卷中包含了檔案系統資訊、一組檔案以及空閒空間。每個卷都專門劃出一個單獨區域來存放自己的目錄和 FAT 表,以及自己的邏輯驅動器字母,如 C: 、D:等。需要指出的是,在現代 OS 中,一個物理磁碟可以劃分為多個卷,一個卷也可以由多個物理磁碟組成

(通過上面一段的描述,很容易理解 19 年真題中有一道題指出 FAT 也屬於檔案系統管理空閒磁碟塊的資料結構)

1)早期的 FAT12

FAT12 以盤塊為基本分配單位,其基本概念如顯示連結中所描述,對於其效能的分析可參考下面 [檔案磁碟的分塊] 知識點中的的描述

2)以簇為單位的 FAT12 檔案系統

由於 FAT12 不能適應磁碟容量的快速增長,而出現了以簇為單位的 FAT12 檔案系統(詳細描述仍參考下面 [檔案磁碟的分塊] 知識點)

3)FAT16

FAT12 對磁碟容量限制的原因在於,FAT12 表中的表項有限制,隨著磁碟容量的增加,必定會引起簇的大小隨之增加,進一步導致簇內碎片增加。為了適應更大容量的磁碟,便要想增加 FAT 表中的表項數,就必須增加 FAT 表的位數(寬度)。於是,就出現了 FAT16,此時最大表項數將增至 216 = 65536 個。當要求磁碟分割槽的大小為 8GB 時,則每個簇的大小達到 8GB/216 = 128KB,同時這也意味著內部零頭最大可達到 128KB

4)FAT32

FAT16 存在的問題就是簇內碎片導致的空間浪費,為了解決這一問題,又出現了 FAT32,由於 FAT32 能支援更小的簇,使之具有更高的儲存器利用率。同時,FAT32 支援長檔名,能夠有效地節省硬碟空間

但是 FAT32 也有一定的不足之處:

  • 由於檔案分配表的擴大,執行速度比 FAT16 格式要慢
  • FAT 32 限制最小的管理空間,即一個卷必須至少有 65537 = 65536+1 個簇,因此對於小分割槽,則仍然需要使用 FAT16 或 FAT12
  • FAT32 的單個檔案長度頁不能大於 4GB
  • FAT32 最大的限制在於相容性方面,FAT32 不能保持向下相容

【檔案磁碟塊的分配】

絕大多數作業系統為改善磁碟訪問時間,以簇為單位 進行空間分配

下面來解釋為什麼:

假設每個 FAT 表項為 12 位,因此,在 FAT 表中最多允許 212 = 4096 個表項,如果採用以盤塊作為基本分配單位,每個盤塊(也稱扇區)的大小一般為 512B,那麼,每個磁碟分割槽的容量為 212×29B = 2MB,一個物理磁碟能支援 4 個邏輯分割槽,所以相應的磁碟最大容量僅為 8MB,這對早期的硬碟還可以應付,但很快磁碟的容量就不只 8MB 了

在不對 FAT 作出改進的情況下,如果把每個盤塊(扇區)的容量增大 n 倍,則磁碟的最大容量便可以增加 n 倍。於是就引入了以簇為新分配單位的概念,簇即一組相鄰的扇區,在 FAT 中它是作為一個虛擬扇區,在實際運用中,簇的容量可以僅有一個扇區、兩個扇區、四個扇區等

以簇作為基本分配單位的好處是,能使用磁碟容量不斷增大的情況,還可以減少 FAT 表中的項數(在相同的磁碟容量下,FAT 表的項數與簇的大小成反比),使 FAT 表佔用更少的儲存空間,並減少訪問 FAT 表的存取開銷。但是,以簇為基本分配單位同樣存在一定的問題,即會造成更大的簇內零頭(如下例題所示)

△☼▽

在這裡插入圖片描述

分析:D,1026=1024+2,故需要 2 個簇

【索引分配】

在索引分配方式中,系統為每個檔案分配一個索引塊,索引塊中存放索引表,索引表中的每個表項對應分配給該檔案的一個物理塊

索引分配方式不僅支援直接訪問,而且不會產生外部碎片,檔案長度受限制的問題也得到了解決。其缺點是由於索引塊的分配,增加了系統儲存空間的開銷。另外,存取檔案需要兩次訪問外存——首先讀取索引塊的內容,其次再訪問具體的磁碟塊,因而降低了檔案的存取速度。為了更有效地使用索引表,避免訪問索引檔案時兩次訪問外存,可以在訪問檔案時先將索引表調入記憶體中,這樣,檔案的存取就只需要訪問一次外存了

△☼▽

在這裡插入圖片描述

分析:A,一個檔案對應一個索引節點,索引結點的總數只能說明有多少個檔案,跟單個檔案的長度沒有關係

△☼▽

在這裡插入圖片描述

分析:B
對 A,索引表每個記錄的索引項只有一個,故錯誤;
對 B,對索引檔案進行存取時,需要檢索索引表,找到相應的表項,再利用該表項中給出的指向記錄的指標值取訪問所需的記錄,故正確
對 C,對主檔案的每個記錄,在索引表中都設有一個相應的表項,用於記錄該記錄的長度 L 及指向該記錄的指標(指向該記錄在邏輯地址空間的首地址),故錯誤
對 D,由於使用了索引表而增加了儲存空間的開銷,因此不會減少儲存空間,而會增加儲存開銷,故錯誤

1)單級索引分配

建立一個索引塊,其盤塊號為 19,則在目錄檔案中該表項的塊序號為 19,並在 19 號盤塊中建立其分配盤塊號的索引。下圖中表示 test 檔案分配的第 1 個盤塊號為 9,第二個盤塊號為 16,以此類推,-1 表示結束

在這裡插入圖片描述

△☼▽

在這裡插入圖片描述

分析:B,單級索引的索引塊駐留記憶體,所有資料塊的指標都在記憶體中,只需在記憶體中重排列這些指標間的位置即可

對 A,連續分配中每個資料塊的訪問都是用塊號定址的,其調整過程類似陣列,將最後一塊先讀入記憶體,再把倒數第二塊放入最後一塊地,以此類推,故需要多次磁碟 I/O 操作

對 C、D,隱式連結中,連線分配的指標存放在資料塊的末尾,即在外存中,故必然需要去磁碟中找到目標塊然後才能作出相應的調整

2)二級索引分配

△☼▽

在這裡插入圖片描述

分析:A,每個磁碟塊中最多有 1KB/4B = 28 個索引項,故單個檔案最大長度為 28×28×1KB

3)混合索引分配

在這裡插入圖片描述
可能涉及的問題:

  1. 關於單個檔案最大長度的計算
  2. 尋找某個記錄的訪盤次數

△☼▽

在這裡插入圖片描述

分析:B,直接索引的資料塊大小為 10KB = 10240B( > 1234),故前者只需要一個訪盤;每個磁碟可存放 1KB/4B = 28 個指標,故一級索引的資料塊大小為 28×1KB = 256KB = 262144B,顯然 307400 > 10240+262144,故會用到二級索引,於是,後者需要三次訪盤

在這裡插入圖片描述

分析:
(1)每個地址項佔 4B,一個簇有 4KB/4B = 1K 個地址項,故該系統支援的最大檔案長度為 (8+1024+10242+10243)×4KB
(2)檔案索引節點的個數為 1MB×4KB/64B = 64M,5600B 的檔案佔用 2 個簇,512M 個簇可以存放 512M/2 = 256M 個影像檔案,而可表示的檔案總個數受限制與檔案索引節點個數,故最多能存放 64M 個影像檔案
(3)F1 的檔案大小為 6KB(< 8×4KB),故獲取 F1 檔案的最後一個簇的簇號僅需要訪問索引節點的直接地址項;F2 的檔案大小為 40 KB(8×4KB < 40KB < 1024×4KB),故獲取 F2 檔案的最後一個簇的簇號需要讀一級索引表,故兩者的時間不相同

△☼▽

在這裡插入圖片描述

分析:
(1)10×4KB = 40KB,檔案大小小於或等於 40KB 時,可以只用到索引節點的直接塊
(2)一個盤塊可以有 4KB/4B = 210 個指標,於是一級索引有 210×4KB = 4MB,二級索引有 220×4KB = 4GB,三級索引有 230×4KB = 4TB,故該索引接地點能訪問到的地址空間的大小總共為 40KB+4MB+4GB+4TB
(3)10000 < 40×1024,故第 10000B 的內容在直接塊中,故訪問磁碟 1 次
(4)4MB < 10MB < 4GB,會用到二級索引,故訪問磁碟 3 次

△☼▽

在這裡插入圖片描述

分析:
(1)檔案最大長度為 (10+170+1702+1703)×512B
(2)5000 = 512×9+392,對應邏輯塊號 9,故直接從該檔案的 FCB 的第 9 個地址項處得到物理盤塊號,塊內偏移 392B;15000 = 512×29+152,對應邏輯塊號為 29(< 170+10),故從 FCB 的第 10 個地址項,即一次間接地址項中得到一次間接地址塊的地址,並從一次間接地址塊的第 19 項(同樣從第 0 項數起)中獲得對應的物理塊號,塊內偏移為 152;150000 = 512×292+496,對應邏輯塊號為 292(< 1702+10),故可以從 FCB 的第 11 個地址項,即二次間接地址項中得到二次間接地址塊的地址,292-170-10 = 112(< 170),並從二次間接地址塊的第 0 項中獲得一個一次間接地址塊的地址,再從該一次間接地址塊的第 112 項中獲得對應的物理盤塊號,塊內偏移為 496
(3)最少需要訪問磁碟 1 次,即通過直接地址直接讀檔案盤塊;最多需要訪問磁碟 4 次,即通過三次間接地址尋找檔案

在這裡插入圖片描述
在這裡插入圖片描述

分析:
(1)一個盤塊可有 512/2 = 256 個地址項,故一個普通檔案最多可有 10+256+2562+2563 = 16843018 頁
(2)先找到檔案 J,將其檔案控制塊讀入記憶體要訪問磁碟 3 次,若 J 中某一頁需要三級索引才能找出,那麼最多訪問磁碟 7 次
(3)找到檔案 W 再將其檔案控制塊讀入記憶體要訪問磁碟 5 次,若 W 中某一頁只用到直接塊,那麼最少訪問磁碟 6 次
(4)為了減少啟動磁碟次數,可以將需要訪問的 W 檔案掛在根目錄項中,此時只需要訪問磁碟 1 次即可將 W 檔案的檔案控制塊讀入記憶體,此時若 W 中某一頁需要三級索引則最多需訪問磁碟 5 次

△☼▽

在這裡插入圖片描述

分析:

【三種外存分配方式查詢過程總結】

△☼▽

在這裡插入圖片描述

分析:3500 = 1024×3+428,故邏輯塊號為 3,塊內偏移為 428

(1)在連續分配中,可從相應檔案的 FCB 中得到分配給該檔案的起始物理量盤塊號,例如 a0,故 3500 對應的物理塊號為 a0+3,塊內偏移為 428

(2)在隱式連結中,由於由於每個盤塊需要留出 4B 來存放分配給檔案的下一個盤塊號,故 3500 = 1020×3+440,於是從相應檔案的 FCB 中可獲得分配給該檔案的首個(第 0 個)盤塊的塊號,假設為 b0,然後可以通過讀 b0 塊獲得分配給檔案的第 1 個盤塊的塊號 b1,以此類推,得 b3,故 3500 對應的物理塊號為 b3,塊內偏移為 440

(3)在顯示連結中, 可從檔案的 FCB 中得到分配給檔案的首個(第 0 個)盤塊的塊號,如 c0,然後再 FAT 的第 c0 項中找到分配給檔案的第 1 個盤塊的塊號 c1,如此找到第 3 個盤塊的塊號 c3,故 3500 對應的物理塊號為 c3,塊內偏移為 428

(4)在索引分配中,可從檔案的 FCB 中得到索引表的地址,從索引表中的第 3 項(從第 0 項開始數起)獲得位元組偏移量為 3500 對應的物理塊號,而塊內偏移為 428

【檔案儲存空間管理】

△☼▽

在這裡插入圖片描述

分析:B,Ⅰ、Ⅱ、Ⅲ 很容易判斷;說下 Ⅳ,檔案分配表(FAT)的表項與物理磁碟塊一一對應,並且可以用一個特殊的數字 − 1 -1 1 表示檔案的最後一塊,用 − 2 -2 2 表示這個磁碟塊是空閒的(當然,規定用 − 3 , − 4 -3,-4 3,4 來表示也是可行的)。因此,FAT 不僅記錄了檔案中各個塊的先後連結關係,同時還標記了空閒的磁碟塊,作業系統可以通過 FAT 對檔案儲存空間進行管理,故 Ⅳ 正確

1)空閒檔案表

2)空閒連結串列法

3)位示圖的問題

△☼▽

在這裡插入圖片描述

分析:C,409612 = 1024×8×50+12,那麼要修改的位在第 51 個盤塊中的第 2 個位元組,由於盤塊和塊內位元組均是從 0 開始編號,故所在的盤塊號為 51+32-1 = 82,所在的塊內位元組號為 1

△☼▽

在這裡插入圖片描述

分析:C,由下圖可知,塊號 100 對應的位置為 字號為 3,位號為 4

在這裡插入圖片描述

△☼▽

在這裡插入圖片描述

分析:A,10GB 的磁碟分割槽有 10GB/4KB = 2.5×220 個簇,每個簇在位示圖中佔用 1bit,故存放該位示圖需要 (2.5×220×1bit/8)/4KB = 80

4)成組連結法(UNIX 的檔案儲存空間管理方法)

【與檔案系統相關的函式】

1)open函式、read 函式

read 系統呼叫通過陷入將 CPU 從用使用者態切換到核心態,從而獲取作業系統提供的服務。要讀一個檔案,首先要用 open 系統呼叫開啟該檔案,open 中的引數包含檔案的路徑名與檔名,而 read 只需要使用 open 返回的檔案描述符,並不使用檔名作為引數。read 要求使用者提供三個輸入引數:① 檔案描述符 fd,② buf 緩衝區首址,③ 傳送的位元組數 n;read 的功能是試圖從 fd 所指的檔案中讀入 n 個位元組的資料,並將它們送至指標 buf 所指的緩衝區

△☼▽

在這裡插入圖片描述

分析:A,當使用者程式讀取磁碟的檔案資料不在記憶體時,轉向中斷處理,導致 CPU 從使用者態切換到核心態,此時該程式進入睡眠等待狀態(即阻塞套),故ⅠⅡ 正確;根據上述描述,Ⅲ 錯誤

2)close 函式

△☼▽

在這裡插入圖片描述

分析:A,close() 操作是銷燬這個檔案在記憶體中的目錄項,而檔案還是儲存在外存上,不可能被丟棄;另外,對 D 選項,目錄也是檔案,也要先開啟後使用

【磁碟排程】

1)SCAN

走到邊再掉頭反方向走,對兩端磁軌請求比較不公平

△☼▽

在這裡插入圖片描述

分析:C,根據 SCAN 排程方法 ,訪問順序為 58→130→180→199→42→15,移動過的磁軌數為 (199-58)+(199-15) = 325

△☼▽

在這裡插入圖片描述

分析:
(1)先來先服務演算法:20→10→22→2→40→6→38,總尋道時間為 (10+12+20+38+34+32)×6ms = 876ms
(2)電梯演算法:20→22→38→40→10→6→2,總尋道時間為 (40-20+40-2)×6ms = 348ms

2)C-SCAN

走到邊立即回到中心按照原來方向繼續走

3)磁臂黏著現象

系統總是訪問磁碟的某個磁軌而不響應對其他磁軌的訪問請求,這種現象稱為磁臂黏著

當系統總是持續出現某個磁軌的訪問請求時,均持續滿足最短尋道時間優先、掃描演算法和迴圈掃描演算法的訪問條件時,會一直服務該訪問請求。因此,只有先來先服務按照請求次序進行排程比較公平

5 裝置管理

【程式直接控制方式】

在早期的計算機系統中,沒有中斷系統,所以 CPU 和 I/O 裝置進行通訊、傳輸資料時,由於 CPU 的速度遠遠快於 I/O 裝置,因此 CPU 需要不斷地測試 I/O 裝置。這種控制方式又稱為輪詢忙等

△☼▽

在這裡插入圖片描述

分析:B,忙等 I/O 方式就是當 CPU 等待 I/O 操作完成時,程式不能繼續執行

△☼▽

在這裡插入圖片描述

分析:序列線接收資料的最大速率為 50000B/s,即每 20us 接收 1B,而輪詢例程需 3us 來執行,則最大安全輪詢時間間隔為 17us

在這裡插入圖片描述

【中斷控制方式】

△☼▽

在這裡插入圖片描述

分析:每秒可傳送 (56×103bit)/10bit = 5600 個字元,即要發生 5600 次中斷,每次中斷需要 0.1ms,故處理調製器而佔用 CPU 的時間為 5600×0.1ms = 560ms,比率為 560/1000×100% = 56%

△☼▽

在這裡插入圖片描述

分析:時鐘週期為 1/60 s,用於中斷處理的時間為 2ms,故時間比率為 0.002ms/(1/60)×100% = 12%

【DMA 控制方式】

DMA 寫入資料過程

當使用者程式需要資料時,CPU 將準備存放輸入資料的記憶體起始地址以及要傳送的位元組數分別送入 DMA 控制器中的記憶體地址暫存器和傳送位元組計數器中,並啟動裝置開始進行資料輸入。在輸入資料的同時,CPU 可以去做其他的事情。輸入裝置不斷地挪用 CPU 工作週期,將資料暫存器中的資料來源源不斷地寫入記憶體,直到要求傳送的資料全部傳輸完畢。DMA 控制器在傳輸完畢時向 CPU 傳送一箇中斷訊號,CPU 收到中斷訊號後轉中斷處理程式執行,中斷結束後返回被中斷程式

(如,初始化 DMA 控制器並啟動磁碟 → \rightarrow 從磁碟傳輸一塊資料到記憶體緩衝區 → \rightarrow DMA 控制器發出中斷請求 → \rightarrow 執行 DMA 結束中斷服務程式)

中斷控制方式和 DMA 控制方式的主要區別:

中斷驅動 I/O 控制方式是每個資料傳輸後即發出中斷,而 DMA 方式是在一批資料傳輸完畢後才發生中斷。中斷驅動 I/O 控制方式的傳輸是由CPU控制的,而 DMA 方式中只有資料塊傳輸的開始和結束階段在 CPU 控制下,在傳輸過程中都是由 DMA 控制器控制的。所以,DMA 方式相比於中斷方式,通過硬體的增加大大減少了中斷的次數

△☼▽

在這裡插入圖片描述

分析:DMA 的傳輸速率為 40MB/s,也就是平均每 100ns 傳送 32bit 的資料就能達到 DMA 的傳輸要求。由於系統匯流排被 CPU 和 DMA 共用,因此要在 DMA 傳輸資料時暫停 CPU 對匯流排的使用。CPU 在對匯流排完全佔用的情況下,每 10ns 可傳輸 32 bit 的指令,於是,平均每 10 個時鐘週期內,只需挪用一個週期來傳輸資料就能達到 DMA 的傳輸要求。因此,DMA 挪用週期的頻率是每 10 個週期挪用一個,因此磁碟控制器使命令的執行速度降低了 10%

【SPOOLing】

獨佔裝置在一段時間內只能用一個使用者使用,使許多程式因等待而阻塞,影響了整個系統的效率。另一方面,分配到獨佔裝置的程式在整個執行期間並非持續使用,裝置利用率較低。SPOOLing 技術通過共享裝置來虛擬獨佔裝置,將獨佔裝置改造成共享裝置,從而提高裝置利用率和系統的效率。

採用 SPOOLing 技術,可以預先從低速的輸入型獨佔裝置上將程式執行需要的資料傳送到磁碟上的輸入井中,當使用者程式執行時,可以直接從輸入井中將資料讀入記憶體。由於磁碟是共享裝置,多個使用者程式可以共享使用輸入井,這樣就將輸入型獨佔裝置改造成了可共享使用的虛擬裝置

幾點細節上的問題:

  1. 無論有沒有通道,SPOOLing 系統都可以執行,因此,SPOOLing 系統利用了處理器與通道並行工作的能力的說法是錯誤的
  2. SPOOLing 技術需要多道程式設計技術的支援
  3. 裝置與輸入/輸出井之間的資料的傳送是由系統實現的,而不是使用者作業
  4. SPOOLing 系統中代替獨佔裝置的部分是共享裝置

△☼▽

在這裡插入圖片描述

分析:

在這裡插入圖片描述
當磁碟上輸入資料總塊數 i = m a x i=max i=max 時,那麼磁碟上輸出資料塊總數 o o o 必為零。此時程式 I 發現輸入緩衝區已滿,所以不能再把輸入資料緩衝區中,程式 P 此時有一個處理好了的資料,欲把結果資料放入緩衝區,但是發現沒有空閒空間可以使用, o = 0 o=0 o=0,沒有輸出資料可以輸出,故程式 O 頁無事可做,此時三個程式都將處於等待狀態,出現死鎖

可將條件改為 i + o ⩽ m a x , i < m a x i+o\leqslant max, i < max i+omax,i<max,這樣即不會發生死鎖

【裝置管理中的資料結構】

裝置控制表(DCT)、裝置控制器控制表(COCT)、通道控制表(CHCT)和系統裝置表(SDT)

【緩衝技術】

1)緩衝的引入

  • 緩衝區的引入主要是緩和了 CPU 與裝置速度不匹配的矛盾,提高了裝置和 CPU 的並行程度
  • 此外,引入緩衝後可以降低裝置對 CPU 的中斷頻率,放寬對中斷響應時間的限制
  • 緩衝技術的緩衝池通常設立在記憶體/主存中

△☼▽

在這裡插入圖片描述

分析:B,緩衝區主要是解決因輸入/輸出速度比 CPU 處理速度慢而造成的資料積壓的矛盾,因此,若 I/O 所花費的時間比 CPU 處理時間段很多,則沒有必要設定緩衝區

2)緩衝的分類

△☼▽

在這裡插入圖片描述

分析:B,在單緩衝的情況下,當上一個磁碟塊從緩衝區讀入使用者區完成時,下一個磁碟塊才能開始讀入緩衝區,故總時間為 150us×10+50us = 1550us;在雙緩衝下,讀入第一緩衝區之後可以立即開始讀入第二個緩衝區,故總時間為 100us×10+100us = 1100us

在這裡插入圖片描述

△☼▽

在這裡插入圖片描述

分析:C,總時間為 105+105+90 = 300

在這裡插入圖片描述

△☼▽

在這裡插入圖片描述

分析:單緩衝情況下,系統對一塊資料的處理時間為 m a x ( T , C ) + M max(T,C)+M max(T,C)+M;雙緩衝情況下,系統對一塊資料的處理時間為 m a x ( T , M + C ) max(T,M+C) max(T,M+C)

在這裡插入圖片描述

3)快取記憶體與緩衝區

【I/O 交通管制程式】

對外設的控制常分為裝置、控制器和通道 3 個層次,所以 I/O 交通管制程式的主要功能是管理這 3 個層次的狀態資訊

【提高單機資源利用率的關鍵技術】

在單機系統中最關鍵的資源就是處理器資源,因此最大化提高處理器利用率就是最大化提高系統效率。多道程式設計技術是提高處理器利用率的關鍵技術,而 SPOOLing 技術、虛擬技術和交換技術等是裝置和記憶體的相關技術

【裝置驅動程式】

裝置驅動程式的底層部分在發生中斷時呼叫,以進行中斷處理。由於驅動程式與硬體密切相關,因而其中的一部分必須用匯編語言書寫(注意不是全部),其他部分則可以用高階語言來書寫。我們說,所有與裝置相關的程式碼都放在裝置驅動程式中,所以,磁碟的排程程式是在裝置驅動程式中執行的。另外,裝置驅動程式是按類配置的

裝置驅動程式的處理過程:① 將抽象要求轉換為具體要求;② 檢查 I/O 請求的合法性;③ 讀出和檢查裝置的狀態;④ 傳送必要引數;⑤ 工作方式的設定;⑥ 啟動 I/O 裝置。將磁碟塊號轉換為磁碟的盤面,磁軌號及扇區號,屬於 ①,因此是裝置驅動程式的功能

【I/O 軟體層次結構】

在這裡插入圖片描述
與裝置無關的軟體層也就是系統呼叫的處理程式

【管道】

管道實際上是一種固定大小的緩衝區,管道對於管道兩端的程式而言,就是一個檔案,但它不是普通的檔案,它不屬於某種檔案系統,而是自立門戶,單獨構成一種檔案系統,並且只存在於記憶體中。它類似於通訊中半雙工通道的程式通訊機制,一個管道可以實現雙向的資料傳輸,而同一個時刻只能最多有一個方向的傳輸,不能兩個方向同時進行。管道的容量大小通常為記憶體上的一頁,它的大小並不是受磁碟容量大小的限制。當管道滿時,程式寫管道會被阻塞,而當管道空時,程式讀管道會被阻塞

【一堆有關中斷的概念】

中斷遮蔽:中斷請求能否參加判優,需根據遮蔽字的狀態決定,若某遮蔽為 1,其對應的請求無效,不可參加判優

開中斷:當允許中斷標誌為 1 時,表明現行程式的優先順序低於所有中斷請求的優先順序,一旦出現中斷請求,CPU 便能響應

陷入:系統呼叫引發的事件

中斷響應:對中斷請求的整個處理過程是由硬體和軟體結合起來而形成的一套中斷機構實施的。發生中斷時,CPU 暫停執行當前的程式,而轉去處理中斷,該過程由硬體對中斷請求作出反應

中斷:CPU 對系統發生的某個事件做出的一種反應,即 CPU 暫停正在執行的程式,保留現場後自動地轉去執行相應的處理程式,處理完該事件後再返回斷點,繼續執行被打斷的程式

軟中斷:利用硬體中斷的概念,用軟體方式進行模擬,實現巨集觀上的非同步執行效果

中斷處理:大致分為 4 個階段:儲存被中斷程式的現場,分析中斷原因,轉入相應處理程式進行處理,恢復被中斷程式的現場

關中斷:為保證在中斷週期中指令操作的執行不受外部干擾,將允許中斷標誌位清 0,即表明現行程式的優先順序比所有請求的優先順序都高,任何請求都不響應

【裝置獨立性】

引入裝置獨立性可使應用程式獨立於具體的物理裝置。此時,使用者用邏輯裝置名來申請使用某類物理裝置,當系統中有多臺該型別的裝置時,系統可以將其中的一臺分配給請求程式,而不必侷限於某一臺指定的裝置,這樣可以顯著改善資源的利用率及可適應性。獨立性還可以使使用者程式獨立於裝置的型別,如進行輸出時,既可用顯示終端,也可以用印表機。有了這種適應性,就可以很方便的進行輸入/輸出重定向

為了實現裝置獨立性,必須在裝置驅動程式之上設定一層裝置獨立性軟體,用來執行所有 I/O 裝置的公用操作,並向使用者層軟體提供統一介面。關鍵是系統中必須設定一張邏輯裝置表(LUT)用來進行邏輯裝置到物理裝置的對映,其中每個表目中包含邏輯裝置名、物理裝置名和裝置驅動程式入口地址。當應用程式用邏輯裝置名請求分配 I/O 裝置時,系統必須為它分配相應的物理裝置,並在 LUT 中建立一個表目,以後程式利用該邏輯裝置名請求 I/O 操作時,便可從 LUT 中得到物理裝置名和驅動程式入口地址

【中斷控制方式輸入請求 I/O 處理的詳細過程】

在使用中斷控制方式的系統中,執行輸入請求的處理過程如下:

1)應用程式請求讀操作
2)裝置啟動程式(裝置驅動程式的高層部分)查詢裝置控制器的狀態暫存器,確定裝置是否空閒。若裝置忙,則裝置啟動程式等待,直到變為空閒為止
3)裝置啟動程式把輸入命令存入裝置控制器的命令暫存器中,從而啟動裝置
4)裝置啟動程式將相應資訊寫入到裝置控制表(DCT)的裝置對應表項中,如最初呼叫的返回地址以及 I/O 操作的一些特定引數等。然後,CPU 就可以分配給其他程式使用了,因此,裝置管理器呼叫程式管理器的排程程式執行,原程式的執行被暫停
5)經過一段時間後,裝置完成了 I/O 操作,裝置控制器發出中斷請求,中斷CPU 上執行的程式,從而引起 CPU 執行中斷處理程式
6)中斷處理程式確定是哪個裝置引起的中斷,然後轉移到該裝置對應的裝置處理程式(裝置驅動程式的低層部分)執行
7)裝置處理程式重新從裝置控制表(DCT)找到等待 I/O 操作的狀態資訊
8)裝置處理程式返回給應用程式控制權,從而繼續執行

在以上處理 I/O 操作的過程中,中斷處理程式和裝置處理程式兩者一起完成對中斷請求的處理。但兩者工作方式不同,前者必須關中斷執行或以高優先順序方式執行,後者可以開中斷執行或以低優先順序方式執行

相關文章