歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

第四部分:Linux 存儲管理

第10章 文件系統接口

文件系統:提供了在線存儲和訪問計算機操作系統和所有用戶的程序與數據機制。文件系統由:文件和目錄結構組成。

10.1 文件概念

文件:操作系統提供的信息存儲的統一接口。操作系統對存儲設備的各種屬性加以抽象,從而定義了邏輯單元(文件),再將文件映射到物理設備上。

文件是記錄在外存上的相關信息的具有名稱的集合。從用戶角度而言,文件是邏輯外存的最小份分配單元。

10.1.1 文件屬性

文件屬性

名稱 標識符 類型 位置 大小 保護 時間、日期和用戶標識

10.1.2 文件操作

文件屬於抽象數據類型,相關文件操作:

創建文件 寫文件 讀文件 在文件內重定位 刪除文件 截短文件

文件打開信息:

文件指針 文件打開計數器 文件磁盤位置 訪問權限

文件鎖:允許一個進程鎖住文件,以防止其他進程訪問它。

共享鎖(shared lock):類似讀者鎖,可供多個進程並發獲取;

專用鎖(exclusive lock):類似於寫者鎖,只有一個進程可獲取此鎖。

操作系統可提供強制(mandatory)建議(advisory)文件加鎖機制。

10.2 文件訪問方法

順序訪問 直接訪問(相對訪問):文件由固定長度的邏輯記錄組成,以允許程序按任意順序進行快速度和寫。直接訪問方式是基於文件的磁盤模型,其允許對任意文件塊進行隨機讀和寫。 直接訪問文件可立即范文大量信息。
3.其他訪問:創建文件索引(包括各塊指針),首先搜索索引,再根據指針直接訪問文件,以查找所需要的記錄。

10.3 目錄結構

目錄概述:目錄可看做符號表,它能將文件名稱轉換成目錄條目。

定義目錄邏輯結構的常用方案:

單層結構目錄 雙層目錄結構:為每個用戶創建獨立目錄,即每個用戶都有自己的用戶文件目錄(user file directory,UFD)。其解決了名稱沖突的問題,但其仍有缺點:該結構能有效的對用戶加以隔離。這種隔離在用戶需要完全獨立時是優點,但是在用戶需要在某個任務上進行合作和訪問其他文件時確實個缺點。 樹狀目錄結構:樹是最常用的目錄結構。樹有根目錄,系統內的每一個問價都有唯一路徑名。(絕對路徑名,相對路徑名) 無環圖目錄:允許目錄含有共享子目錄和文件。實現共享文件的方法:(1) UNIX:創建一個稱為鏈接的新目錄條目,即是另一個文件或目錄的指針。其次,共享文件的另一方法為:共享目錄中重復所有共享文件的信息。 通用圖目錄:無環圖主要優點是可用簡單的算法遍歷圖,並確定是否存在文件引用。有環時,存在自我引用,需要進行垃圾收集。

10.5 文件共享

10.5.1 多用戶

為實現共享和保護,大多數系統采用文件(或目錄)擁有者(或用戶)和 的概念。擁有者是目錄最高控制權的用戶,可以改變屬性和授權訪問。屬性定義對文件擁有相同權限的用戶子集。

10.5.2 遠程文件系統

遠程文件的共享方式:
1. 用戶通過程序(ftp)可實現在機器之間進行文件的人工傳輸。
2. 分布式文件系統(DFS),遠程目錄可直接從本機上訪問。
3. 萬維網

ftp可用於匿名訪問和驗證訪問。匿名訪問允許用戶在沒有遠程系統賬號的情況下傳輸文件。
1. 客戶機-服務器模型
遠程文件系統允許一台計算機安裝一台或多台遠程機器上的一個或多個文件系統。 NFS(網絡文件系統)
2. 分布式信息系統

為了便於管理客戶機-服務器服務,分布式信息系統也稱為分布式命名服務,用來提供用於遠程計算所需的信息的統一訪問。域名系統(DFS)為整個Internet提供了主機名稱到網絡地址之間的轉換。
3. 故障模式

10.5.3 一致性語義

一致性語義(consistency semantics):是評估文件系統對文件共享支持的一個重要准則

UNIX語義 回話語義:AFS文件系統 不可修改共享文件語義

10.6 保護

10.6.1 訪問類型

