【操作系統】再談文件

来源: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
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...