- 什么是文件,以計算機硬盤為載體的存儲在計算上的信息集合,可以是圖片,文本,視頻等。
- 什么是文件系統,
- 文件系統需要完成哪些功能, 實現用戶對文件增刪改查功能
文件的概念
- 文件的定義: 文件是操作系統的一個重要概念,文件是以計算機硬盤為計算機硬盤為載體的存儲在計算上的信息集合,文件可以是文本文檔,圖片,程序等。
- 與進程的區別:在系統運行時,計算機以進程為基本單位進行資源的調度和分配(線程是CPU的最小調度單元); 而在用戶進行輸入,輸出過程中,則是以文件為基本單位。
- 大多數的應用程序的輸入都是通過文件來實現的,其輸出頁都保存在文件中,以便長期存儲將來的訪問。
- 當用戶將文件用於應用程序的輸入和輸出時,還希望可以訪問文件,修改文件,和保存文件,實現對文件的管理和維護,需要操作系統提供一個文件管理系統,操作系統的文件就是用於實現用戶這些管理要求
文件的組成
- 概念: 首先文件需要有一塊存儲空間用於記錄數據,其次由於操作系統管理的數據很多,因此需要對浙西誒數據進行划分,然后貼上標簽,以便用於分類和索引,所以必定包含分類信息和索引信息,最后由於不同的用戶對數據有不同的訪問權限,因此文件必然包含訪問權限的信息.
-
如下圖為Mac上的文件屬性, 類型,大小,位置(路徑),權限,默認打開位置,時間,注釋等.
-
文件中的內容:
- 數據項: 數據項是文件系統中最低級的數據組織形式,可以分為兩種類型
- 基本數據項目: 用於描述一個對象的某種屬性的一個值,如姓名,日期,證件號,是數據中可命名的最小邏輯單位,及原子數據, 一個對象具有多個屬性. 如
class Person{ ..... }
- 組合數據項目: 由多個數據項組合
- 基本數據項目: 用於描述一個對象的某種屬性的一個值,如姓名,日期,證件號,是數據中可命名的最小邏輯單位,及原子數據, 一個對象具有多個屬性. 如
- 記錄: 記錄是一組相關的數據項的集合,用於描述對象在某方面的屬性,如一名考生的報名記錄包括考生姓名,出生日期,報考學好號碼,生份證號碼等一系列組成。
- 文件: 文件是指由創建者所定義的一組相關信息的集合,邏輯上可分為由結構文件和無結構文件, 在有結構文件中文件由一組相似記錄組成,如某學校所有考生的報名信息,又稱為記錄式文件; 而無結構文件則被視為一個字符流,比如一個二進制的文件或者字符文件(純text,binary),又稱為流式文件。
- 數據項: 數據項是文件系統中最低級的數據組織形式,可以分為兩種類型
-
文件可以是數字,字母或者是二進制代碼,基本訪問單元可以是字節,行或記錄,文件可以長期存儲於硬盤或其他二級存儲器中,允許可控制的進程間共享訪問,能夠被組織成復雜的文件結構
-
文件的屬性(File Attributtes)
- 名稱: 文件名稱為宜,以容易讀區的形式保存
- 標識符: 標示文件系統內文件的唯一標簽,通常為數字,是對人不能說的一種秘密,計算機內部約定的一組名稱
- 類型: 被支持不同類型的文件系統所使用
- 位置: 指向設備和設備上文件的指針
- 大小: 文件當前的大小(用字節bit,字或塊表示),也可以包含文件允許的最大值信息(如A,B,C盤)
- 保護: 對文件進行保護的訪問信息,如 分組保護,家長權限保護游戲文件夾權限
-
時間日期和用戶標示: 文件創建,上次修改和上次訪問的相關信息,用於保護和跟蹤文件的使用
所有的文件都保存在目錄結構中(熟稱文件夾),而目錄結構保存在外存上,文件信息在需要時菜調入內存,通常目錄條目包括文件的名稱和唯一標示符,而標示符定義文件的其它屬性
-
文件的基本操作
- 創建文件: 在系統中查找到空間,在目錄中為文件創建條目,該條目記錄文件名稱,在文件系統中的位置及其它可能的信息
- 寫入文件: 為了寫文件,執行一個系統調用,指名文件名稱和寫入文件的內容,對於給定文件名稱,系統搜索目錄以查找文件位置。 系統必須為該文件維護一個寫位置的指針,每當發生寫操作時,便更新寫指針。
- 讀文件: 為了讀文件,執行一個系統調用,知名文件名稱和要讀入文件的內存位置。一個進程通常只能對一個文件讀或者寫,因此當前操作位置可以作為每個進程當前文件位置的指針,讀寫都使用同一個指針,節省了空間,也降低了系統的復雜度
- 文件重定位(文件尋址): 按某條搜索目錄,將當前位置設置為給定值,並且不會讀寫文件
- 刪除文件: 先從目錄中找到要刪除文件的目錄項,使之成為空項,然后回收該文件所占用的存儲空間。
- 截斷文件: 允許文件屬性不變,並刪除文件部分內容
-
文件的打開於關閉
- 在系統在首次使用文件時,使用
open
將指明文件的屬性(如 rw+,path),從外存復制到打開文件表的一個表目中,並將該表目的索引(編號)返回給用戶。操作系統維護一個包含所有打開文件信息的表
(打開文件表, open file table
), - 當用戶要操作一個文件時,可以通過該表的一個索引指定文件,因此省略了搜索緩解,當文件不在使用時,進程可以關閉它,操作系統在打開表中刪除這一條目。
- 大部分操作系統要求在文件使用之前就顯示的被打開,操作
open
會根據文件名搜索目錄,並將目錄條目復制到打開文件表中.而open通常返回一個打開文件表中的一個條目的指針
,通過該指針(而非文件名)進行所有的I/O
操作,並簡化步驟節省資源。 - 系統打開文件表的每個文件時,采用計數器記錄了
open count
,在close
的時候減少count,當count為0的時候,文件將被回收; 若文件被修改過,則將文件寫會外存,並將系統打開文件表中的相應條目刪除,最后釋放文件的文件控制塊(File Control Bloc, FCB) - 綜上,每個打開文件所關聯的信息:
- 文件指針: 跟蹤上次讀寫位置作為當前文件位置的指針,對於打開文的某個進程來說時唯一的,因此必須於磁盤文件屬性分開保存 (類似游標)
- 文件打開計數: 多個進程只能同時打開一個文件,所以需要跟蹤打開和關閉的數量,計數為0時,系統關閉文件,刪除該條目。
- 文件的磁盤位置: 避免重復讀取
- 訪問權限: 每個進程打開文件時都需要有一個訪問模式(create, read,write,add,rw),該信息保存在打開文件表中,以便操作系統能夠允許或拒絕之后的
I/O
請求。
- 在系統在首次使用文件時,使用
文件的邏輯姐筽股
- 無結構文件(流式文件): 字節流,只能窮舉訪問。 字符流,管理簡單,方便用戶操作,基本單位信息操作不多的文件采用字符流的無結構方式,如源文件,目標代碼文件等。
-
有結構文件:
- 順序文件: 順序記錄, (順序存儲,鏈式存儲)
- 索引存儲: 索引表存儲,指針指向文件
索引號 長度 指針 i m0 。。。 -
索引順序文件: 索引和順序結合的兩種方式, 將順序文件中所有的記錄分為若干組,為順序文件建立一張索引表,在索引表中為每組中的第一條記錄建立一個索引項,其中含有該記錄的關鍵字和指向該記錄的指針。
-
索引表
鍵 邏輯地址pr An Qi -
邏輯文件
姓名 其它屬性 An Qi
-
-
直接文件或三裂文件(Hash File): 給定記錄的
key
通過散列函數轉換的鍵值直接決定了物理地址,這種映射結構不同於順序文件或索引文件,沒有順序的特性,散列文件有很高的存儲速度,但是容易起沖突,即不同的關鍵字三裂函數值相同。
目錄結構
-
文件控制塊和索引結點: 與進程管理一樣,為了實現目錄管理,操作系統引入了文件控制塊的數據結構
- 文件控制塊: FCB,存儲文件控制信息的數據結構,實現
按名存取
,PCB的有序集合稱為文件目錄,一個FCB
就是一個文件目錄項目,為了創建一個新的文件,系統將分配一個FCB
並放在文件目錄中,稱為目錄項。 - FCB包含以下幾個信息:
- 基本信息: 如文件名,文件的物理位置,文件的邏輯結構,文件的物理結構
- 存取控制信息: 如文件的權限等
- 使用信息: 如文件的建立時間,修改時間
- 索引結點:
- FCB 64B,盤塊大小1KB,因此每個盤塊中可以包含16個PCB。在UNIX中一個目錄只有16B,其中14B是文件名,2B是i結點指針(索引)
- 存放在磁盤上的索引結點稱為磁盤索引結點,UNIX中每個文件都有一個唯一的磁盤索引結點,包括以下幾個方面
- 文件的主標識符: 擁有該文件的個人或小組的標示符
- 文件類型: 包括普通文件,目錄文件和特別文件
- 文件存儲權限: 各類用戶對該文件的存取權限
- 文件物理地址: 每個索引結點中含有13個地址項,iaddr(0)~iaddr(12),他們可以直接或者間接給出數據文件所在盤塊的編號
- 文件長度,以字節為單位
- 文件鏈接計數
- 文件存取時間
- 文件被打開的時候又新增了一下內容
- 索引結點編號: 用於表示內存索引結點
- 狀態: 只是i結點是否上鎖或者修改
- 訪問計數器: +/-1
- 邏輯設備號: 文件所屬文件系統的邏輯設備號
- 鏈接指針: 設置分別指向空閑表和三裂隊列的指針
- 文件控制塊: FCB,存儲文件控制信息的數據結構,實現
-
目錄結構
- 搜索,創建文件,刪除文件,顯示文件,修改目錄
- 單級目錄結構: 整個文件系統中只建立一張目錄表
- 兩級目錄結構
- 多集目錄結構
- 無環圖目錄結構,如快捷共享,可能一個文件被多處引用,如快捷方式,不便於管理,容易出錯,方便共享
文件共享
- 基於索引結點的共享方式(硬鏈接)
- 利用符號鏈接實現文件共享(軟鏈接)
文件保護
- 訪問類型: w,r,+,-,file list
- 訪問控制: Access Control
- User
- Group
- Other: 口令和密碼 ,
文件系統的實現
常見的文件系統有FAT32,NTFS,ext2,ext3,ext4 ...
文件系統層次結構
由上至下依次執行
- 用戶調用接口, a/d/s/u
- 文件目錄系統: PCB查找
- 存取控制驗證模塊: PCB訪問權限檢查
- 邏輯文件系統與文件信息緩沖區:
- 邏輯文件系統與文件信息緩沖區的主要功能是,根據文件的邏輯結構將用戶要讀寫的邏輯記錄轉換為文件邏輯結構內的相應塊號
- 物理文件系統:
- 把邏輯記錄所在的相對塊號轉換成實際的物理地址
- 輔助分配模塊,分配輔助空間和回收輔存空間
- 設備管理程序模塊
- 設備管理程序模塊的主要功能是分配設備,分配設備讀寫緩沖區,磁盤調度,啟動設備,處理設備中斷,釋放設備讀寫緩沖區,釋放設備等。
目錄實現
- 線性表
- 哈希表
文件的實現
- 分配方式
- 連續分配: 順序鏈表
- 鏈接分配: 鏈式存儲
- 索引分配
- 鏈接方案: 一個索引塊通常稱為一個磁盤塊,因此它本身能直接讀寫,為了處理大文件,可以將多個索引塊鏈接起來
- 多層索引
- 混合索引
- 文件存儲空間管理
- 文件存儲空間的划分與初始化
- 文件存儲器空間管理, 文件存儲設備分為許多大小相同的物理塊,並以塊為單位交換信息。空閑塊的組織,分配與回收
- 空閑表法:屬於連續分配方式,與動態內存類似,同樣可以使用 首次適應算法,循環首次算法。
- 空閑鏈表法: 空閑塊被組成一個鏈表,回收的空間插入鏈尾
- 位圖表示法: 采用一個二進制位來表示磁盤塊的使用情況
- 掃描位圖,找出其值為0的二進制位
- 查找塊號 b=n(i-1)+j (塊號=每行的位數(行數-1)+j列)
- 位圖修改: m[i,j] = 1
- 回收塊號,下標從0開始
i = (b-1)DIV n + 1
j = (b-1)MOD n + 1 - 修改位圖
map[i,j]=0
- 成組鏈接法: 減少鏈表的長度,兼容大型的文件系統
磁盤的組織管理
- Disk: 是由表面塗油磁性物質的金屬或塑料構成的原型盤片,通過一個稱為磁頭的導線圈從磁盤存取數據,在讀寫操作期間,磁頭固定,磁盤在下面高速旋轉,磁盤面上的數據存儲在一組同心圓中,稱為磁道,一個盤面上有上千個磁道,磁道又划分為幾百個扇區,每個扇區固定存儲大小,通常為(512M),相鄰的扇區和磁道存在一定的空隙,避免精度誤差, 從外到里越來越密集,受限於內道最大記錄的密度
- 磁盤安裝在一個驅動上: 由磁頭臂,用於旋轉磁盤的主軸和用於輸入和輸出的電子設置組成,多個盤面堆疊,組成磁盤組,每個盤片對應一個磁頭,所有磁頭固定在一起,與磁盤中心的距離相同且一起移動
- 概念
磁頭(head)
磁道(track)
柱面(cylinder)
扇區(sector)
圓盤(platter)
磁盤調度算法: