操作系统习题7—文件系统
操作系統習題7—文件系統
1、Unix 系統是如何實現文件共享的?
UNIX 系統支持在不同的進程間共享打開的文件。內核使用 3 種數據結構表示打開的文件,它們之間的關系決定了在文件共享方面一個進程對另一個進程可能產生的影響。
(1)每個進程在進程表中都有一個記錄項,記錄項中包含一張打開文件描述符表,可將其視為一個矢量,每個描述符占用一項。與每個文件描述符關聯的是:
- a.文件描述符標志
- b.指向一個文件表項的指針
(2)內核為多有打開文件維持一張文件表。每個文件表包含:
- a.文件狀態標志(讀、寫、添寫、同步和非阻塞等)
- b.當前文件偏移量
- c.指向該文件 v 節點表項的指針
(3)每個打開的文件或設備都有一個 v 節點(v-node)結構。v 節點包含了文件類型和此文件進行各種操作的函數指針。對于大多數文件,v 節點還包含了改文件的 i 節點(i-node,索引節點)。這些信息是在打開文件時從磁盤上讀入內存的,所以,文件的所有相關信息都是隨時可用的。例如,i 節點包含了文件的所有者、文件長度、指向文件實際數據塊在磁盤上所在的位置的指針等。
2、某文件系統為一級目錄結構,文件的數據一次性寫入磁盤,已寫入的文件不可修改,但可多次創建新文件。請回答如下問題。
(1)在連續、鏈式、索引三種文件的數據塊組織方式中,哪種更合適?要求說明理由。為定位文件數據塊,需在 FCB 中設計哪些相關描述字段?
①連續存儲將邏輯上連續的文件信息依次存放在編號連續的物理塊上。對文件記錄進行批量存取時,其存取效率較高。
②鏈接結構將邏輯上連續的文件信息存放在不連續的物理塊上,每個物理塊設有一個指針指向下一個物理塊。有利于文件插入和刪除,及其動態擴充。
③索引結構將邏輯上連續的文件信息(記錄)存放在不連續的物理塊中,系統為每個文件建立一個專用數據結構——索引表,索引表中存放文件的邏輯塊號和物理塊號的對應關系。滿足了文件動態增長、插入刪除的要求。
題目要求文件的數據一次性寫入磁盤,已寫入的文件不可修改,很顯然,連續存儲的方式更合適。因為一次性寫入不存在插入問題,連續的數據塊組織方式完全可以滿足一次性寫入磁盤。同時連續的組織方式減少了其他不必要的空間開銷,而且這種方式查找讀取文件的速度是最快的。
為了定位文件數據塊,需要在 FCB 中記錄文件初始地址和文件長度。
(2)為快速找到文件,對于 FCB,是集中存儲好,還是與對應的文件數據塊連續存儲好?要求說明理由。
為了快速找到文件,FCB 是集中存儲好。
因為目錄是存在磁盤上的,所以檢索目錄的時候需要訪問磁盤,速度很慢。集中存儲是將文件控制塊的一部分數據分解出去,存儲在另一個數據結構中,而在目錄中僅留下文件的基本信息和指向該數據結構的指針,這樣就有效地縮短了目錄的容量,減少了目錄在磁盤中的塊數,減少在檢索過程中產生的訪盤次數,提高檢索速度。
3、設文件 F1 的當前引用計數值為 1,先建立 F1 的符號鏈接(軟鏈接)文件 F2,再建立 F1 的硬鏈接文件 F3,然后刪除 F1。此時,F2 和 F3 的引用計數值分別是( )
| 0、1 | 1、1 | 1、2 | 2、1 |
答案選擇B。
為了使文件實現共享,通常在文件的索引節點中設置一個鏈接計數字段,用來表示鏈接到本文件的用戶目錄項的數目(引用計數值)。當新文件建立時,一般默認引用計數值為 1。
硬鏈接可以看作是已存在文件的另一個名字,新文件和被鏈接文件指向同一個節點,節點的引用計數值加 1。當刪除被鏈接文件時,只是把引用計數值減 1,直到引用計數值為 0 時,才能真正刪除文件。
軟鏈接又叫符號鏈接,在新文件中只包含了被鏈接文件的路徑名,新文件和被鏈接文件指向不同的節點。在這種方式下,當被鏈接文件刪除時,新文件仍然是存在的,只不過是不能通過新文件訪問被鏈接文件而己。之后當系統需要通過軟鏈接訪問但是順著這條軟鏈接無法訪問到被鏈接文件時,才將這個新文件刪除。
| 初始狀態 | 1 | - | - |
| F2軟鏈接到F1 | 1 | 1 | - |
| F3硬鏈接到F1 | 2 | 1 | 2 |
| 刪除F1 | - | 1 | 1 |
4、某個系統采用成組空閑塊鏈法管理磁盤的空閑空間,目前磁盤的狀態如下圖所示:
(1)該磁盤塊中目前還有多少個空閑塊
由圖可知,專用表還有 2 個空閑塊(299、300),300#塊還有 100 個空閑塊(301-400),400#塊還有 100 個空閑塊(401-500),500#塊還有 99 個空閑塊(501-599)。所以該磁盤塊中目前還有 301 個空閑塊。
(2)在為某個文件分配 3 個盤塊后,請畫出分配后的盤塊鏈接情況。
為某文件分配 3 個盤塊,先分配當前專用表中剩余的 2 個盤塊,再將棧底盤塊號所對應盤塊的內容讀入棧中,作為新的盤塊號棧的內容,分配一相應的緩沖區。然后將新的專用表分配出 1 個空閑盤塊,某文件需要的 3 個盤塊分配完畢。
(3)系統要刪除另一個文件,并回收它所占用的 4 個盤塊,它們的盤塊號依次為 700、711、703、701,請畫出回收后的盤塊鏈接情況。
回收的過程是從棧頂開始的,首先看 N=99,然后回收 700,會將 700 放在 S.free[N] 的位置,然后將 N 加 1 變成 100;
然后回收 711 號盤塊,因為此時空閑棧的 N=100,已經滿了,如果再回收,需要將空閑盤塊棧的內容移動到 711 號盤塊上,然后將空閑盤塊棧的 S.free[0] 設置為 711,N 設置為 1;
最后回收 703/701 也是同理。
總結
以上是生活随笔為你收集整理的操作系统习题7—文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统习题6—存储管理2
- 下一篇: 操作系统习题8—设备管理