日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统第四章-文件管理

發布時間:2025/4/5 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统第四章-文件管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面:本文參考王道論壇的 操作系統考研復習指導單科書

文章目錄

  • 第四章 文件管理
    • 4.1 內存管理概念
      • 4.1.1 文件的概念
      • 4.1.2 文件的邏輯結構
        • 1. 無結構文件(流式文件)
        • 2.有結構文件(記錄式文件)
      • 4.1.3 目錄結構
        • 1 文件控制塊和索引結點
        • 2 目錄結構
      • 4.1.4 文件共享
    • 4.2 文件系統實現
      • 4.2.1 文件系統層次結構
      • 4.2.2 目錄實現
        • 1.線性列表
        • 2. 哈希表
      • 4.2.3 文件實現
        • 1.文件分配方式
        • 2. 文件存儲空間管理
    • 4.3 磁盤組織與管理
      • 4.3.1 磁盤的結構
      • 4.3.2 磁盤調度算法
      • 4.3.3 磁盤的管理
    • 王道習題

第四章 文件管理

4.1 內存管理概念

4.1.1 文件的概念

4.1.2 文件的邏輯結構

文件的邏輯結構是從用戶觀點出發看到的文件的組織形式。文件的物理結構(又稱文件的存儲結構)是從實現觀點出發看到的文件在外存上的存儲組織形式。 文件的邏輯結構與存儲介質特性無關,但文件的物理結構與存儲介質的特性有很大關系。 文件的邏輯結構實際上是指在文件的內部,數據邏輯上是如何組織起來的。

按邏輯結構,文件可分為無結構文件和有結構文件兩種。

1. 無結構文件(流式文件)

無結構文件是最簡單的文件組織形式。無結構文件將數據按照順序組織成記錄并積累、保存,它是有序相關信息項的集合,以字節為單位。 由于無結構文件沒有結構,因而對記錄的訪問只能通過窮舉搜索的方式,因此這種文件對大多數應用并不適用。但字符流的無結構文件管理簡單,用戶可以方便地對其進行操作。所以,那些對基本信息單位操作不多的文件較適合采用字符流的無結構方式,如源程序文件、目標代碼文件等。

2.有結構文件(記錄式文件)

有結構文件按記錄的組織形式可以分為如下幾種:

1)順序文件。文件中的記錄一個接一個地順序排列,記錄通常是定長的,可以順序存儲或者以鏈表方式存儲,在訪問時需要順序搜索文件。 順序文件有以下兩種結構:
第一種是串結構,記錄之間的順序與關鍵字無關。 通常的辦法是由時間決定,即按存入時間的先后排列,最先存入的記錄作為第一條記錄,其次存入的作為第二條記錄,以此類推。

第二種是順序結構,指文件中的所有記錄按照關鍵字順序排列。

在對記錄進行批量操作,即每次要讀或寫一大批記錄時,順序文件的效率是所有邏輯文件中最高的;此外,也只有順序文件次啊能存儲在磁帶上, 并能有效工作,但順序文件在查找、修改增加或刪除單條記錄的操作比較困難。

2)索引文件。 索引文件的示意圖。 對于定長記錄文件(長度為L),要查找第i條記錄,可以直接按照下式計算得到第i條記錄相對于第一條記錄的地址:
Ai=i×LA_i=i \times LAi?=i×L

然而,對于可變長記錄文件, 要查找第i條記錄,必須順序查找前i-1條記錄, 從而獲得相應記錄的長度L,進而按照下式進行計算得到第i條記錄的首址:

Ai=Σi=0i?1Li+iA_i=\Sigma_{i=0}^{i-1}L_i+iAi?=Σi=0i?1?Li?+i

變長記錄文件只能順序查找,系統開銷很大。 為此,可以建立一張索引表以加快檢索速度, 索引表本身是定長記錄的順序文件。在記錄很多或者訪問要求高的文件中, 需要引入索引以提供有效的訪問。

實際中,通過索引可以成百上千倍地提高訪問速度。

3)索引順序文件。 索引順序文件是順序和索引兩種組織形式的結合。 索引順序文件將順序文件中的所有記錄分成若干組, 為順序文件建立一張索引表,在索引表中為每組中的第一條記錄建立一個索引項,其中包含該記錄的關鍵字值和指向該記錄的指針。

主文件中記錄分組排列,同一個組中的關鍵字可以無序,但是組與組之間的關鍵字必須有序。查找一條記錄時,首先通過索引表找到其所在的組,然后在該組中使用順序查找,就能很快找到記錄。

對于含有N條記錄的順序文件, 查找某關鍵字值的記錄時,平均查找N/2次。

