操作系統實驗文件管理_系統設計硬核知識(5)——操作系統的文件管理

操作系統對計算機的管理包括兩個方面:硬件資源和軟件資源。硬件資源的管理包括CPU 的管理、存儲器的管理、設備管理等,主要解決硬件資源的有效和合理利用問題。

軟件資源包括各種系統程序、各種應用程序、各種用戶程序,也包括大量的文檔材料、庫函數等。每一種軟件資源本身都是具有一定邏輯意義的相關信息的集合,在操作系統中它們以文件形式存儲。

計算機系統的重要作用之一是能快速處理大量信息,因此數據的組織、存取和保護成為一個極重要的內容。文件系統是操作系統中組織、存取和保護數據的一個重要部分。

文件管理的功能包括:建立、修改、刪除文件;按文件名訪問文件;決定文件信息的存放位置、存放形式及存取權限;管理文件間的聯系及提供對文件的共享、保護和保密等。允許多個用戶協同工作又不引起混亂。

  • 文件的共享是指一個文件可以讓多個用戶共同使用,它可以減少用戶的重復性勞動,節省文件的存儲空間,減少輸入/輸出文件的次數等。
  • 文件的保護主要是為防止由于錯誤操作而對文件造成的破壞。
  • 文件的保密是為了防止未經授權的用戶對文件進行訪問。

文件的保護、保密實際上是用戶對文件的存取權限控制問題。一般為文件的存取設置兩級控制:第 1 級是訪問者的識別,即規定哪些人可以訪問;第 2 級是存取權限的識別,即有權參與訪問者可對文件執行何種操作。

1 文件的邏輯結構

文件的結構是指文件的組織形式,從用戶角度所看到的文件組織形式,稱為文件的邏輯結構。

文件的邏輯組織是為了方便用戶使用。一般文件的邏輯結構可以分為兩種:無結構的字符流文件和有結構的記錄文件。記錄文件由記錄組成,即文件內的信息劃分成多個記錄,以記錄為單位組織和使用信息。

記錄文件有順序文件、索引順序文件、索引文件和直接文件。 (1)順序文件。大多數文件是順序文件。順序文件的記錄定長,記錄中的數據項的類型長度與次序固定,一般還有一個可以唯一標識記錄的數據項,稱為鍵(key),記錄是按鍵值的約定次序組織的。順序文件常用于批處理應用,對于查詢或更新某個記錄的處理性能不太好。 (2)索引順序文件。索引順序文件是基于鍵的約定次序組織的,而且維護鍵的索引和溢出區域。鍵的索引也可以是多級索引。索引順序文件既適用于交互方式應用,也適用于批處理方式應用。 (3)索引文件。索引文件是基于記錄的一個鍵數據項組織的。許多應用需按照別的數據項訪問文件,為此,常采用索引文件方法,即對主文件中的記錄按需要的數據項(一個或幾個)建索引,索引文件本身是順序文件組織。 (4)直接文件。直接文件又稱哈希( Hash)文件。記錄以它們在直接訪問存儲設備上的物理地址直接(隨機地)訪問。直接文件常用于需要高速訪問文件而且每次僅訪問一條記錄的應用中。

2 文件的物理結構

文件的物理結構是指文件在存儲設備上的存放方法。文件的物理結構側重于提高存儲器的利用效率和降低存取時間。文件的存儲設備通常劃分為大小相同的物理塊,物理塊是分配和傳輸信息的基本單位。文件的物理結構涉及文件存儲設備的組塊策略和文件分配策略,決定文件信息在存儲設備上的存儲位置。常用的文件分配策略有:

(1)順序分配(連續分配)。這是最簡單的分配方法。在文件建立時預先分配一組連續的物理塊,然后,按照邏輯文件中的信息(或記錄)順序,依次把信息(或記錄)按順序存儲到物理塊中。這樣,只需知道文件在文件存儲設備上的起始位置和文件長度,就能進行存取,這種分配方法適合于順序存取,在連續存取相鄰信息時,存取速度快。其缺點是在文件 建立時必須指定文件的信息長度,以后不能動態增長,一般不宜用于需要經常修改的文件。