通過訪問控制(controlled限制可進行的文件訪問類型控制。

10.6.2 訪問控制

解決保護問題最為常用的方法是根據用戶身份就行控制。實現基於身份訪問的最為普通方法是為每個問價和目錄增加一個訪問控制列表(access-control list,ACL),以給定每個用戶名及其所允許的訪問控制類型。

第11章 文件系統實現

文件系統提供了在線存儲和訪問包括數據和程序在內的文件內容的機制。文件系統永久地駐留在外存上,外存可以永久存儲大量數據。

11.1 文件系統結構

磁盤提供大量的外存空間來維持文件系統,磁盤的兩個特點,使其成為存儲多個文件的方便介質:
1. 可以原地重寫
2. 可以直接訪問磁盤上的任意一塊信息。

為了改善I/O效率,內存與磁盤之間的I/O轉移是以塊為單位的,每塊為一個或多個扇區,根據磁盤驅動器的不同,扇區從32~4096B不等,通常為512B.

文件系統由不同的層組成:應用軟件->邏輯文件系統->文件組織系統->基本文件系統->I/O控制->設備

I/O控制為最底層,由設備驅動程序和中斷處理程序組成,實現內存與磁盤之間的信息傳輸。

基本文件系統:只需向合適的設備驅動程序發送一般命令就可對磁盤上問了塊進行讀寫。

文件組織模塊:知道文件及其邏輯塊和物理塊。

邏輯文件系統:管理元數據,元數據包括文件系統的所有結構數據,而不包括實際數據(或文件內容)。邏輯文件系統通過文件控制塊來維護文件結構。文件控制塊(file control block,FCB)包含文件的信息,如擁有者,權限,文件內容的位置。

11.2 文件系統實現

11.2.1 概述

文件系統結構:

(每個卷的)引導控制塊(boot control block):包括系統從該卷引導操作系統所需要的信息。UFS稱之為引導快(boot block),NTFS (New Technology File System),是 WindowsNT 環境的文件系統,其稱之為分區引導扇區(partition boot sector)(每個卷的卷控制塊(volume control block)包括卷(或分區)的詳細信息,如分區的塊數,塊的大小,空閒塊的數量和指針。UFS稱之為超級塊(super block),而在NTFS中它存儲在主控文件表(Master File Table)中。 每個文件系統的目錄結構用來組織文件。UFS包含文件名和先關的索引結點(inode)號。NTFS中它存儲在主控文件表中。

11.2.2 分區與安裝

磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。
磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。

分區可以是“生的”(raw),即沒有文件系統,或者“熟的”(cooked)即含有文件系統。“生”磁盤(raw disk)用於沒有合適文件系統的地方。

根分區(root partition):把偶偶操作系統內核或其他系統文件,在引導時裝入內存。

11.2.3 虛擬文件系統

采用數據結構和子程序,可以分開基本系統調用的功能和實現細節。因此文件系統實現包括三個層次:

第一層:文件系統接口:open(),read(),write()和close()以及文件描述符等待。

第二層:虛擬文件系統(VFS),它有兩個目的:

VFS層通過定義一個清晰的VFS接口,以將文件系統的統一操作和具體實現分開。多個VFS接口的實現可以共存在同一台機器上,它允許訪問已裝在本地的多個文件系統。 VFS提供了在網絡上唯一標識一個文件機制。VFS基於稱為vnode的文件表示結構

第三層:文件系統類型或遠程文件系統協議。

Linux VFS定義的4中主要對象類型是:

索引結點對象(inode object):表示一個單獨的文件 文件對象(file object):表示一個打開的文件 超級塊對象(superblock object):表示整個文件系統 目錄條目對象(dentry object):表示一個單獨的目錄條目。

11.3 目錄實現

目錄分配和目錄管理算法的選擇對文件系統的效率、性能和可靠性有很大的影響。

線性列表:最為簡單的方法,就是使用存儲文件名和數據塊指針的線性列表。特點:編程簡單但運行時較為費時。 哈希表:哈希表根據文件名得到一個值,並返回一個指針指向線性表中元素的指針。因此,它大大較少目錄搜索時間。插入刪除較簡單,不過需要預備措施來避免沖突(collision)(兩個文件名哈希到相同的位置)。缺點:固定的大小和哈希函數對大小的依賴性。

11.4 分配方法

磁盤空間分配方法:

連續分配(contiguous allocation):要求每個文件在磁盤上占有一組連續的塊。連續分配支持順序訪問和直接訪問,但存在外部碎片,及無法預估文件分配大小的空間。

鏈接分配(linked allocation):解決了連續分配的所有問題。采用連接分配,每個文件是磁盤塊的鏈表。目錄包括文件的第一個指針和最後一個指針。每塊都有指向下一塊的指針。優點:沒有外部碎片,無需說明文件大小,無需合並磁盤空間。缺點:只能有效的用於文件的順序訪問,不能有效支持文件的直接訪問;其次,指針需要空間。解決辦法:將多個塊組成簇(cluster),並按簇而不是塊來分配,有效改善磁盤訪問 時間,但增加了內部碎片;其次,是可靠性問題,指針出錯,解決方案:雙向鏈表。

一個采用鏈表分配的變種是:文件分配表(FAT)的使用。用於MS-DOS和OS/2操作系統。每個卷的開始部分用於存儲該FAT.每塊都在該表有一項,該表可以通過塊號碼來索引。

索引分配:通過把所有的指針放在一起,解決了直接訪問問題。每個文件都有索引塊,這是一個磁盤地址的數組。索引分配支持直接訪問,且沒有外部碎片,但由於要存儲每個文件的索引快,所以比較浪費空間。
如何確認索引塊的大小:

鏈接方案:一個索引塊通常為一個磁盤塊。因此它本身能直接讀寫。為了處理大文件,可以將多個索引快鏈接起來。 多層索引:鏈接表示的一種變種是用第一層索引塊指向一組第二層的索引塊,第二層索引塊再指向文件塊。 組合方案:在UFS中,使用一個方案是將索引塊的頭15個指針存在文件的inode中。其中頭12個指針指向直接塊,即他們包括了能存儲文件數據的塊地址。因此文件不超過12塊的小文件不需要其他索引塊。其他3個指針指向間接塊。第一個個間接塊指針為一級間接塊地址;緊接著是一個二級間接塊指針;最後是三級間接指針

11.5 空閒空間管理

空閒空間表:

位向量:空閒空間表實現為:位圖(bit map)位向量(bit vector) 鏈表 計數

11.9 NFS

NFS是用於通過局域網(或廣域網)訪問遠程文件的軟件系統的實現和規范。
NFS設計的目標之一是允許在不同機器、操作系統和網絡結構的異構環境中工作。NFS規范與這些無關,因此允許其他實現。RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

NFS規范區分兩種服務:
1. 由安裝機制所提供服務(安裝協議)
2. 遠程文件訪問協議(NFS協議)

11.9.2 安裝協議

安裝協議(mount protocol):在客戶機和服務器之間建立初始邏輯鏈接。

第12章 大容量存儲器結構

12.1 大容量存儲結構簡介

12.1.1 磁盤

磁盤(magnetic disk):為現代計算機系統提供了大容量的外存。

磁盤驅動器通過一組稱為I/O總線的線與計算機相連。有多種可用總線,包括EIDE(enhanced integrated drive electronics),ATA(advanced technology attachment),串行ATA(serial ATA,SATA),
USB(universial

12.6 交換空間管理

交換空間管理:虛擬內存使用磁盤空間作為內存擴展。交換空間設計和實現的目的主要是為虛擬內存提供最佳吞吐量。

12.6.1 交換空間的使用

可將交換空間用於保存整個進程映像,包括代碼段和數據段; 換頁系統也可能只用交換空間以存儲換出內存頁。

12.6.2 交換空間位置

交換空間可以有兩個位置:
1. 在普通文件系統上加以創建:實現簡單,但效率低,遍布目錄結構和磁盤分配數據結構需要時間和過多磁盤的訪問。
2. 交換空間可以創建在獨立的生(raw)磁盤分區上。只需要一個獨立的交換存儲管理器以分配和釋放塊。

12.7 RAID結構

磁盤冗余陣列(Redundant Arrays of Independent Disks,RAID):有“獨立磁盤構成的具有冗余能力的陣列”之意。磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上是把相同的數據存儲在多個硬盤的不同的地方(因此,冗余地)的方法。通過把數據放在多個硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能。因為多個硬盤增加了平均故障間隔時間(MTBF),儲存冗余數據也增加了容錯。

通過冗余改善可靠性 通過並行處理改善性能

12.7.3 RAID級別

鏡像提供高可靠性,但昂貴;分散提供了高數據傳輸率,但並未改善可靠性。

通過磁盤分散和“奇偶”位可以提供多種方案以在地代價環境下提供冗余。

RAID級別0:指按塊級別分散的磁盤陣列,但沒有冗余。 RAID級別1:磁盤鏡像 RAID級別2內存方式的差錯糾正代碼結構,內存系統一直實現了基於奇偶為的錯誤檢測。 RAID級別3:基於位交織奇偶結構對級別2進行了改進。與內存系統不同,磁盤控制器能檢測到一個扇區是否正確讀取,這樣單個奇偶位就可用於差錯檢測和差錯糾正。 RAID級別4:基於塊交織奇偶結構 RAID級別5:基於塊交織奇偶結構,但它是將數據和奇偶分布在所有N+1塊磁盤上。 RAID級別6p+Q冗余方案,保存了額外冗余信息以防止多個磁盤出錯。不是使用奇偶校驗,而是使用了差錯糾正碼如Read-Solomon碼,每4個位的數據使用了2個冗余位,其容許兩個磁盤出錯。 RAID級別0+1:先分散,再鏡像; RAID級別1+0:先鏡像,再分散。

第13章 I/O輸入系統

計算機有兩個主要任務:I/O操作與計算處理。

13.2 I/O硬件

中斷(interrupt):基本中斷機制工作如下,CPU硬件有一條中斷請求線(Interrupter-request line,IRL)。CPU在執行完每條指令後,都將檢測IRL。當CPU檢測到已經有控制器通過中斷請求線發送了信號,CPU將保存當前狀態並且跳轉到內存固定位置的中斷處理程序(interrupt-controller),中斷處理程序判斷中斷原因,進行必要處理,重新恢復狀態,最後執行中斷返回指令以便使CPU返回中斷以前執行狀態。

中斷機制接受一個地址,用來從一個集合內選擇特定的中斷處理程序。對對大多數系統結構,這個地址時一個稱為中斷向量(interrupt vector)的表中偏移量。該向量包含了特殊中斷處理程序的內存地址。向量中斷機制的目的是用來減少單個中斷處理需要,這些中斷處理搜索所有可能的中斷源以決定哪個中斷需要服務。中斷鏈接(interrupt chain),即中斷向量內的每個元素都指向中斷處理程序列表表頭。

中斷機制也實現了中斷優先級(interrupt priority),該機制能使CPU延遲處理低優先級中斷而不屏蔽所有中斷,也可以讓高優先級中斷搶占低優先級中斷處理。

直接內存訪問(direct-memory access,DMA)控制器:一種專用處理器,對於需要做大量傳輸的設備,用其來觀察狀態位並按字節來向控制器寄存器送入數據。在開始DMA傳輸時,主機向內存中寫入DMA命令塊。該塊包括傳輸的源地址指針,傳輸的目的地指針,傳輸字節數。CPU將該命令塊的地址寫入到DMA後就繼續其他工作。DMA控制器則繼續下去直接操作內存總線,無需主CPU幫助,就可以將地址放到總線以開始傳輸。
隱藏了硬件差異。

13.3 I/O應用接口

設備驅動程序的作用是為內核I/O子系統隱藏設備控制器之間的差異,就如同I/O系統調用通用類型封裝了設備行為,為應用程序隱藏了硬件差異。

13.4 I/O內核子系統

內核提供了許多與I/O相關的服務。許多服務如調度,緩沖,高速緩存,假脫機,設備預留及錯誤處理是由內核I/O子系統提供的,並建立在硬件和設備驅動程序結構之上。I/O子系統還負責保護自己免受錯誤進程和惡意用戶的危害。

I/O調度:操作系統為每個設備維護一個請求隊列來實現調度。支持異步I/O的內核同時也要能夠跟蹤許多I/O請求,操作系統為設備狀態表(device status table)配備等待隊列。 緩沖緩沖區是用來保存兩個設備之間或在設備和應用程序之間所傳輸數據的內存區域。采用緩沖有三個理由:(1)處理數據生產者和消費者之間的速度差異;(2)協調傳輸數據大小不一致的設備;(3)支持應用程序I/O的復制語義。 * 高速緩存(cache)*:是可以保留數據副本的高速存儲器。 假脫機與設備預留:用來保存設備設備輸出的緩沖區,解決多路復用多個並發應用I/O請求 錯誤處理:I/O 系統調用通常返回一個位來表示調用狀態信息,以表示成功或失敗。 I/O保護:為了防止用戶執行非法I/O,定義所有的I/O指令為特權指令,因此用戶不能直接發出I/O指令,它們必須通過操作系統來進行。操作系統在監控模式下,檢查請求是否合法。另外,所有的內存映射和I/O端口內存位置都受到內存保護系統的保護,以阻止用戶訪問。

13.5 把I/O操作轉換成硬件操作

現代操作系統通過對請求與物理設備控制器時間的多級查表獲取設備控制器的端口地址或內存映射地址。

Copyright © Linux教程網 All Rights Reserved