在索引順序文件中,假設N條記錄分為N\sqrt{N}N?組,索引表中有N\sqrt{N}N?個表項,每組有N\sqrt{N}N?個記錄,在查找某關鍵字值的記錄時,先順序查找索引表,需要查找N2\frac{\sqrt{N}}{2}2N??次,然后在主文件中對應的組中循序查找,也需要查找N2\frac{\sqrt{N}}{2}2N??次,總共需要N\sqrt{N}N?次。顯然,索引順序文件提高了查找效率,若記錄數很多,則可采用兩級或者多級縮影。

4)直接文件或散列文件(Hash File)。 給定記錄的鍵值或通過散列函數轉換的鍵值直接決定記錄的物理地址。這種映射結構不同于順序文件和索引文件,沒有順序的特性。

散列文件有很高的存取速度,但是會引起沖突,即不同關鍵字的散列函數值相同。

有結構文件邏輯上的組織,是為在文件中查找數據服務的(順序查找、索引查找、索引順序查找和哈希查找)。

4.1.3 目錄結構

與文件管理系統和文件集合相關聯的是文件目錄,它包含有關文件的信息如屬性、位置和所有權等,這些信息主要由操作系統進行管理。

首先我們來看看目錄管理的基本要求:

從用戶的角度看,目錄在用戶(應用程序)所需要的文件名和文件之間提供一種映射,所以目錄管理需要實現“按名存取”;目錄存取的效率直接影響到系統的性能,所以要提高對目錄的檢索速度;在共享系統中,目錄還需要提供用于控制文件的信息。此外,文件允許重名也是用戶的合理和必然要求,目錄管理通過樹形結構來解決和實現。

前面介紹了文件內部的邏輯結構,下面介紹多個文件之間在邏輯上是如何組織的,這實際上是文件“外部”的邏輯結構的問題。

1 文件控制塊和索引結點

和進程管理一樣,為實現目錄管理,操作系統中引入了文件控制塊這一數據結構。

1)文件控制塊。文件控制塊(FCB)是用來存放控制文件需要的各種信息的數據結構,以實現“按名存取”。FCB的有序集合稱為文件目錄,一個FCB就是一個文件目錄項。 為了創建一個新文件,系統將分配一個FCB并存放在文件目錄中,成為目錄項。

FCB主要包含以下信息:

  • 基本信息,比如文件名、文件的物理地址、文件的邏輯結構、文件的物理結構等
  • 存取控制信息,比如文件存取權限等
  • 使用信息,比如文件建立時間、修改時間

2)索引結點。在檢索目錄文件的過程中,只用到了文件名,僅當找到一個目錄項(查找文件名與目錄項中文件名匹配)時,才需要從該目錄項中讀出該文件的物理地址。 也就是說,在檢索目錄時,文件的其他描述信息不會用到,也不需要調入內存。因此,有的系統(比如UNIX)采用了文件名和文件描述信息分開的方法,文件描述信息單獨形成一個索引結點的數據結構,簡稱為i結點,在文件目錄中的每個目錄項僅由文件名和指向該文件所對應的i結點的指針構成。

一個FCB的大小是64B,盤塊大小是1KB,因此在每個盤塊中可以存放16個FCB(注意,FCB必須連續存放)。而在UNIX系統中,一個目錄項僅占16B,其中14B是文件名,2B是 i結點指針。在1KB的盤塊中可存放64個目錄項。這樣,就可使查找文件時的平均啟動磁盤次數減少到原來的1/4,大大節省了系統開銷。

存放在磁盤上的索引結點稱為磁盤索引結點,UNIX中的每個文件都有一個唯一的磁盤索引結點,主要包括以下幾個方面:

  • 文件主標識符,擁有該文件的個人或小組的標識符
  • 文件類型,包括普通文件、目錄文件、特別文件
  • 文件存取權限,各類用戶對該文件的存取權限
  • 文件物理地址,每個索引結點中含有13個地址項,它們以直接或間接方式給出數據文件所在盤塊的編號
  • 文件長度,以字節為單位
  • 文件鏈接計數,在本文件系統中所有指向該文件的文件名的指針計數
  • 文件存取時間,本文件最近被進程存取的時間、最近被修改的時間及索引結點最近被修改的時間

文件被打開時,磁盤索引結點復制到內存的索引結點中,以便于使用。 在內存索引節點中又增加了以下內容:

  • 索引結點編號,用于標識內存索引結點
  • 狀態,指示i結點是否上鎖或被修改
  • 訪問計數,每當有一進程要訪問此i結點時,計數加1,訪問結束減1
  • 邏輯設備號,文件所屬文件系統的邏輯設備號
  • 鏈接指針,設置分別指向空閑鏈表和散列隊列的指針

2 目錄結構