(2)鏈接分配(串聯分配)。這是按單個物理塊逐個進行的。每個物理塊中(一般是最后一個單元)設有一個指針,指向其后續連接的下一個物理塊的地址,這樣,所有的物理塊都被鏈接起來,形成一個鏈接隊列。在建立鏈接文件時,不需要指定文件的長度,在文件的說明信息中,只需指出該文件的第一個物理塊塊號,而且鏈接文件的文件長度可以動態地增 長。只調整物理塊間的指針就可以插入或刪除一個信息塊。 鏈接分配的優點是可以解決存儲器的碎片問題,提高存儲空間利用率。由于鏈接文件只能按照隊列中的鏈接指針順序查找,因此搜索效率低,一般只適用于順序訪問,不適用于隨機存取。 (3)索引分配。這是另一種對文件存儲不連續分配的方法。采用索引分配方法的系統,為每一個文件建立一張索引表,索引表中每一表項指出文件信息所在的邏輯塊號和與之對應的物理塊號。索引分配既可以滿足文件動態增長的要求,又可以方便而迅速地實現隨機存取。對一些大的文件,當索引表的大小超過一個物理塊時,會發生索引表的分配問題。一般采用多級(間接索引)技術,這時在由索引表指出的物理塊中存放的不是文件存放處而是存放文件信息的物理塊地址。如果一個物理塊能夠存儲 n 個地址,則一級間接索引,將可尋址的文件長度變為 【n 的二次方】塊。對于更大的文件可以采用二級甚至三級間接索引(例如, UNIX 操作系統采用三級索引結構)。

4f6e990589fa39c0dae4096533baac3e.png

索引文件的優點是既適用于順序存取,又適用于隨機存取。缺點是索引表增加了存儲空間的開銷。另外,在存取文件時需要訪問兩次磁盤,一次是訪問索引表,另一次是根據索引表提供的物理塊號訪問文件信息。為了提高效率,一種改進的方法是,在對某個文件進行操作之前,預先把索引表調入內存。這樣,文件的存取就能直接從內存的索引表中確定相應的物理塊號,從而只需要訪問一次磁盤。

3 文件存儲設備管理(存儲空間管理)

文件存儲設備管理,就是操作系統要有效地進行存儲空間的管理。由于文件存儲設備是分成許多大小相同的物理塊,并以塊為單位交換信息,因此,文件存儲設備的管理實質上是對空閑塊的組織和管理問題。它包括空閑塊的組織,空閑塊的分配與空閑塊的回收等問題。

有 3 種不同的空閑塊管理方法,它們分別是索引法、鏈接法和位示圖法。

(1)索引法。索引法把空閑塊作為文件并采用索引技術。為了有效,索引對應于一個或由幾個空閑塊構成的空閑區。這樣,磁盤上每一個空閑塊區都對應于索引表中一個條目,這個方法能有效地支持每一種文件分配方法。

(2)鏈接法。鏈接法分為空閑盤塊鏈與空閑盤區鏈兩種:

【1】 空閑盤塊鏈:使用鏈表把空閑塊組織在一起,當申請者需要空閑塊時,分配程序從鏈首開始摘取所需的空閑塊。反之,管理程序把回收的空閑塊逐個掛入隊尾,這個方法適用于每一種文件分配方法。空閑塊的鏈接方法可以按釋放的先后順序鏈接,也可以按空閑塊區的大小順序鏈接。后者有利于獲得連續的空閑塊的請求,但在分配請求和回收空閑塊時系統開銷會多一點。

【2】空閑盤區鏈:將磁盤上所有空閑盤區拉成一條鏈,在每個盤區上包含若干用于指示下一個空閑盤區的指針,指明盤區大小的信息。分配盤塊時,通常采用首次適應算法 ( 顯式鏈接法 )。 在回收時,要將回收區與空閑盤區相合并 。

