當前位置:首頁 » 服務存儲 » 文件存儲空間包不包括索引項
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

文件存儲空間包不包括索引項

發布時間: 2023-01-06 16:04:24

❶ 文件存儲空間管理

  上篇文章介紹了文件的物理結構並介紹了文件分配的三種方式——連續分配、鏈接分配和索引分配。
  本文介紹操作系統對文件存儲空間的管理。
本文內容

  存儲空間的劃分: 將物理磁碟劃分為一個個文件卷(邏輯卷、邏輯盤)
  在存儲空間初始化時,需要將各個文件卷劃分為目錄區、文件區。

  有些系統支持超大型文件,可支持由多個物理磁碟組成一個文件卷。

  空閑表法:即用一張表記錄磁碟中空閑的盤塊。空閑表的表項由 空閑盤的起始塊號 空閑盤塊數 組成。如下圖所示

  如何分配磁碟塊:與內存管理中的動態分區分配類似,為一個文件分配連續的存儲空間。同樣可以採用 首次適應演算法、最佳適應演算法、最壞適應演算法,臨近適應演算法 來決定要為文件分配哪些區間。
   空閑表法適用於連續分配方式。
  例如,如果新創建的文件請求3個塊,按照首次適用演算法,從10號塊開始有5個連續的塊可以滿足需求,所以把10、11、12三個塊分配給文件,分配後的空閑盤塊表如下

  這里以回收區前後都是空閑區為例,磁碟是第一幅圖的狀態,如果回收21、22號磁碟塊,那麼回收後的空閑盤塊表如下圖所示。

  空閑鏈表法分為兩種: 空閑盤塊鏈和空閑盤區鏈

  下圖分別表示空閑盤塊鏈和空閑盤區鏈。

  操作系統保存著 鏈頭、鏈尾指針。
  如何分配:如過某文件申請K個盤塊,則從鏈頭開始依次摘下K個盤塊分配,並修改空閑鏈的鏈頭指針。
  如何回收:回收的盤塊依次掛到鏈尾,並修改空閑鏈的鏈尾指針。
  下圖表示分配了3個盤塊

  從上面可以看出,空閑盤塊法適用於 離散分配 的物理結構。為文件分配多個盤塊時可能要重復多次操作。

  操作系統保存著 鏈頭、鏈尾指針
  如何分配:若某文件申請K個盤塊,由於空閑盤區鏈將連續的盤塊組成一個盤區,所以若某個盤區大小滿足可以實現一次分配,同樣可以採用首次適用、最佳適用等演算法,從鏈頭開始檢索,按照一定的規則找到一個大小符合要求的空閑盤區分配給文件。若沒有合適的連續空閑塊,也可以將不同的盤區的盤同時分配給一個文件,同樣分配後也需要修改相應的指針鏈和盤區大小等數據。

  如何回收:若回收區和某個空閑盤區相鄰,則需要將回收區合並到空閑盤區中。若回收區沒有和任何空閑區相鄰,將回收區作為一個單獨的一個空閑盤區掛到鏈尾。同樣也需要修改鏈表指針和盤區大小等信息。
  下圖表示按照首次適用演算法分配3個盤區

  從上面可以看出,空閑盤區鏈對 離散分配、連續分配 都適用。為一個文件分配多個盤塊時 效率更高

  位示圖:磁碟內存被劃分為一個個磁碟塊,可以用二進制位對應一個盤塊。「0」代表盤塊空閑,「1」代表盤塊已分配。位示圖一般用連續的「字」來表示,下圖中一個字的字長是16位,字中的每一位對應一個盤塊。因此可以用(字型大小,位號)對應一個盤塊號。

  如何分配:若文件需要K個塊,①順序掃描位示圖,找到K個相鄰或不相鄰的「0」;②根據字型大小、位號算出對應的盤塊號,將相應的盤塊分配給文件;③將相應的位設置為「1」。

  如何回收:①根據回收的盤塊號計算出對應的字型大小、位號;②將相應的二進制位設置為「0」。

  從上面可以看出:位示圖法對 連續分配和離散分配 都適用。

  空閑表法、空閑鏈表法不適用大型文件系統,因為空閑表或空閑聯保可能過大。UNIX系統中採用了 成組鏈接法 對磁碟空閑塊進行管理。這是將上述兩種方法相結合的而形成的一種空閑管理方法。
  文件卷的目錄區中專門用一個磁碟塊作為 超級塊 ,當系統啟動時需要將 超級塊讀入內存 。並且要保證與外存中的「超過塊」的數據一致。

  內存的分配過程:分配過程是從棧頂取出一空閑盤塊號,將與之對應的盤塊分配給用戶,然後將棧頂指針下移一格,若該盤塊號已是棧底(即第一個盤塊),這是當前棧中最後一個可分配的盤塊號。由於在該盤塊號所對應的盤塊中記有下一組可用的盤塊號,因此,不能直接將它分配掉,需要將它記錄的下一組信息保存下來,所以比須調用磁碟讀過程,將棧底盤塊號所對應盤塊的內容讀入棧中,作為新的盤塊號棧的內容,並把原棧底對應的盤塊分配出去(其中的有用數據已讀入棧中)。然後,再分配一相應的緩沖區(作為該盤塊的緩沖區)。最後,把棧中的空閑盤塊數減1 並返回。

  下面舉例說明
  如果此時新建一個文件需要一個磁碟塊,那麼此時第一組有100個空閑塊,所以是足夠分配的,將棧頂的盤塊號即201號盤塊對應的盤塊分配出去,如下圖

  如果此時又創建一個新的文件,需要99個磁碟塊,就需要將剩下的99個盤塊全部分配出去,但是此時300號盤塊記錄了下一組信息,如果分配出去,信息就是丟失,所以需要將300號盤塊從外存(磁碟)讀入內存,將300號盤塊記錄的信息,寫入空閑盤塊號棧,然後才能將這99塊空閑塊分配出去。具體過程如下圖所示

  
  內存的回收過程:在系統回收空閑盤塊時,須調用盤塊回收過程進行回收。它是將回收盤塊的盤塊號記入空閑盤塊號棧的頂部,並執行空閑盤塊數加 1 操作。當棧中空閑盤塊號數目已達 100 時,表示棧已滿,便將現有棧中的100 個盤塊號記入新回收的盤塊中,再將其盤塊號作為新棧底。

  以分配的第一個圖為例,201盤塊被分配出去了,如果此刻有個文件被刪除了,其佔用的盤塊是199號,系統需要回收這個盤塊,發現此時空閑盤塊號棧中記錄空閑塊數為99,直接將盤塊號記錄棧頂,將空閑盤塊數加1即可。

  如果此時又有一個文件被刪除了,其佔用的盤塊是190,此時空閑盤塊號數已經達到100了,就需要將現在空閑盤塊棧中信息記入新回收的塊中。