在目錄這個層次上所需要執行哪些操作呢?

  • 搜索。當用戶使用一個文件時,需要搜索目錄,已找到該文件對應的目錄項
  • 創建文件。當創建一個新文件時,需要在目錄中增加一個目錄項
  • 刪除文件。當刪除一個文件時,需要在目錄中刪除相應的目錄項。
  • 顯示目錄。用戶可以請求顯示目錄的內容,比如顯示該用戶目錄中的所有文件及其屬性。
  • 修改目錄。某些文件屬性保存在目錄中,因而這些屬性的變化需要改變相應的目錄項。

操作時考慮以下幾種目錄結構

1)單級目錄結構

在整個文件系統中只建立一張目錄表,每個文件占一個目錄項。

實現了按名存取,到那時存在查找速度慢,文件不允許重名,不便于文件共享等缺點,而且對于多用戶的操作系統顯然是不適用的。

2)兩級目錄結構

將文件目錄分成主文件目錄(Master File Directory,MFD)和用戶文件目錄(User File Directory,UFD)兩級。

主文件目錄項記錄用戶名相應用戶文件目錄所在的存儲位置

用戶文件目錄項記錄該用戶文件的FCB信息

當某用戶想要對其文件進行訪問時,只需要搜索用戶對應的UFD,這既解決了不同用戶文件之間的重名的問題,有一定程度上保證了文件的安全。

但是兩級目錄結構缺乏靈活性,不能對文件分類。

3)多級目錄結構(樹形目錄結構)

用戶要訪問某個文件時,用文件的路徑名標識文件,文件路徑名是個字符串,由從根目錄出發到所找文件通路上所有目錄名與數據文件名用分隔符/ 鏈接而成。 從根目錄出發的路徑稱為絕對路徑。當層次較多時,每次從根目錄出發查詢會浪費時間,于是加入了當前目錄,進程對各文件的訪問都是相對于當前目錄進行的。

樹形目錄結構可以方便地對文件進行分類,層次結構清晰,也能有效地進行文件的管理和保護。 但是,在樹形目錄中查找一個文件時,需要按照路徑名依次訪問中間結點,這就增加了磁盤訪問次數,影響查詢速度。

4)無環圖目錄結構。樹形目錄結構能便于實現文件分類,但是不便于實現文件共享。 為此在樹形目錄結構的基礎上增加了一些指向同一結點的有向邊,使得整個目錄成為一個有向無環圖。引入無環圖目錄結構是為了實現文件共享。

需要為每個共享節點設置一個共享計數器,每當圖中增加對該結點的共享鏈時,計數器加1;每當某用戶提出刪除該結點時,計數器減1.僅當共享計數器為0時,才真正刪除該結點,否則僅刪除請求用戶的共享鏈。 共享文件(或目錄)不同于文件拷貝(副本)。對于共享文件,只存在一個真正的文件,熱河改變都會為其他用戶所見。

無環圖結構方便文件的共享,但是使得系統的管理變得更加復雜。

4.1.4 文件共享

文件共享使得多個用戶(進程)共享同一個文件,系統中只需要保留該文件的一個副本。如果系統不能提供貢獻功能,則每個需要該文件的用戶都要有自己的副本,會造成對存儲空間的極大浪費。

現代常用的兩種文件共享方法有

1.基于索引結點的共享方式(硬鏈接)

2利用符號鏈實現文件共享(軟鏈接)

4.2 文件系統實現