(3)位示圖法。該方法是在外存上建立一張位示圖(Bitmap),記錄文件存儲器的使用情況。每一位僅對應文件存儲器上的一個物理塊,取值 0 和 1 分別表示空閑和占用。文件存儲器上的物理塊依次編號為: 0、 1、 2、…。假如系統中的一個字的字長為 32 位,也就是說,一個字可以表示 32 個物理塊。假設有 4096 個物理塊,那么需要 128 個字(4096/32=128)來表示這些物理塊。

位示圖是利用二進制的一位來表示磁盤中一個盤塊的使用情況,如圖 2 所示。當其值為“0”時,表示對應的盤塊空閑;為“1”時表示已分配。由所有盤塊對應的位構成一個集合,稱為位示圖。

81edf9750176744e830af1d7fe078b58.png

圖 2 位示圖

示例如下: 某磁盤盤組共有 10 個盤面,每個盤面上有 100個磁道,每個磁道有 32 個扇區,假定物理塊的大小為 2 個扇區,分配以物理塊為單位。

  1. 若使用位圖管理磁盤空間,則位圖需要占用多少字節空間?
  2. 若采用空白文件管理磁盤空間,且空白文件目錄的每個表項占用5個字節,則當空白文件數目大于多少時,空白文件目錄占用的字節數大于位圖占用的字節數?

分析過程:

  • 總扇區數= 10 * 100 * 32=32000 個;每個物理塊 2 個扇區,則總物理塊數 = 32000/2=16000 塊。
  • 假設采用位圖來管理磁盤空間。一個字節通常是 8 位,則所有這些物理塊需要 2000 (16000/8)字節空間。
  • 假設采用空白文件來管理磁盤空間。一個表項占用 5 個字節,那么 2000/5=400,也就是說當空白文件數>400 時,文件目錄所占用的字節數就會大于位圖所占用的字節數。

(4)成組鏈接法 成組鏈接法是將空閑表和空閑鏈表法結合形成的一種空閑盤塊管理方法,適用于大型文件系統。

4 樹型目錄結構

在計算機的文件系統中,一般采用樹型目錄結構。在樹型目錄結構中,樹的根結點為根目錄,數據文件作為樹葉,其他所有目錄均作為樹的結點。

根目錄隱含于一個硬盤的一個分區中,根目錄在最頂層。它包含的子目錄是一級子目錄。每一個一級子目錄又可以包含若干二級子目錄,…,這樣的組織結構就叫作目錄樹。

當前盤和當前目錄是系統默認的操作對象。 如果用戶沒有指明操作對象,系統就將用戶命令指向當前盤和當前目錄。

路徑是指從根目錄或者當前目錄開始到訪問對象(目錄或者文件),在目錄樹中路經的所有目錄的序列。例如“c:emp”就是 Windows 系統中的一條路徑。在樹型目錄結構中,從根目錄到任何數據文件之間,只有一條唯一的通路,從樹根開始,把全部目錄文件名與數據文件名,依次用“ /”( UNIX/Linux 系統)或“ ”( Windows 系統)連接起來,構成該數據文件的路徑名,且每個數據文件的路徑名是唯一的。這樣,便可以解決文件重名問題。

從樹根開始的路徑為絕對路徑,如果文件系統有很多級時,使用不是很方便,所以引入相對路徑,即從當前目錄開始,再逐級通過中間的目錄文件,最后到達所要訪問的數據文件。

絕對路徑給出文件或目錄位置的完全描述,通常由層次結構的頂端開始(根目錄),通常第一個字符是“/”(UNIX/Linux 系統)或者是盤符(Windows 系統)。相對路徑通常由目錄結構中的當前位置開始,一般都比絕對路徑要短。

父目錄是指當前路徑的上一層目錄。每個目錄下都有代表當前目錄的“.”文件和代表當前目錄父目錄的“..”文件,相對路徑名一般就是從“..”開始的。