❷ 文件 - 索引文件(一)

索引文件構成

索引文件

索引文件由主文件和索引表構成

①主文件 文件本身

②索引表 在文件本身外建立的一張表 它指明邏輯記錄和物理記錄之間的一一對應關系

索引表組成

索引表由若干索引項組成 一般索引項由主關鍵字和該關鍵字所在記錄的物理地址組成

注意

索引表必須按主關鍵字有序 而主文件本身則可以按主關鍵字有序或無序

索引順序文件和索引非順序文件

( )索引順序文件(Indexed Sequential File)

主文件按主關鍵字有序的文件稱索引順序文件

在索引順序文件中 可對一組記錄建立一個索引項 這種索引表稱為稀疏索引

( )索引非順序文件(Indexed NonSequentail File)

主文件按主關鍵字無序得文件稱索引非順序文件

在索引非順序文件中 必須為每個記錄建立一個索引項 這樣建立的索引表稱為稠密索引

注意

① 通常將索引非順序文件簡稱為索引文件

② 索引非順序文件主文件無序 順序存取將會頻繁地引起磁頭移動 適合於隨機存取 不適合於順序存取

③ 索引順序文件的主文件是有序的 適合於隨機存取 順序存取

④ 索引順序文件的索引是稀疏索引 索引佔用空間較少 是最常用的一種文件組織

⑤ 最常用的索引順序文件 ISAM文件和VSAM文件

索引文件的存儲

索引文件的存儲

索引文件在存儲器上分為兩個區 索引區和數據區 索引區存放索引表 數據區存放主文件

索引文件的建立

建立索引文件的過程

( ) 按輸入記錄的先後次序建立數據區和索引表 其中索引表中關鍵字是無序的

( ) 待全部記錄輸入完畢後對索引表進行排序 排序後的索引表和主文件一起就形成了索引文件

【例】對於表 的數據文件 主關鍵字是職工號 排序前的索引表如表 所示 排序後的索引表見表 表 和表