在學習本節時,請讀者思考如下問題:

  • 在目錄中查找某個文件可以使用什么方法?
  • 文件的邏輯結構和物理結構有何區別?單個文件的邏輯結構和物理結構之間是否存在某些制約關系?
  • 4.2.1 文件系統層次結構

    現代操作系統有多種文件系統類型(如FAT32,NTFS,ext2,ext2,ext4等),因此文件系統的層次結構也不盡相同。下圖是一種合理的層次結構。

    1.用戶調用接口

    文件系統為用戶提供與文件及目錄有關的系統調用,如新建、打開,讀寫,關閉,刪除文件,建立、刪除目錄等。 此層由若干程序模塊組成,每個模塊對應一條系統調用,用戶發出系統調用時,控制即轉入相應的模塊。

    2 文件目錄系統
    文件目錄系統的主要功能是管理文件目錄, 其任務有管理活躍文件目錄表、管理讀寫狀態信息表、管理用戶進程的打開文件表、管理和組織存儲設備上的文件目錄結構,調用下一級存儲控制模塊。

    3 存取控制驗證模塊

    實現文件保護主要由該級軟件完成,它把用戶的訪問要求與FCB中指示的訪問控制權限進行比較,以確認訪問的合法性。

    4 邏輯文件系統與文件信息緩沖區

    邏輯文件系統與文件信息緩沖區的主要功能是,根據文件的邏輯結構將用戶要讀寫的邏輯記錄轉換成文件邏輯結構內的相應塊號。

    5 物理文件系統

    主要功能是把邏輯記錄所在的相對塊號轉換成實際的物理地址。

    6 輔助分配模塊

    分配模塊的主要功能是管理輔存空間,即負責分配輔存空閑空間和回收輔存空間。

    7 設備管理程序模塊
    主要功能是分配設備、分配設備讀寫用緩沖區、磁盤調度、啟動設備、處理設備中斷,釋放設備讀寫緩沖區,釋放設備等。

    我們可以通過用戶請求訪問某個文件時發生的一系列事情來輔助記憶文件系統的層次結構。

    例如,用戶要查看文件F中的內容,對操作系統發出命令(OS有面向用戶的接口),于是就經過了第0級的用戶調用接口。

    OS得到命令后,需要查找目錄以查找文件F的索引信息,可能是FCB,也可能是索引節點,經過了第1級文件系統目錄。

    通過目錄找到文件FCB后,需要查看文件FCB上的信息,看看這個用戶有沒有訪問權限,于是經過了存取控制驗證模塊。

    用戶通過驗證后,就真正開始尋址。OS的尋址往往先得到邏輯地址,再得到物理地址,于是在開始尋址時,OS經過邏輯文件系統與文件信息緩沖區,得到了相應文件的內容的邏輯地址

    把邏輯地址轉換為物理地址, 是在物理文件系統中完成的。

    至此為止,尋址完成。 尋址完成后,我們關心的是找到的這塊空間應該如何管理,若要釋放這塊空間,則任務就交給輔助分配模塊,若要把這塊空間分配給設備用于I/O,則把任務交給設備管理程序模塊

    4.2.2 目錄實現

    在讀文件前,必須先打開文件;打開文件時,OS利用路徑名找到相應目錄項,目錄項中提供了查找文件磁盤塊所需要的信息。 目錄實現的基本方法有線性列表和哈希表兩種,要注意目錄的實現就是為了查找,因此線性列表實現對應線性查找,哈希表的實現對應散列查找。

    1.線性列表

    最簡單的目錄實現方法是使用存儲文件名和數據塊指針的線性表。 創建新文件時,必須首先搜索目錄表以確定沒有同名的文件存在,然后在目錄表后增加一個目錄項。 刪除文件則根據給定的文件名搜索目錄表,接著釋放分配給它的空間。重用目錄項有很多方法: 可以將目錄項標記為不再使用,或者將它加到空閑目錄項表上,還可以將目錄表中的最后一個目錄項復制到空閑位置,并降低目錄表長度。采用鏈表結構可以減少刪除文件的時間,其優點在于實現簡單,不過由于線性表的特殊性,比較費時。

    2. 哈希表

    哈希表根據文件名得到一個值,并返回一個指向線性列表中元素的指針。 這種方法優點是查找非常迅速,插入和刪除也很簡單,不過需要一些預備措施來避免沖突。最大的困難是哈希表長度固定以及哈希函數對表長的依賴性。

    目錄查詢是通過在磁盤上反復搜索完成的,需要不斷進行I/O操作,開銷較大。 所以如前所述, 為了減少I/O操作,把當前使用的文件目錄復制到內存,以后要使用該文件的時候只需要在內存中操作,因此降低了磁盤操作次數,提高了系統速度。

    4.2.3 文件實現

    文件的實現就是研究文件的物理結構,即文件數據在物理存儲設備上是如何分布和組織的。同一個問題有兩個方面的回答:一是文件的分配方式,講的是對磁盤非空閑塊的管理;二是文件存儲空間管理,講的是對磁盤空閑塊的管理。

    1.文件分配方式

    文件分配方式對應于文件的物理結構,是指如何為文件分配磁盤塊。常用的磁盤空間分配方法有三種:連續分配,鏈接分配和索引分配。 有的系統(比如RDOS操作系統)對三種方法都支持,但更普遍的是一個系統只支持一種方法。

    1)連續分配

    連續分配方法要求每個文件在磁盤上占有一組連續的塊,磁盤地址定義了磁盤上的一個線性排序。這種排序使得作業訪問磁盤時需要的尋道數和尋道時間最小。

    文件的連續分配可以用第一塊的磁盤地址和連續塊的數量來定義。一個文件的目錄條目應該包括開始塊的地址和該文件所分配區域的長度。

    連續分配支持順序訪問和直接訪問(即隨機訪問)。優點是實現簡單、存取速度快。缺點是文件長度不宜動態增加,因為一個文件末尾后的盤塊可能已分配給其他文件,一旦需要增加,就需要大量移動盤塊。此外,反復增刪文件后會產生外部碎片,且很難確定一個文件需要的空間大小。

    連續分配只適合于長度固定的文件。

    2) 鏈接分配

    鏈接分配采用離散分配的方式,消除了外部碎片,因此顯著提高了磁盤空間的利用率;又因為根據文件的當前需求為其分配必需的盤塊,當文件動態增長時,可以動態地再為它分配盤塊,因此無需事先知道文件的大小。此外,對文件的增刪改也非常方便。 鏈接分配又分為隱式鏈接和顯式鏈接兩種。

    隱式鏈接如下圖所示。每個文件對應一個磁盤塊的鏈表;磁盤塊分布在磁盤的任何地方,除最后一個磁盤塊外,每個盤塊都有指向下一個盤塊的指針,這些指針對用戶是透明的。 目錄包括文件 的第一塊的指針和最后一塊的指針

    隱式鏈接分配的缺點是無法直接訪問盤塊,只能通過指針順序訪問文件,且盤塊指針會消耗一定的存儲空間。隱式鏈接分配的穩定性也是一個問題,系統在運行過程中由于軟件或硬件錯誤導致鏈表中的指針丟失或者損壞,會導致文件數據的丟失。

    顯式鏈接分配方式是指把用于鏈接文件各物理塊的指針,從每個物理塊的塊末尾中提取出來,顯式地存放在內存的一張鏈接表中。該表在整個磁盤中僅設置一張,稱為文件分配表(File Allocation Table, FAT)。每個表項中存放對應塊的下一塊鏈接指針,即下一個盤塊號

    FAT表項與全部磁盤塊是一一對應的,并且可以用特殊的數字-1表示文件的最后一塊,用-2表示這個磁盤塊是空閑的(當然也可以指定-2,-3等等)。因此,文件分配表不僅記錄了文件各塊之間的先后鏈接關系,同時還標記了空閑的磁盤塊,操作系統也可以通過FAT對文件存儲空間進行管理。

    一個磁盤只會建立一張FAT表,FAT表在系統啟動時就會被讀入內存,并且常駐內存,因此查找FAT的過程是在內存中進行的。

    顯式鏈接分配方式的優點:
    很方便文件拓展,不會有碎片問題,外存利用率高,并且支持隨機訪問。相比于隱式鏈接分配,地址轉換時不需要訪問磁盤,因此文件的訪問效率更高。
    缺點:文件分配表需要占用一定的存儲空間。

    注:鏈接分配默認情況下指的是隱式鏈接分配方式。

    3)索引分配

    鏈接分配方式解決了連續分配的外部碎片和文件大小管理的問題。但是,鏈接分配不能有效支持隨機訪問(FAT除外,即顯式鏈接分配除外)。索引分配解決了隨機訪問這個問題,它把每個文件的所有的盤塊號都集中放在一起構成索引表(又稱索引塊),從而索引分配支持隨機訪問(直接訪問)。存放索引表的磁盤塊稱為索引塊,存放文件數據的磁盤塊稱為數據塊。

    每個文件都有其索引塊,這是一個磁盤塊地址的數組。 索引塊的第i個條目指向文件的第i個塊。目錄條目包括索引塊的地址,換句話說,目錄中記錄的是文件的索引塊的塊號。要讀第i塊,通過索引塊的第i個條目的指針來查找和讀入所需的塊。索引表建立了邏輯塊號和物理塊號的一一映射關系。

    優點:索引分配支持直接訪問,且沒有外部碎片問題。文件拓展也很容易實現(只需要給文件分配一個空閑塊,并增加一個索引表項即可)

    缺點: 磁盤表要占用一定的存儲空間

    如果文件太大,索引表項太多,可以采取以下三種方法解決:
    1)鏈接方案

    如果索引表太大,一個索引塊裝不下,那么可以將多個索引塊鏈接其來存放。

    缺點: 若文件很大,索引表很長,就需要將很多個索引塊鏈接起來。想要找到i號索引塊,必須先讀入0~i-1號索引塊,這就導致磁盤I/O操作次數過多,查找效率低下。

    2) 多層索引

    建立多層索引(原理類似于多層頁表),使得第一層的索引表項指向第二層的索引塊。還可以根據文件大小的要求建立第三層、第四層的索引塊

    3)混合索引
    將多種索引分配方式相結合的分配方式。例如,系統既采用直接地址,又采用單級索引分配方式或兩級索引分配方式。

    2. 文件存儲空間管理

    1)文件存儲器空間的劃分與初始化。一般來說,一個文件存儲在一個文件卷內。文件卷可以是物理盤的一部分,也可以是整個物理盤,支持超大型文件的文件卷也可由多個物理盤組成,如下圖。


    在一個文件卷中,文件數據信息的空間(文件區)和存放文件控制信息FCB的空間(目錄區)是分離的。

    由于存在很多種類的文件表示和存放格式,所以現代操作系統中一般都有很多不同的文件管理模塊,通過它們可以訪問不同格式的邏輯卷中的文件。 邏輯卷在提供文件服務前,必須由對應的文件程序進行初始化,劃分好目錄區和文件區,建立空閑空間管理表格及存放邏輯卷信息的超級塊。

    2)文件存儲器空間管理。 文件存儲設備分成許多大小相同的物理塊,并以塊為單位交換信息,因此,文件存儲設備的管理實質上是對空閑塊的組織和管理,它包括空閑塊的組織、分配與回收等問題。

    (1)空閑表法

    空閑表法屬于連續分配方式。 它與內存的動態分配方式類似,為每個文件分配一塊連續的存儲空間。系統為外存上的所有空閑區建立一張空閑盤塊表,每個空閑區對應一個空閑表項,其中包括表項序號、該空閑區的第一個盤塊號,該區的空閑盤塊數等信息。 再將所有的空閑區按照起始盤塊號遞增的次序排列。

    空閑盤區的分配與內存的動態分配類似,同樣采用首次適應算法、循環首次適應算法等。例如,在系統為某新建的文件分配空閑盤塊時,先順序地檢索空閑盤塊表的各表項,直到找到第一個其大小能滿足要求的空閑區,再將該盤區分配給用戶,同時修改空閑盤塊表。

    系統在對用戶所釋放的存儲空間進行回收時,也采用類似于內存回收的方法,即要考慮回收取 是否與空閑表中插入點的前區和后區相鄰接,相鄰的話應該合并。

    (2)空閑鏈表法

    將所有空閑盤區拉成一條空閑鏈,根據構成鏈所用的基本元素不同,可把鏈表分為兩種形式: 空閑盤塊鏈和空閑盤區鏈。

    空閑盤塊鏈將磁盤上的所有空閑空間以盤塊為單位拉成一條鏈。 當用戶因為創建文件而請求分配存儲空間時,系統從鏈首開始,依次摘下適當數目的空閑盤塊分配給用戶。當用戶因為刪除文件而釋放存儲空間時,系統將回收的盤塊依次插入空閑盤塊鏈的末尾。這種方法的優點是分配和回收一個盤塊的過程非常簡單,但在為一個文件分配盤塊時可能要重復多次操作。

    空閑盤區鏈 將磁盤上的所有空閑盤區(每個盤區可包含若干盤塊)拉成一條鏈。再每個盤區上除了用于指示下一個空閑盤區的指針外,還應該有能指明本盤區大小(盤塊號)的信息。 分配盤區的方法與內存的動態分區分配類似,通常采用首次適應算法。 回收盤區時,注意合并的問題。

    (3)位示圖法

    位示圖利用二進制的一位來表示磁盤中的一個盤塊的使用情況,磁盤上所有的盤塊都有一個二進制位與之對應。 其值為“0”表示對應的盤塊空閑;其值為1時表示對應的盤塊已分配。

    每個二進制位對應一個盤塊。

    王道書上:(字號,位號)或者稱為(行號,列號)都是從1開始編號的。

    盤塊的分配:

    1)順序掃描位示圖,從中找出一個或一組為0的二進制位。2)將找到的一個或者一組二進制位,轉換成與之對應的盤塊號。若找到的為0 的二進制位位于位示圖的第i行,第j列,則其相應的盤塊號按照下式計算(n代表每行的位數,也就是字長)
    b=n(i?1)+j這是從1開始編號的情況b=n(i-1)+j\,這是從1開始編號的情況b=n(i?1)+j1

    3)修改位示圖,令map[i,j]=1

    盤塊的回收:

    1)將回收盤塊的盤塊號轉換成位示圖中的行號和列號,轉換公式為
    i=(b?1)/(n+1)i=(b-1) / (n+1)i=(b?1)/(n+1)
    j=(b?1)mod(n+1)j=(b-1) mod (n+1)j=(b?1)mod(n+1)

    2)修改位示圖,令map[i,j]=0

    (4)成組鏈接法

    空閑表法和空閑鏈表法都不適用于大型文件系統,因為這會使空閑表或空閑鏈表太大。在UNIX系統中采用的是成組鏈接法,這種方法結合了空閑表和空閑鏈表兩種方法,克服了表太大的缺點。

    文件卷的目錄區中專門用一個磁盤塊作為“超級塊”,當系統啟動時需要將超級塊讀入內存。并且要保證內存和外存中超級塊數據一致(超級塊充當了鏈表中鏈頭的作用)。
    一個超級塊記錄下一組空閑盤塊數和空閑塊號

    大致思想是:一個超級塊中記錄下一組空閑塊的數量和空閑塊號,對于下一組空閑塊,選第一個空閑塊再存儲接下來的空閑塊的數量和塊號,依次類推。

    4.3 磁盤組織與管理

    4.3.1 磁盤的結構

    磁盤(Disk)是由表面涂有磁性物質的金屬或者塑料構成的圓形盤片,通過一個稱為磁頭的導體線圈從磁盤存取數據。在讀/寫操作期間,磁頭固定,磁盤在下面高速旋轉。

    磁盤盤面上的數據存儲在一組同心圓中,稱為磁道。 每個磁道與磁頭一樣寬,一個盤面上由上千個磁道。磁道又劃分為幾百個扇區,每個扇區固定存儲大小(通常是512B),一個扇區稱為一個盤塊。相鄰磁道即相鄰扇區之間通過一定的間隙分隔開,以避免精度錯誤。 注意,由于扇區按照固定圓心角度劃分,所以密度從最外道逐漸向最內道增加的,磁盤的存儲能力受限于最內道的最大記錄密度。

    磁盤安裝在一個磁盤驅動器中,它有磁頭臂、用于旋轉磁盤的主軸和用于數據輸入/輸出的電子設備組成。

    扇區是磁盤可尋址的最小存儲單位,磁盤地址用“柱面號·盤面號·扇區號”表示。

    用戶訪問文件,需要操作系統的服務,文件實際上存儲在磁盤中,操作系統接收到用戶的命令后,經過一系列的檢驗訪問權限和尋址過程后,最終都會到達磁盤,控制磁盤把相應的數據信息讀出或修改。 當有多個請求同時到達時,操作系統就要決定先為哪個請求服務,這就是磁盤調度算法要解決的問題。

    4.3.2 磁盤調度算法

    一次磁盤讀寫操作的時間由尋道時間、延遲時間和傳輸時間決定的。

    1)尋道時間Ts。 活動頭磁盤在讀寫信息前,將磁頭移動到指定磁道所需要的時間。這個時間除跨越n條磁道的時間外,還包括啟動磁臂的時間s
    Ts=m×n+sT_s=m \times n + sTs?=m×n+s

    式中,m是與磁盤驅動器速度有關的常數,約為0.2ms,磁臂的啟動時間約為2ms。

    2)延遲時間Tr。 磁頭定位到某一磁道的扇區(塊號)所需要的時間,設磁盤的旋轉速度為r,則
    Tr=12rT_r=\frac{1}{2r}Tr?=2r1?

    對于硬盤,典型的旋轉速度是5400轉/分,相當于一周11.1ms,則Tr=5.55ms;對于軟盤,其旋轉速度為300~600轉/分,則Tr為50 ~100 ms

    3)傳輸時間Tt。 從磁盤讀出或向磁盤寫入數據所經歷的時間,這個時間取決于每次所讀寫的字節數b和磁盤的旋轉速度:
    Tt=brNT_t=\frac{b}{rN}Tt?=rNb?

    式中,r是磁盤每秒的轉數,N是一個磁道上的字節數。

    在磁盤存取時間的計算中,尋道時間和磁盤調度算法相關,下面將介紹幾種算法;而延遲時間和傳輸時間都和磁盤旋轉速度相關,且為線性相關,所以在硬件上,轉速是磁盤性能一個非常重要的參數。

    總平均存儲時間Ta可以表示為:
    Ta=Ts+12r+brNT_a=T_s+\frac{1}{2r}+\frac{b}{rN}Ta?=Ts?+2r1?+rNb?

    在實際的磁盤I/O操作中,存取時間與磁盤調度算法密切相關。調度算法直接決定尋道時間,從而決定總的存取時間。

    目前常用的磁盤調度算法有以下幾種
    1)先來先服務(First Come First Served,FCFS)算法
    FCFS算法根據進程請求訪問磁盤的先后順序進行調度,這是一種最簡單的調度算法,如下圖。該算法的優點是具有公平性。若只有少量的進程需要訪問,且大部分請求都是訪問簇聚的文件扇區,則有望達到較好的性能;缺點是,如果大量的進程競爭使用磁盤,并且請求訪問的磁道很分散,則性能很差。

    2)最短尋找時間優先(Shortest Seek Time First,SSTF)算法

    SSTF算法選擇調度處理的磁道是與當前磁頭所在磁道距離最近的磁道,以便使每次的尋道時間最短。 當然,總是選擇最小尋找時間并不能保證平均尋道時間最小,但能提供比FCFS算法更好的性能。 這種算法會產生“饑餓”現象。

    如果某時刻磁頭正在18號磁道,而在18號磁道附近頻繁地增加新的請求,則SSTF算法使得磁頭長時間在18號磁道附近工作,將使遠處的磁道的訪問被無限期地延遲,即被“餓死”。

    3)掃描(SCAN)算法(又稱為電梯調度算法)

    SCAN算法在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求作為下一次服務的對象,實際上就是在最短尋找時間優先算法的基礎上規定了磁頭運動的方向。由于磁頭移動規律與電梯運行相似,因此又稱電梯調度算法。 SCAN算法對最近掃描過的區域不公平,因此它在訪問局部性方面不如FCFS 和SSTF 算法好。

    4)循環掃描(Circular SCAN ,C-SCAN)算法

    在掃描算法的基礎上規定磁頭單向移動來提供服務,回返時直接快速移動至起始端而不服務任何請求。 由于SCAN算法偏向于處理那些接近最里或最外的磁道的訪問請求,所以使用改進型的C-SCAN算法來避免這個問題。

    采用SCAN算法和C-SCAN算法時,磁頭總是嚴格地遵循從盤面的一端到另一端,顯然,在實際使用時還可以改進,即磁頭移動只需要到達最遠端的一個請求即可返回,不需要到達磁盤端點。 這種形式的SCAN算法和C-SCAN算法稱為LOOK調度和C-LOOK調度,因為它們在朝一個給定方向移動前會查看是否有請求。

    注意,如沒有特殊說明,也可以默認SCAN算法和C-SCAN算法為LOOK算法和C-LOOK調度。

    對比以上幾種磁盤調度算法,FCFS算法太過簡單,性能較差,僅僅在請求隊列長度接近于1時才較為理想;SSTF算法較為通用和自然;SCAN算法和C-SCAN算法在磁盤負載較大時比較占優勢

    除減少尋道時間以外,減少延遲時間也是提高磁盤傳輸效率的重要因素,可以對盤面扇區進行交替編號,對磁盤片組中的不同盤面錯位命名。假設每個盤面有8個扇區,磁盤片組共8個盤面,可以采用下圖所示的編號。

    磁盤是連續自轉設備,磁頭讀/寫一個物理塊后,需要經過短暫的處理時間才能讀/寫下一塊。假設邏輯記錄數據連續存放在磁盤空間中,若在盤面上按扇區交替編號連續存放,則連續讀/寫多條記錄時能較少磁頭的延遲時間;同柱面不同盤面的扇區若能錯位編號,連續讀/寫相鄰兩個盤面的邏輯記錄時也能減少磁頭延遲時間。

    4.3.3 磁盤的管理

    1 . 磁盤初始化
    一個新的磁盤只是一個含有磁性記錄材料的空白盤。在磁盤能存儲數據之前,它必須分成扇區以便磁盤控制器能進行讀和寫操作,這個過程稱為低級格式化(物理分區)。低級格式化為磁盤的每個扇區采用特別的數據結構。每個扇區的數據結構通常由頭、數據區域(通常為512B大小)和尾部組成。頭部和尾部包含了一些磁盤控制器所使用的信息。

    為使用磁盤存儲文件,操作系統還需要將自己的數據結構記錄在磁盤上:
    第一步將磁盤分為由一個或多個柱面組成的分區(即熟悉的C盤和D盤等形式的分區);

    第二步對物理分區進行邏輯格式化(創建文件系統),操作系統將初始的文件系統數據結構存儲到磁盤上,這些數據結構包括空閑和已分配的空間以及一個初始為空的目錄。

    2 . 引導塊

    計算機啟動時需要運行一個初始化程序(自舉程序),它初始化CPU、寄存器、設備控制器和內存等,接著啟動操作系統。 為此,該自舉程序應該找到磁盤上的操作系統內核,裝入內存,并轉到起始地址,從而開始操作系統的運行。

    自舉程序通常保存在ROM中,為了避免改變自舉代碼而需要改變ROM硬件的問題,因此只在ROM中保留很小的自舉裝入程序,將完整功能的自舉程序保存在磁盤的啟動塊上,啟動塊(也叫引導塊)位于磁盤的固定位。擁有啟動分區的磁盤稱為啟動磁盤或系統磁盤。

    3 . 壞塊

    由于磁盤有移動部件且容錯能力弱,因此容易導致一個或多個扇區損壞。部分磁盤甚至在出廠時就有壞扇區。根據所使用的磁盤和控制器,對這些塊有多種處理方式。

    對于簡單磁盤,比如電子集成驅動器(IDE),壞扇區可手工處理,比如MS-DOS的Format命令執行邏輯格式化(創建文件系統)時便會掃描磁盤以檢查壞扇區。壞扇區在FAT表中會標明,因此程序不會使用。

    對于復雜的磁盤,比如小型計算機系統接口(SCSI),其控制器維護一個磁盤壞塊鏈表。該鏈表在出廠前進行低級格式化時已經初始化,并在磁盤的整個使用過程中不斷更新。低級格式化將一些塊保留作為備用,對操作系統透明。 控制器可以用備用塊來邏輯地代替壞塊,這種方案稱為扇區備用。

    對壞塊的處理實際上就是利用某種機制,使得系統不去使用壞塊。壞塊屬于硬件故障,操作系統是不能修復壞塊的。

    王道習題


    答案:B 磁帶只能順序訪問;光盤、U盤,磁盤都可以隨機訪問。

    答案:D尋道時間影響速度最大


    答案:A

    總結

    以上是生活随笔為你收集整理的操作系统第四章-文件管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。