【操作系統】再談文件

来源:https://www.cnblogs.com/freeyw/archive/2022/07/27/16525469.html
-Advertisement-
Play Games

寫在前面 本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。 正文 一、文件的物理組織方式 目前常用的外存組織方式有: 1.連續組織方式 為每個文件分配一篇連續的磁碟空間,稱為連續組織方式。 2.鏈接組織方式 在對文件採取鏈式組織方式時,可以為每個文件分配不連續 ...


寫在前面

  本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。

 

正文

一、文件的物理組織方式

目前常用的外存組織方式有:

  1.連續組織方式

    為每個文件分配一篇連續的磁碟空間,稱為連續組織方式。

  2.鏈接組織方式

    在對文件採取鏈式組織方式時,可以為每個文件分配不連續的磁碟空間。通過鏈接指針將一個文件的所有盤塊鏈接在一起。形成鏈式組織方式

  3.索引組織方式

    在對問文件採取索引組織方式時,形成的就是索引式文件結構。

下麵講解展開來說下這三種文件存儲方式:

  連續組織方式:

  連續組織方式是針對於文件來說的,給每一文件分配一塊連續的空間。如果這個文件比較大的話,那麼需要給他分配n塊連續的磁碟塊。所以說,連續存儲方式並不是說所有文件存放的位置是相鄰接的。

 

 

 通過圖我們可以看到,連續文件的目錄中包含是文件名開始地址以及文件大小

連續存儲方式的優點:

  1.順序訪問很容易,根據目錄,可以很方便的往下讀取文件數據

  2.順序訪問速度塊。因為每個文件的空間是連續的,讀取的時候不用再跳轉到其他盤塊,所以讀取速度快。

連續存儲方式缺點:

  1.因為每個文件存儲的時候,需要確定大小。再分配磁碟的時候,可能會導致一部分小的磁碟空間得不到利用,造成外部碎片

  2.對於動態增長的文件,沒有辦法去處理,大小已經固定了,可能造成內部碎片

補充下:

  內部碎片:已被分配出去但是由於一些原因得不到使用。

  外部碎片:未被分配出去但是得不到使用的空間。

2.鏈式分配方式

  為了提高空間的利用率,降低碎片的情況。可以使用離散的分配方式,也就是鏈式分配。可以為每個文件分配多個不連續的盤塊,再通過盤塊上的鏈接指針,將屬於同一個文件多個離散的盤塊鏈接成一個鏈表

鏈式分配方式又分為兩種實現方式:

  1.隱式鏈接

  文件目錄中的每個目錄相中,都含有指向連接文件的第一個盤塊最後一個盤塊的指針

  

 

 這種方式就和鏈表一樣,當你要訪問這個文件的第n個盤塊的時候,需要從頭部開始查找。算是一個缺點吧。

2.顯示鏈接

  這種方式把鏈接文件各個物理塊的指針顯示地存放在記憶體的一張鏈表中,該表在整個磁碟中僅設置一張。也把這個表稱為文件分配表(FAT)

這樣做和上面相比,只不過是把查找過程放在了記憶體中,最後再去啟動磁碟。降低了訪問磁碟的次數。

 

 

  FAT方式在文件較多的時候需要占用較大的記憶體空間。當過大的時候,記憶體不一定能夠存儲的下該表,且在一張較大的FAT表中查詢文件也是比較的慢。 

3.索引組織方式

通過對FAT方式的改進,出現了索引組織方式。在我們打開某個文件的時候,只需要把該文件占用的盤塊編號調入記憶體即可。完全沒有必要將整個FAT調入記憶體。因此,出現了索引組織方式。基本思想:

1.為每個文件分配一個索引表,把分配給該文件的所有盤塊號都記錄在這個索引表中。

2.再建立一張索引表,用於組織1中的各個索引表,當然這種方式是針對於該文件過大的情況。

 

 3.如果文件過大,還可以有多級索引。

像這種方式能夠大大加快對大型文件的查找速度,但是訪問一個盤塊的時候,需要啟動磁碟的次數隨著索引級數的增加而增多尤其是對於一些小文件,還要單獨分配一個索引表,這並不是理想的效果。

為了能夠全面地照顧小、中、大以及特大型地作業,可以採取多種組織方式來構成文件的物理結構:

2.增量式索引組織方式

  1.基本思想

  設立不同等級的索引:

  直接索引:對於小文件,通常採用直接索引。直接將文件占用的盤塊地址放入FCB中,可以直接從FCB中獲取該文件的盤塊的地址

  一次間址:對於中等大小的文件,可以採取單級索引的組織方式,直接從FCB中獲取該文件對應的索引表即可

  二次/三次間址:對於大型文件,可以採取兩級或者三級索引的組織方式。

    

 

 

  

 二、文件存儲空間管理

前面說的都是文件分配時候的組織方式,但是如何分配文件? 磁碟上哪些盤塊是可以被分配的呢?,這就涉及文件存儲空間的管理。下麵一起來看看吧!

1.空閑表法

  空閑表法屬於連續分配方式,為每一文件分配一塊連續的存儲空間。即系統為外存上的所有空閑分區建立一張空閑表,每個空閑區對應一個空閑表項。

 

 採用空閑表法給文件分配盤塊的時候,和記憶體空間的分配差不多,也就是採用一些演算法(最佳適應、首次適應等)進行分配,回收的時候也是按照和當前執行點的位置關係採取不同的方式回收。

2.空閑鏈表法

空閑鏈表法是將所有空閑盤區拉成一條空閑鏈。空閑鏈表法可以分成以下兩種形式:

1.空閑盤塊鏈

  顧名思義,以盤塊為單位組成一張鏈表。長度較長

2.空閑盤區鏈

  將若幹個盤塊作為一個區,鏈接起來,形成一張鏈表。長度較短

3.位示圖

 位示圖是利用二進位的一位來表示磁碟中一個盤塊的使用情況。0代表盤塊空閑,1代表已經分配。磁碟上所有盤塊都有一個二進位位與之對應,這樣,所有盤塊所對應的位構成了一個集合。稱為位示圖。

 

文件這方面涉及的知識點,算是完結了。本文章主要講了文件物理組織方式以及盤塊的空間管理,我們下篇文章再見。

 

不驕不躁,保持學習


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 選擇結構 if 選擇結構 語法 if(布爾表達式) { //當布爾表達式為true將執行的語句 } if(布爾表達式) { //當布爾表達式為true將執行的語句 }else{ //當布爾表達式為false時執行的語句 } if(條件1) { //條件1為ture時執行的語句 }else if(條件 ...
  • 前言 當我們使用DI方式寫了很多的Service後, 可能會發現我們的有些做法並不是最優的. 獲取註入的對象, 大家經常在構造函數中獲取, 這樣也是官方推薦的方式, 但有時不是效率最高的方法. 如果在構造函數中獲取對象,那麼每次對象的初始化都會把構造函數中的對象初始化一遍, 如果某個方法只用到其中一 ...
  • Word中設置水印時,可使用預設的文字或自定義文字設置為水印效果,但通常添加水印效果時,會對所有頁面都設置成統一效果,如果需要對每一頁或者某個頁面設置不同的水印效果,則可以參考本文中的方法。下麵,將以C# 代碼為例,對Word每一頁設置不同的文字水印效果作詳細介紹。 方法思路 在給Word每一頁添加 ...
  • 在日常開發 webapi 時,我們往往會集成 swagger doc 進行 api 的文檔呈現,當api數量比較多的時候就會導致 swagger ui 上的 api 因為數量太多而顯得雜亂,今天教大家如何利用 GroupName 屬性來對 api 的 Controller 進行分組,然後利用 swa ...
  • 我們知道,如果要對一個網站進行自動化測試,可以使用Python的selenium對獲取網頁的元素進行一系列操作。同樣,對於Windows應用,可以使用C#或者AutoIt(也是一種腳本語言,相比較與C#,AutoIt更適合做Windows應用的自動化腳本)捕獲窗體句柄進行操作。 今天主要記錄一下使用 ...
  • 所在單位有消息推送的需求,整理了一下,具體要求如下: 伺服器(ASP.NET)往桌面客戶端(WPF)單向推送; 客戶端消費消息分為一次性消費(如:掃面支付結果推送)、多次消費(如:訂單推送) ClientId線上狀態其他客戶端不能再用相同的ClientId連接 一開始使用了SingalR,缺點如下: ...
  • 分享如何使用WPF 製作 Windows 屏保 WPF 製作 Windows 屏保 作者:驚鏵 原文鏈接:https://github.com/yanjinhuagood/ScreenSaver 框架使用.NET452; Visual Studio 2019; 項目使用 MIT 開源許可協議; 更多 ...
  • ## 前言 在很多的場合我都遇到過一些群友提這樣的一些問題: 為什麼Java有GC調優而CLR沒有聽說過有GC調優呢? 到底是Java的JVM GC比較強還是C#使用的.NET CLR的GC比較強呢? 其實業內已經有幾位大佬的高贊文章和大家分享一下,主要討論JVM和CLR還有GC調優,今天就借用大 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...