一起形成了一個索引文件

lishixin/Article/program/sjjg/201311/23625

❸ oracle 索引佔用存儲空間嗎

佔用的,你SQL語句創建索引時,語句裡面就有指定該索引存放到哪個表空間,而表空間的物理形式就是存放在磁碟上的數據文件,所以是佔用存儲空間的

❹ 操作系統(四)文件管理

文件—就是一組有意義的信息/數據集合

文件屬於抽象數據類型。為了恰當地定義文件,需要考慮有關文件的操作。操作系統提供系統調用,它對文件進行創建、寫、讀、重定位、搠除和截斷等操作。

所謂的「邏輯結構」,就是指在用戶看來,文件內部的數據應該是如何組織起來的。而「物理結構」指的是在操作系統看來,文件的數據是如何存放在外存中的。

無結構文件:文件內部的數據就是一系列二進制流或字元流組成。又稱「流式文件」

文件內部的數據其實就是一系列字元流,沒有明顯的結構特性。因此也不用探討無結構文件的「邏輯結構」問題。

有結構文件:由一組相似的記錄組成,又稱「記錄式文件」。每條記錄又若干個數據項組成。 [1] 一般來說,每條記錄有一個數據項可作為關鍵字。根據各條記錄的長度(佔用的存儲空間)是否相等,又可分為定長記錄和可變長記錄兩種。有結構文件按記錄的組織形式可以分為:

對於含有N條記錄的順序文件,查找某關鍵字值的記錄時,平均需要查找N/2次。在索引順序文件中,假設N條記錄分為√N組,索引表中有√N個表項,每組有√N條記錄,在查找某關鍵字值的記錄時,先順序查找索引表,需要查找√N /2次,然後在主文件中對應的組中順序查找,也需要查找√N/2次,因此共需查找√N/2+√N/2=√N次。顯然,索引順序文件提高了查找效率,若記錄數很多,則可採用兩級或多級索引

FCB的有序集合稱為「文件目錄」,一個FCB就是一個文件目錄項。FCB中包含了文件的基本信息(文件名、物理地址、邏輯結構、物理結構等),存取控制信息(是否可讀/可寫、禁止訪問的用戶名單等),使用信息(如文件的建立時間、修改時間等)。最重要,最基本的還是文件名、文件存放的物理地址。

對目錄的操作如下:

操作的時候,可以有以下幾種目錄結構:

早期操作系統並不支持多級目錄,整個系統中只建立一張目錄表,每個文件佔一個目錄項。

單級目錄實現了「按名存取」,但是不允許文件重名。在創建一個文件時,需要先檢查目錄表中有沒有重名文件,確定不重名後才能允許建立文件,並將新文件對應的目錄項插入目錄表中。顯然, 單級目錄結構不適用於多用戶操作系統。

早期的多用戶操作系統,採用兩級目錄結構。分為主文件目錄(MFD,Master File Directory)和用戶文件目錄(UFD,User Flie Directory)。

允許不同用戶的文件重名。文件名雖然相同,但是對應的其實是不同的文件。兩級目錄結構允許不同用戶的文件重名,也可以在目錄上實現實現訪問限制(檢查此時登錄的用戶名是否匹配)。但是兩級目錄結構依然缺乏靈活性,用戶不能對自己的文件進行分類

用戶(或用戶進程)要訪問某個文件時要用文件路徑名標識文件,文件路徑名是個字元串。各級目錄之間用「/」隔開。從根目錄出發的路徑稱為絕對路徑。

系統根據絕對路徑一層一層地找到下一級目錄。剛開始從外存讀入根目錄的目錄表;找到目錄的存放位置後,從外存讀入對應的目錄表;再找到目錄的存放位置,再從外存讀入對應目錄表;最後才找到文件的存放位置。整個過程需要3次讀磁碟I/O操作。

很多時候,用戶會連續訪問同一目錄內的多個文件,顯然,每次都從根目錄開始查找,是很低效的。因此可以設置一個「當前目錄」。此時已經打開了的目錄文件,也就是說,這張目錄表已調入內存,那麼可以把它設置為「當前目錄」。當用戶想要訪問某個文件時,可以使用從當前目錄出發的「相對路徑」

可見,引入「當前目錄」和「相對路徑」後,磁碟I/O的次數減少了。這就提升了訪問文件的效率。