在 Windows 系統中,有兩種格式的文件,分別是 FAT32 ( FAT16 ) 文件和 NTFS 文件。 NTFS 在使用中產生的磁盤碎片要比 FAT32 少,安全性也更高,而且支持單個文件的容量更大,超過了 4GB , 特別適合現在的大容量存儲。 NTFS 可以支持的分區 ( 如果采用動態磁盤則稱為卷 ) 大小可以達到 2TB ,而 Windows 2000 中的 FAT32 支持分區的大小最大為 32GB。


作者:deniro
鏈接:https://www.jianshu.com/p/e94fc7d228d9
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260409.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260409.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260409.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據

數據庫導入導出時總失敗,錯誤信息如下: 正在驗證 (錯誤) 消息錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據。 (SQL Server 導入和導出向導) 錯誤 0xc0202045: 數據流任務 1: 驗證列元數據失敗。 (SQL Server 導入和導出向導) 錯誤 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】...

今天愛分享給大家帶來Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】,希望能夠幫助到大家。 字典是 Python 語言中唯一的映射類型。映射類型對象里哈希鍵(鍵,key)和指向的對象(值,value)是多對一的關系&am…

大網高級技術筆記(一)

防偽碼;黑發不知勤學早,白首方悔讀書遲本章目標:理解消化動態路由協議與OSPF協議并應用于實際工作中。第一章 動態路由協議一、按照路由執行的算法分類距離矢量路由協議:RIP、IGRP鏈路狀態路由協議:OSPE、IS-IS二、RIP…

容器類基礎篇(一)