樹形目錄結構可以很方便地對文件進行分類,層次結構清晰,也能夠更有效地進行文件的管理和保護。但是,樹形結構不便於實現文件的共享。為此,提出了「無環圖目錄結構」。

可以用不同的文件名指向同一個文件,甚至可以指向同一個目錄(共享同一目錄下的所有內容)。需要為每個共享結點設置一個共享計數器,用於記錄此時有多少個地方在共享該結點。用戶提出刪除結點的請求時,只是刪除該用戶的FCB、並使共享計數器減1,並不會直接刪除共享結點。只有共享計數器減為0時,才刪除結點。

其實在查找各級目錄的過程中只需要用到「文件名」這個信息,只有文件名匹配時,才需要讀出文件的其他信息。因此可以考慮讓目錄表「瘦身」來提升效率。

當找到文件名對應的目錄項時,才需要將索引結點調入內存,索引結點中記錄了文件的各種信息,包括文件在外存中的存放位置,根據「存放位置」即可找到文件。存放在外存中的索引結點稱為「磁碟索引結點」,當索引結點放入內存後稱為「內存索引結點」。相比之下內存索引結點中需要增加一些信息,比如:文件是否被修改、此時有幾個進程正在訪問該文件等。

為文件設置一個「口令」(如:abc112233),用戶請求訪問該文件時必須提供「口令」。

優點:保存口令的空間開銷不多,驗證口令的時間開銷也很小。

缺點:正確的「口令」存放在系統內部,不夠安全。

使用某個「密碼」對文件進行加密,在訪問文件時需要提供正確的「密碼」才能對文件進行正確的解密。 [3]

優點:保密性強,不需要在系統中存儲「密碼」

缺點:編碼/解碼,或者說加密/解密要花費一定時間。

在每個文件的FCB(或索引結點)中增加一個訪問控制列表(Access-Control List, ACL),該表中記錄了各個用戶可以對該文件執行哪些操作。

有的計算機可能會有很多個用戶,因此訪問控制列表可能會很大,可以用精簡的訪問列表解決這個問題

精簡的訪問列表:以「組」為單位,標記各「組」用戶可以對文件執行哪些操作。當某用戶想要訪問文件時,系統會檢查該用戶所屬的分組是否有相應的訪問許可權。

索引結點,是一種文件目錄瘦身策略。由於檢索文件時只需用到文件名,因此可以將除了文件名之外的其他信息放到索引結點中。這樣目錄項就只需要包含文件名、索引結點指針。

索引結點中設置一個鏈接計數變數count,用於表示鏈接到本索引結點上的用戶目錄項數。

當User3訪問「ccc」時,操作系統判斷文件「ccc」屬於Link類型文件,於是會根據其中記錄的路徑層層查找目錄,最終找到User1的目錄表中的「aaa」表項,於是就找到了文件1的索引結點。

類似於內存分頁,磁碟中的存儲單元也會被分為一個個「塊/磁碟塊/物理塊」。很多操作系統中,磁碟塊的大小與內存塊、頁面的大小相同

內存與磁碟之間的數據交換(即讀/寫操作、磁碟I/O)都是以「塊」為單位進行的。即每次讀入一塊,或每次寫出一塊

在內存管理中,進程的邏輯地址空間被分為一個一個頁面同樣的,在外存管理中,為了方便對文件數據的管理,文件的邏輯地址空間也被分為了一個一個的文件「塊」。於是文件的邏輯地址也可以表示為(邏輯塊號,塊內地址)的形式。用戶通過邏輯地址來操作自己的文件,操作系統要負責實現從邏輯地址到物理地址的映射

連續分配方式要求每個文件在磁碟上佔有一組連續的塊。用戶給出要訪問的邏輯塊號,操作系統找到該文件對應的目錄項(FCB)——可以直接算出邏輯塊號對應的物理塊號,物理塊號=起始塊號+邏輯塊號。還需要檢查用戶提供的邏輯塊號是否合法(邏輯塊號≥ 長度就不合法)因此 連續分配支持順序訪問和直接訪問 (即隨機訪問)

讀取某個磁碟塊時,需要移動磁頭。訪問的兩個磁碟塊相隔越遠,移動磁頭所需時間就越長。 連續分配的文件在順序讀/寫時速度最快,物理上採用連續分配的文件不方便拓展,且存儲空間利用率低,會產生難以利用的磁碟碎片可以用緊湊來處理碎片,但是需要耗費很大的時間代價。。

鏈接分配採取離散分配的方式,可以為文件分配離散的磁碟塊。分為隱式鏈接和顯式鏈接兩種。

用戶給出要訪問的邏輯塊號i,操作系統找到該文件對應的目錄項(FCB)…從目錄項中找到起始塊號(即0號塊),將0號邏輯塊讀入內存,由此知道1號邏輯塊存放的物理塊號,於是讀入1號邏輯塊,再找到2號邏輯塊的存放位置……以此類推。因此,讀入i號邏輯塊,總共需要i+1次磁碟I/O。

採用鏈式分配(隱式鏈接)方式的文件,只支持順序訪問,不支持隨機訪問,查找效率低。另外,指向下一個盤塊的指針也需要耗費少量的存儲空間。但是,採用隱式鏈接的鏈接分配方式,很方便文件拓展。另外,所有的空閑磁碟塊都可以被利用,不會有碎片問題,外存利用率高。

把用於鏈接文件各物理塊的指針顯式地存放在一張表中。即文件分配表(FAT,File Allocation Table)

一個磁碟僅設置一張FAT 。開機時,將FAT讀入內存,並常駐內存。FAT的各個表項在物理上連續存儲,且每一個表項長度相同,因此「物理塊號」欄位可以是隱含的。

從目錄項中找到起始塊號,若i>0,則查詢內存中的文件分配表FAT,往後找到i號邏輯塊對應的物理塊號。 邏輯塊號轉換成物理塊號的過程不需要讀磁碟操作。

採用鏈式分配(顯式鏈接)方式的文件,支持順序訪問,也支持隨機訪問 (想訪問i號邏輯塊時,並不需要依次訪問之前的0 ~ i-1號邏輯塊), 由於塊號轉換的過程不需要訪問磁碟,因此相比於隱式鏈接來說,訪問速度快很多。顯然,顯式鏈接也不會產生外部碎片,也可以很方便地對文件進行拓展。

索引分配允許文件離散地分配在各個磁碟塊中,系統會為每個文件建立一張索引表,索引表中記錄了文件的各個邏輯塊對應的物理塊(索引表的功能類似於內存管理中的頁表——建立邏輯頁面到物理頁之間的映射關系)。索引表存放的磁碟塊稱為索引塊。文件數據存放的磁碟塊稱為數據塊。

在顯式鏈接的鏈式分配方式中,文件分配表FAT是一個磁碟對應一張。而索引分配方式中,索引表是一個文件對應一張。可以用固定的長度表示物理塊號 [4] ,因此,索引表中的「邏輯塊號」可以是隱含的。

用戶給出要訪問的邏輯塊號i,操作系統找到該文件對應的目錄項(FCB)…從目錄項中可知索引表存放位置,將索引表從外存讀入內存,並查找索引表即可只i號邏輯塊在外存中的存放位置。

可見, 索引分配方式可以支持隨機訪問。文件拓展也很容易實現 (只需要給文件分配一個空閑塊,並增加一個索引表項即可)但是 索引表需要佔用一定的存儲空間

索引塊的大小是一個重要的問題,每個文件必須有一個索引塊,因此索引塊應盡可能小,但索引塊太小就無法支持大文件,可以採用以下機制:

空閑表法適用於「連續分配方式」。分配磁碟塊:與內存管理中的動態分區分配很類似,為一個文件分配連續的存儲空間。同樣可採用首次適應、最佳適應、最壞適應等演算法來決定要為文件分配哪個區間。回收磁碟塊:與內存管理中的動態分區分配很類似,當回收某個存儲區時需要有四種情況——①回收區的前後都沒有相鄰空閑區;②回收區的前後都是空閑區;③回收區前面是空閑區;④回收區後面是空閑區。總之,回收時需要注意表項的合並問題。

操作系統保存著鏈頭、鏈尾指針。如何分配:若某文件申請K個盤塊,則從鏈頭開始依次摘下K個盤塊分配,並修改空閑鏈的鏈頭指針。如何回收:回收的盤塊依次掛到鏈尾,並修改空閑鏈的鏈尾指針。適用於離散分配的物理結構。為文件分配多個盤塊時可能要重復多次操作

操作系統保存著鏈頭、鏈尾指針。如何分配:若某文件申請K個盤塊,則可以採用首次適應、最佳適應等演算法,從鏈頭開始檢索,按照演算法規則找到一個大小符合要求的空閑盤區,分配給文件。若沒有合適的連續空閑塊,也可以將不同盤區的盤塊同時分配給一個文件,注意分配後可能要修改相應的鏈指針、盤區大小等數據。如何回收:若回收區和某個空閑盤區相鄰,則需要將回收區合並到空閑盤區中。若回收區沒有和任何空閑區相鄰,將回收區作為單獨的一個空閑盤區掛到鏈尾。 離散分配、連續分配都適用。為一個文件分配多個盤塊時效率更高

位示圖:每個二進制位對應一個盤塊。在本例中,「0」代表盤塊空閑,「1」代表盤塊已分配。位示圖一般用連續的「字」來表示,如本例中一個字的字長是16位,字中的每一位對應一個盤塊。因此可以用(字型大小,位號)對應一個盤塊號。當然有的題目中也描述為(行號,列號)

盤塊號、字型大小、位號從0開始,若n表示字長,則

如何分配:若文件需要K個塊,①順序掃描位示圖,找到K個相鄰或不相鄰的「0」;②根據字型大小、位號算出對應的盤塊號,將相應盤塊分配給文件;③將相應位設置為「1」。如何回收:①根據回收的盤塊號計算出對應的字型大小、位號;②將相應二進制位設為「0」

空閑表法、空閑鏈表法不適用於大型文件系統,因為空閑表或空閑鏈表可能過大。UNIX系統中採用了成組鏈接法對磁碟空閑塊進行管理。文件卷的目錄區中專門用一個磁碟塊作為「超級塊」,當系統啟動時需要將超級塊讀入內存。並且要保證內存與外存中的「超級塊」數據一致。

進行Create系統調用時,需要提供的幾個主要參數:

操作系統在處理Create系統調用時,主要做了兩件事:

進行Delete系統調用時,需要提供的幾個主要參數:

操作系統在處理Delete系統調用時,主要做了幾件
事:

在很多操作系統中,在對文件進行操作之前,要求用戶先使用open系統調用「打開文件」,需要提供的幾個主要參數:

操作系統在處理open系統調用時,主要做了幾件事:

進程使用完文件後,要「關閉文件」

操作系統在處理Close系統調用時,主要做了幾件事:

進程使用read系統調用完成寫操作。需要指明是哪個文件(在支持「打開文件」操作的系統中,只需要提供文件在打開文件表中的索引號即可),還需要指明要讀入多少數據(如:讀入1KB)、指明讀入的數據要放在內存中的什麼位置。操作系統在處理read系統調用時,會從讀指針指向的外存中,將用戶指定大小的數據讀入用戶指定的內存區域中。

進程使用write系統調用完成寫操作,需要指明是哪個文件(在支持「打開文件」操作的系統中,只需要提供文件在打開文件表中的索引號即可),還需要指明要寫出多少數據(如:寫出1KB)、寫回外存的數據放在內存中的什麼位置操作系統在處理write系統調用時,會從用戶指定的內存區域中,將指定大小的數據寫回寫指針指向的外存。

尋找時間(尋道時間)T S :在讀/寫數據前,將磁頭移動到指定磁軌所花的時間。

延遲時間T R :通過旋轉磁碟,使磁頭定位到目標扇區所需要的時間。設磁碟轉速為r(單位:轉/秒,或轉/分),則平均所需的延遲時間

傳輸時間T t :從磁碟讀出或向磁碟寫入數據所經歷的時間,假設磁碟轉速為r,此次讀/寫的位元組數為b,每個磁軌上的位元組數為N。則

總的平均存取時間Ta

延遲時間和傳輸時間都與磁碟轉速相關,且為線性相關。而轉速是硬體的固有屬性,因此操作系統也無法優化延遲時間和傳輸時間,但是操作系統的磁碟調度演算法會直接影響尋道時間

根據進程請求訪問磁碟的先後順序進行調度。

優點:公平;如果請求訪問的磁軌比較集中的話,演算法性能還算過的去
缺點:如果有大量進程競爭使用磁碟,請求訪問的磁軌很分散,則FCFS在性能上很差,尋道時間長。

SSTF演算法會優先處理的磁軌是與當前磁頭最近的磁軌。可以保證每次的尋道時間最短,但是並不能保證總的尋道時間最短。(其實就是貪心演算法的思想,只是選擇眼前最優,但是總體未必最優)

優點:性能較好,平均尋道時間短
缺點:可能產生「飢餓」現象

SSTF演算法會產生飢餓的原因在於:磁頭有可能在一個小區域內來回來去地移動。為了防止這個問題,可以規定,只有磁頭移動到最外側磁軌的時候才能往內移動,移動到最內側磁軌的時候才能往外移動。這就是掃描演算法(SCAN)的思想。由於磁頭移動的方式很像電梯,因此也叫電梯演算法。

優點:性能較好,平均尋道時間較短,不會產生飢餓現象
缺點:①只有到達最邊上的磁軌時才能改變磁頭移動方向②SCAN演算法對於各個位置磁軌的響應頻率不平均

掃描演算法(SCAN)中,只有到達最邊上的磁軌時才能改變磁頭移動方向,事實上,處理了184號磁軌的訪問請求之後就不需要再往右移動磁頭了。LOOK調度演算法就是為了解決這個問題,如果在磁頭移動方向上已經沒有別的請求,就可以立即改變磁頭移動方向。(邊移動邊觀察,因此叫LOOK)

優點:比起SCAN演算法來,不需要每次都移動到最外側或最內側才改變磁頭方向,使尋道時間進一步縮短

SCAN演算法對於各個位置磁軌的響應頻率不平均,而C-SCAN演算法就是為了解決這個問題。規定只有磁頭朝某個特定方向移動時才處理磁軌訪問請求,而返回時直接快速移動至起始端而不處理任何請求。

優點:比起SCAN來,對於各個位置磁軌的響應頻率很平均。
缺點:只有到達最邊上的磁軌時才能改變磁頭移動方向,另外,比起SCAN演算法來,平均尋道時間更長。

C-SCAN演算法的主要缺點是只有到達最邊上的磁軌時才能改變磁頭移動方向,並且磁頭返回時不一定需要返回到最邊緣的磁軌上。C-LOOK演算法就是為了解決這個問題。如果磁頭移動的方向上已經沒有磁軌訪問請求了,就可以立即讓磁頭返回,並且磁頭只需要返回到有磁軌訪問請求的位置即可。

優點:比起C-SCAN演算法來,不需要每次都移動到最外側或最內側才改變磁頭方向,使尋道時間進一步縮短

磁碟地址結構的設計:

Q:磁碟的物理地址是(柱面號,盤面號,扇區號)而不是(盤面號,柱面號,扇區號)

A:讀取地址連續的磁碟塊時,採用(柱面號,盤面號,扇區號)的地址結構可以減少磁頭移動消耗的時間

減少延遲時間的方法:

Step 1:進行低級格式化(物理格式化),將磁碟的各個磁軌劃分為扇區。一個扇區通常可分為頭、數據區域(如512B大小)、尾三個部分組成。管理扇區所需要的各種數據結構一般存放在頭、尾兩個部分,包括扇區校驗碼(如奇偶校驗、CRC循環冗餘校驗碼等,校驗碼用於校驗扇區中的數據是否發生錯誤)

Step 2:將磁碟分區,每個分區由若干柱面組成(即分為我們熟悉的C盤、D盤、E盤)

Step 3:進行邏輯格式化,創建文件系統。包括創建文件系統的根目錄、初始化存儲空間管理所用的數據結構(如位示圖、空閑分區表)

計算機開機時需要進行一系列初始化的工作,這些初始化工作是通過執行初始化程序(自舉程序)完成的

初始化程序可以放在ROM(只讀存儲器)中。ROM中的數據在出廠時就寫入了,並且以後不能再修改。ROM中只存放很小的「自舉裝入程序」,完整的自舉程序放在磁碟的啟動塊(即引導塊/啟動分區)上,啟動塊位於磁碟的固定位置,開機時計算機先運行「自舉裝入程序」,通過執行該程序就可找到引導塊,並將完整的「自舉程序」讀入內存,完成初始化。擁有啟動分區的磁碟稱為啟動磁碟或系統磁碟(C:盤)

對於簡單的磁碟,可以在邏輯格式化時(建立文件系統時)對整個磁碟進行壞塊檢查,標明哪些扇區是壞扇區,比如:在FAT表上標明。(在這種方式中,壞塊對操作系統不透明)。

對於復雜的磁碟,磁碟控制器(磁碟設備內部的一個硬體部件)會維護一個壞塊鏈表。在磁碟出廠前進行低級格式化(物理格式化)時就將壞塊鏈進行初始化。會保留一些「備用扇區」,用於替換壞塊。這種方案稱為扇區備用。且這種處理方式中,壞塊對操作系統透明