容器類:用來解決數組具有固定尺寸而使得靈活性受限的問題。基本的容器類(集合類)有:List、Set、Queue、Map。 Java容器類類庫的用途是用來“保存對象”,這分為兩個不同的大類: 1.Collection(集合…

阿里MySQL讀寫一致_阿里面試題:如何保證緩存與數據庫的雙寫一致性?

作者:你是我的海嘯出處:https://blog.csdn.net/chang384915878/article/details/86756463只要用緩存,就可能會涉及到緩存與數據庫雙存儲雙寫,你只要是雙寫,就一定會有數據一致性的問題,那么你如何解決一致性…

反射小應用之DataTable和ListT互操作

反射小應用之DataTable和List<T>互操作 在程序中&#xff0c;往往會遇到一些小情況&#xff0c;就是數據庫取出來的時候為了方便直接將數據通過存儲在DataSet或DataTable中&#xff0c;這樣做的一個后果是在日后的的對數據進行”細“操作時&#xff0c;就發現它可能沒有L…

python適合什么樣的人群_什么樣的人比較適合選擇Python開發+人工智能技術?

原標題&#xff1a;什么樣的人比較適合選擇Python開發人工智能技術&#xff1f; 互聯網行業最近幾年來確實成為了競相追捧的行業&#xff0c;人工智能、大數據的不斷發展讓Python開發技術成為了繼Java開發之后的又一熱門編程語言。我們都知道&#xff0c;想要學習Python開發編程…

java 8 方法引用(method references)

1 什么是方法引用&#xff08;method references&#xff09;java 8 添加了一個很熟悉但是又很陌生的符號::。 你也許會看到這樣的代碼System.out::println其實就是方法引用&#xff08;method references&#xff09;。由于java 8 把方法/函數也作為第一輸入參數。所以你會看到…

SWT中Button事件的幾種不同寫法

1&#xff0e;匿名內部類寫法button.addSelectionListener(new SelectionAdapter(){Overridepublic void widgetSelected(SelectionEvent e){.....}});釋&#xff1a;當button被單擊時&#xff0c;底層就會檢查button是否注冊了相對就的監聽器&#xff0c;如果有&#xff0c;底…

python中fetchall函數_python中查詢數據庫時fetchone()函數和fetchall()函數的區別

我們在用python操作數據庫的時候,經常會碰見兩個函數:fetchone()和fetchall()剛開始學習的時候可能會搞不清楚他們兩個的區別其實非常簡單首先fetchone()函數它的返回值是單個的元組,也就是一行記錄,如果沒有結果,那就會返回null其次是fetchall()函數,它的返回值是多個元組,即返…

文字對齊格式

text-align:justify; letter-spacing:5px; line-height:40px; text-indent:40px 轉載于:https://www.cnblogs.com/mrcln/p/3757148.html

excel vba 從入門到精通_VBA詞匯-基本元素篇

在公眾號發布學習VBA需要哪些基礎知識這篇文章后&#xff0c;有朋友給我們留言&#xff0c;希望可以出一份VBA基礎的英語知識貼。其實相關的內容我們會在后面所對應知識點一一進行講解&#xff0c;提前劇透其實會少很多學習未知知識的樂趣哦~ 我們會將所涉及的基礎單詞和其說明…

jQuery基礎:remove()與 detach()區別

1、detach&#xff08;&#xff09; detach() 方法移除被選元素&#xff0c;包括所有文本和子節點。這個方法會保留 jQuery 對象中的匹配的元素&#xff0c;因而可以在將來再使用這些匹配的元素。detach() 會保留所有綁定的事件、附加的數據&#xff0c;這一點與 remove() 不同…

python保存模型 特征_Pytorch提取模型特征向量保存至csv的例子

Pytorch提取模型特征向量# -*- coding: utf-8 -*-"""dj"""import torchimport torch.nn as nnimport osfrom torchvision import models, transformsfrom torch.autograd import Variableimport numpy as npfrom PIL import Imageimport torchvi…

Matlab畫圖-非常具體,非常全面

Matlab畫圖 強大的畫圖功能是Matlab的特點之中的一個&#xff0c;Matlab提供了一系列的畫圖函數&#xff0c;用戶不須要過多的考慮畫圖的細節&#xff0c;僅僅須要給出一些基本參數就能得到所需圖形&#xff0c;這類函數稱為高層畫圖函數。此外&#xff0c;Matlab還提供了直接對…

openfeign使用_Feign使用基于配置服務發現

之前寫了篇《Feign在實際項目中的應用實踐總結》Feign在實際項目中的應用實踐總結 - 沐風之境 - 博客園?www.cnblogs.com總結了在一般項目中如何使用Feign這個提升開發效率的利器。最近在看Feign的文檔的時候發現了之前遺漏的一些點&#xff0c;所以寫了這篇文章進行補充。pom…

Oracle按用戶進行統計信息更新

按用戶進行統計信息更新 PL/sqldev工具使用system用戶連接到oracle&#xff0c;打開命令窗口執行以下SQL&#xff0c;用戶名請根據實際情況進行更改&#xff1a; begin dbms_stats.gather_schema_stats( ownname > testuser, estimate_percent > dbms_stats.aut…

個人使命宣言

最近在閱讀《高效人士的7個習慣》&#xff0c;其中提到個人使命宣言&#xff0c;也就是個人的行為憲法&#xff0c;有了這個憲法我們在日常生活和工作中才能有法可循有法可依&#xff0c;才不至于在紛繁的社會中迷失自己。通過思考自我感覺制作個人使命宣言還是非常有用的&…

jq js json 轉字符串_JS中JSON對象和String之間的互轉及處理技巧

json&#xff1a;JavaScript 對象表示法(javascript Object Notation)&#xff0c;其實JSON就是一個javaScript的對象(Object)而已。如有不清楚JSON&#xff0c;可以去w3cschool了解http://www.w3school.com.cn/json/1.在Javascript中新建一個字符串(JSON文本)。 var txt { &q…

php中__autoload()方法詳解

原文地址&#xff1a;http://www.php100.com/html/php/lei/2013/0905/5267.html[導讀] PHP在魔術函數__autoload()方法出現以前&#xff0c;如果你要在一個程序文件中實例化100個對象&#xff0c;那么你必須用include或者require包含進來100個類文件&#xff0c;或者你把這100個…