操作系統文件管理

  在現代計算機系統中,要用到大量的程序和數據,因內存容量有限,且不能長期保存,故而平時總是把它們以文件的形式存放在外存中,需要時再隨時將它們調入內存。如果由用戶直接管理外存上的文件,不僅要求用戶熟悉外存特性,了解各種文件的屬性,以及它們在外存上的位置,而且在多用戶環境下,還必須能保持數據的安全性和一致性。顯然,這是用戶所不能勝任、也不愿意承擔的工作。于是,取而代之的便是在操作系統中又增加了文件管理功能,即構成一個文件系統,負責管理在外存上的文件,并把對文件的存取、共享和保護等手段提供給用戶。這不僅方便了用戶,保證了文件的安全性,還可有效地提高系統資源的利用率。

1. 有關文件的概念

文件 :

具有符號名(文件名)的一組相關元素的有序序列,是一段程序或數據的集合。 

文件系統:

是操作系統中統一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護手段,并且方便用戶使用。 
文件系統包含文件管理程序(文件與目錄的集合)和所管理的全部文件 , 是用戶與外存的接口 , 系統軟件為用戶提供統一方法(以數據記錄的邏輯單位),訪問存儲在物理介質上的信息。

有關直接(隨機)存取設備的磁盤知識:硬盤的讀寫原理和磁盤碎片的產生

2. 文件的分類

       按性質和用途分類系統文件、庫文件、用戶文件。 

       系統文件 :由系統軟件構成的文件,只允許用戶通過系統調用或系 統提供的專用命今來執行它們,不允許對其進行讀寫和修改。主要有操作系統核心 和各種系統應用程序或實用工具程序和數據組成 
        庫文件: 文件允許用戶對其進行讀取和執行,但不允許對其進行 修改 。主要由各種標準子程序庫組成 
        用戶文件 :是用戶通過操作系統保存的用戶文件,由文件的所有者 或所有者授權的用戶才能使用 。主要由用戶的源程序源代碼、可執行目標程序的文件和 用戶數據庫數據等組成 。

      按操作保護分類:只讀文件、可讀可寫文件、 可執行文件。
       只讀文件:只允許文件主及被核準的用戶去讀文件,而不允許寫文件。標記為:-r—– 
       可讀可寫文件:允許文件主及被核準的用戶去讀和寫文件。標記為: -rw—- 
       可執行文件:允許文件主及被核準的用戶去調用執行該文件而不允許讀和寫文件,標記為:  —x— 

      按用戶觀點分類( UNIX系統文件分類)

      普通文件(常規文件)  :是指系統中最一般組織格式的文件,一般是字符流組成的無結構文件 
       目錄文件 :是由文件的目錄信息構成的特殊文件,操作系統將目錄也做成文件,便于統一管理 
       特殊文件(設備驅動程序) 

      按文件的邏輯結構分為:流式文件(,無結構操作系統文件)、記錄式文件(有結構的數據庫文件)。

       流式文件:這是直接由字符序列(字符流)所構成的文件,故又禰為流式文件 

大量的源程序、可執行文件、庫函數等,所采用的就是無結構的文件形式,即流式文件。其長度以字節為單位。對流式文件的訪問,則是采用讀/寫指針來指出下一個要訪問的字符??梢园蚜魇轿募醋鍪怯涗浭轿募囊粋€特例。在 UNIX 系統中,所有的文件都被看做是流式文件,即使是有結構文件,也被視為流式文件,系統不對文件進行格式處理。 

       記錄式文件:由若干個記錄所構成的文件,故又稱為記錄式文件。也叫數據庫文件。

        可采用多種方式組織記錄,形成不同的文件:  

①順序文件:是由一系列記錄按某種順序排列所形成的文件。 

②索引文件:當記錄為可變長度時,通常為之建立一張索引表。  

③索引順序文件:它為文件建立一張索引表,為每一組記錄中的第一個記錄設置一個表項。   

     按文件的物理結構分類 順序文件(也叫串聯文件,連續文件)、鏈接文件、索引文件、HASH文件、索引順序文件。 

     按文件的存取方式:順序存取文件、隨機存取文件。

     管理信息系統中,按文件的組織方式分類:順序文件、索引文件、直接存取文件。

      按文件中的數據形式分類 
      源文件 :
由源程序和數據構成的文件 
      目標文件 :由源程序經過相應的計算機語言編譯程序編譯,但尚未經過鏈接程序鏈接的目標代碼所形成的文件

3. 文件的存取方式

  文件的存取方式是由文件的性質和用戶使用文件的情況決定。  1 順序存取。  2 隨機存?。ㄒ步兄苯哟嫒。?/span>。

        3  索引存取

        磁帶是順序存取。磁盤是隨機存取。

3. 1. 順序存取

    順序存取是按照文件的邏輯地址順序存取。

  固定長記錄的順序存取是十分簡單的。讀操作總是讀出上一次讀出的文件的下一個記錄,同時,自動讓文件記錄讀指針推進,以指向下一次要讀出的記錄位置。如果文件是可讀可寫的。再設置一個文件記錄指針,它總指向下一次要寫入記錄的存放位置,執行寫操作時,將一個記錄寫到文件 末端。允許對這種文件進行前跳或后退N(整數)個記錄的操作。順序存取主要用于磁帶文件,但也適用于磁盤上的順序文件。
  
可變長記錄的順序文件,每個記錄的長度信息存放于記錄前面一個單元中,它的存取操作分兩步進行。讀出時,根據讀指針值先讀出存放記錄長度的單元 。然后,得到當前記錄長后再把當前記錄一起寫到指針指向的記錄位置,同時,調整寫指針值 。
    由于順序文件是順序存取的,可采用成組和分解操作來加速文件的輸入輸出。

3. 2. 直接存?。S機存取法)

     很多應用場合要求以任意次序直接讀寫某個記錄。例如,航空訂票系統,把特定航班的所有信息用航班號作標識,存放在某物理塊中,用戶預訂某航班時,需要直接將該航班的信息取出。直接存取方法便適合于這類應用,它通常用于磁盤文件。
    為了實現直接存取,一個文件可以看作由順序編號的物理塊組成的,這些塊常常劃成等長,作為定位和存取的一個最小單位,如一塊為
1024字節、4096字節,視系統和應用而定。于是用戶可以請求讀塊22、然后,寫塊48,再讀塊9等等。直接存取文件對讀或寫塊的次序沒有限制。用戶提供給操作系統的是相對塊號,它是相對于文件開始位置的一個位移量,而絕對塊號則由系統換算得到。

3.3. 索引存取

      第三種類型的存取是基于索引文件的索引存取方法。由于文件中的記錄不按它在文件中的位置,而按它的記錄鍵來編址,所以,用戶提供給操作系統記錄鍵后就可查找到所需記錄。
    通常記錄按記錄鍵的某種順序存放,例如,按代表健的字母先后次序來排序。對于這種文件,除可采用按鍵存取外,也可以采用順序存取或直接存取的方法。信息塊的地址都可以通過查找記錄鍵而換算出。實際的系統中,大都采用多級索引,以加速記錄查找過程。

4. 幾種常見的文件物理結構

幾種常見的文件物理結構:

        順序文件(也叫串聯文件,連續文件)、鏈接文件、索引文件、HASH文件、索引順序文件。

5. 順序文件

         是指文件中的物理記錄按其在文件中的邏輯記錄順序依次存入存儲介質而建立的。即順序文件中物理記錄的順序和邏輯記錄的順序是一致的。

順序文件在存儲介質中可以有兩種不同的實現結構:連續結構和鏈結構
        連續結構:是一種最簡單的物理文件結構,它把邏輯上連續的文件信息依次存放在連續編號的物理塊中。即次序相繼的兩個物理記錄在存儲介質上的位置是相鄰的。也稱為連續文件

圖5.19給出了連續結構文件的圖形說明。在圖中,一個邏輯塊號為0、1、2、3的文件依次存放在物理塊15、16、17、18中。

                1.jpg

                                          5.19連續結構文件的示意圖件
     連續文件結構的優點是一旦知道了文件在文件存儲設備上的起始地址(首塊號)和文圖5.19連續結構文件的示意圖件長度(總塊數),就能很快地進行存取。但是連續結構文件在建立文件時必須在文件說明信息中確定文件信息長度,且以后不能動態增長;而且在文件進行某些部分的刪除后,又會留下無法使用的零頭空間。因此,連續結構不宜用來存放用戶文件、數據庫文件等經常被修改的文件。

     連續結構的優點是:

     (1)結構簡單;

     (2)順序訪問速度快,對于等長記錄的連續文件可以進行順序存取,也可以進行類似折半查找的隨機存取,但是對于不等長記錄的連續文件只能進行順序存取; 
     (3)因為數據集中存放在連續的盤塊中,訪問時所需的尋道次數和尋道時間少。  

     連續結構存儲的缺點:

     (1)由于插入和刪除記錄會引起其它記錄的移動,在外存中執行此操作會引起磁頭的頻繁來回移動,因此連續結構只能在文件的末尾插入記錄,刪除記錄時,只作標記進行邏輯刪除,只有用戶指定物理刪除時才真正刪除相應記錄,進行記錄的移動;

     (2)順序文件需要連續的盤塊存放數據,因此,在插入記錄時如果原來分配的盤塊已沒有空閑空間,而與其鄰接的盤塊也不空閑時,需要重新在外存中查找新的較大的空閑空間,并將原有數據移動到新空間中,然后才能插入新的數據,因此,連續結構不易動態增長,而且外存容易存在碎片。 

    鏈結構將邏輯上連續的文件信息分散存放在若干不連續的物理塊中,其中每個物理塊設有一個指針,指向其后續連接的另一個物理塊。即物理記錄的次序由指針相鏈表示。也稱串聯文件

    圖5.20給出了鏈結構文件的物理結構。使用鏈結構時,不必在文件說明信息中指明文件的長度,只要指明該文件的第一個塊號就可以按鏈指針檢索整個文件。鏈結構的另一個特點是文件長度可以動態地增長,只要調整鏈指針就可在任何一個信息塊之間插入或刪除一個信息塊。

                2.jpg

                                  圖5.20鏈結構文件的示意圖

    文件采用鏈結構時,邏輯塊到物理塊的轉換由系統沿鏈查找與邏輯塊號對應的物理塊號的辦法完成。例如,在圖5.20的文件結構中,如果用戶所要進行操作的邏輯塊號為2,則系統從第一個物理塊20開始,一直沿鏈搜索到邏輯塊號為2的第三塊時,得到其所對應的物理塊號為22。因此,鏈結構不適宜隨機存取訪問。

     鏈結構主要優點是: 

     (1)提高了磁盤空間利用率,解決了磁盤碎片問題; 

     (2)便于文件的插入和刪除操作; 
     (3)便于文件的動態增長。 
    從本質上講,順序文件就是線性表,因而對順序文件的各種操作與線性表類似,但是,外存的訪問速度比主存要慢的多,在考慮算法時要立足于盡量減少外存的訪問次數,尋道次數和尋道時間。  

     磁帶是典型的順序存取設備,因此存儲在磁帶上的文件只能順序文件。

6. 索引文件

1.索引文件

       建立一張邏輯記錄和物理記錄之間對應關系的索引表。這類包括數據去和索引表兩大部分的文件稱做索引文件。

2.索引表組成
      索引表由若干索引項組成。一般索引項由主關鍵字和該關鍵字所在記錄的物理地址組成。如圖6.1(b)。

      注意: 索引表必須按主關鍵字有序,而主文件本身則可以按主關鍵字有序或無序。


3.索引順序文件和索引非順序文件
      (1)索引順序文件(Indexed Sequential File):主文件按主關鍵字有序的文件稱索引順序文件。
      在索引順序文件中,可對一組記錄建立一個索引項。這種索引表稱為稀疏索引。
     (2)索引非順序文件(Indexed NonSequentail File):主文件按主關鍵字無序得文件稱索引非順序文件。
      在索引非順序文件中,必須為每個記錄建立一個索引項,這樣建立的索引表稱為稠密索引。
  注意:
     ① 通常將索引非順序文件簡稱為索引文件。
    ?、?索引非順序文件主文件無序,順序存取將會頻繁地引起磁頭移動,適合于隨機存取,不適合于順序存取。
    ?、?索引順序文件的主文件是有序的,適合于隨機存取、順序存取。
    ?、?索引順序文件的索引是稀疏索引。索引占用空間較少,是最常用的一種文件組織。
    ?、?最常用的索引順序文件:ISAM文件和VSAM文件。

4. 索引文件操作:     

1). 檢索方式為:直接存取和按關鍵字存取?!皺z索”將分兩步進行:先查索引表,利用折半查找法去檢索索引表,然后根據索引中指針所指記錄(索引項指示的外存物理地址)讀取外存記錄。

   注意:①索引表不大時,索引表可一次讀入內存,在索引文件中檢索只需兩次訪問外存:一次讀索引,一次讀記錄。
             ②由于索引表有序,對索引表的查找可用順序查找或二分查找等方法。

2).插入記錄時,“記錄”插入在主文件的末尾,而相應的“索引項”必須插入在索引的合適位置上。因此,最好在建索引表時留有一定“空位”。

3).刪除記錄時,僅需刪除索引表中相應的索引項即可。

4).更新記錄時,應將更新后的記錄插入在主文件的末尾,同時修改相應的索引項

    3.jpg

              圖6.1 (a) 主文件(數據區)  (b) 索引表        c(輸入過程中建立的索引表) 

5. 利用查找表建立多級索引 

1)查找表

         對索引表建立的索引,稱為查找表。查找表的建立可以為占據多個頁塊的索引表的查閱減少外存訪問次數。

         圖6.1 (b)的索引表占用了三個頁塊的外存,每個頁塊能容納三個索引項,則可為圖6.2所示。檢索記錄時,先查找查找表,再查索引表,然后讀取記錄,三次訪問外存即可。

           4.jpg

                圖6.2  圖6.1(b) 索引表的索引,

2)多級索引
     當查找表中項目仍很多,可建立更高一級的索引。通常最高可達四級索引:
     數據文件一索引表一查找表一第二查找表一第三查找表。
    【例】檢索過程從最高一級索引–第三查找表開始,需要5次訪問外存。:

      5.jpg

    注意:
     ① 多級索引是一種靜態索引
    ?、?多級索引的各級索引均為順序表,結構簡單,修改很不方便,每次修改都要重組索引。

3)動態索引
    當數據文件在使用過程中記錄變動較多時,利用二叉排序樹(或AVL樹)、B-樹(或其變型)等樹表結構建立的索引,為動態索引。
   1)樹表特點
     ① 插入、刪除方便
     ② 本身是層次結構,無須建立多級索引
     ③ 建立索引表的過程即為排序過程。
   (2)樹表結構選擇
     ① 當數據文件的記錄數不很多,內存容量足以容納整個索引表時,可采用二叉排序樹(或AVL樹)作索引;
     ② 當文件很大時,索引表(樹表)本身也在外存,查找索引時訪問外存的次數恰為查找路徑上的結點數。采用m階B-樹(或其變型)作為索引表為宜(m的選擇取決于索引項的多少和緩沖區的大?。?br />   (3)外存的索引表的查找性能評價
    由于訪問外存的時間比內存中查找的時間大得多,所以外存的索引表的查找性能主要著眼于訪問外存的次數,即索引表的深度。

優缺點:

    索引結構是鏈式結構的一種擴展,除了具備鏈式結構的優點外,還克服了它只能作順序存取的缺點,具有直接讀寫任意一個記錄的能力,便于文件記錄的插入、刪除、修改。

    索引文件的缺點是:增加了索引表的空間開銷和查找時間,索引表的信息量甚至可能遠遠超過文件記錄本身的信息量。

   有兩種典型的索引順序文件

一、ISAM文件:ISAM(IndexSequential Access Method)(索引順序存取方法)是一種專為磁盤存取設計的文件組織方法。

二、VSAM文件:VSAM(Vistual Storage Access Method)文件是利用操作系統中提供的虛擬存儲器的功能組織的文件,免除了用戶為讀/寫記錄時直接對外存進行的操作,對用戶而言,文件只有控制區間和控制區域等邏輯存儲單位。

7. ISAM文件和VSAM文件

7.1 ISAM文件

1. ISAM文件組成

        ISAM為Indexed Sequential Access Method(索引順序存取方法)的縮寫,它是一種專為磁盤存取文件設計的
文件組織方式,采用靜態索引結構。  
        由于磁盤是以盤組、柱面和磁道三級地址存取的設備,所以可對磁盤上的數據文件建立盤組、柱面和磁道三級索引。 

1)磁道索引

    磁道索引中的每一個索引項,都由兩個子索引項組成:基本索引和溢出索引項,每一子索引項又由關鍵字和指針兩項組成。 
    基本索引項關鍵字記錄該磁道中最大(最末一個記錄)的關鍵字,指針記錄該磁道中第一記錄的位置;    

    溢出索引項記錄該磁道中溢出的記錄的最鍵字,指針記錄溢出區中的第一個記錄。 

2)柱面索引

    柱面索引每一索引項由關鍵字和指針兩項組成,關鍵字記錄該柱面中最大(最末一個記錄)的關鍵字,指針記錄該柱面中磁道索引的位置。

3)主索引
    柱面索引存放在某個柱面上,如果柱面索引過大,占多個磁道時,則建立柱面索引的索引—主索引。

    因此,ISAM文件由多級主索引、柱面索引、磁道索引和主文件組成。文件存放記錄時遵循下面原則:

    記錄在同一盤組上存放時,應先集中放在一個柱面上,然后再順序存放在相鄰的柱面上;對同一柱面,則應按盤面的次序順序存放。   

    各種索引項結構如圖7.1所示:

    1.jpg ->2.jpg-> 

     3.jpg

                    圖7.1

    圖7.2 為一ISAM文件結構示意圖,從圖中可看出,主索引是柱面索引的索引,這里只有一級主索引。

    7.jpg

                       7.2 VSAM文件示意圖

     當文件占用的柱面索引很大,使得一級主索引也很大時,可采用多級主索引。當然,若柱面索引較小時,則主索引可省略。通常主索引和柱面索引放在同一個柱面上(圖7.2是放在0號柱面上),主索引放在該柱面最前面的一個磁道上(圖7.2中
放在0柱面0磁道上),其后的磁道中存放柱面索引。每個存放主文件的柱面都建立有一個磁道索引,放在該柱面的最前面的磁道T0上,其后的若干個磁道是存放主文件記錄的基本區,該柱面最后的若干個磁道是溢出區。基本區中的記錄是按主關鍵字大小順序存儲的,溢出區 被整個柱面上的基本區中各磁道共享,當基本區中某磁道溢出時,就將該磁道的溢出記錄,按主關鍵字大小鏈成一個鏈表(溢出鏈表)放入溢出區。  

2. ISAM文件的檢索 

     在ISAM文件上檢索記錄時,過程如下:

     1)從主索引出發,找到相應的柱面索引;

     2)從柱面索引找到記錄所在柱面的磁道索引;

     3)從磁道索引找到記錄所在磁道的起始地址,由此出發在該磁道上進行順序查找,直到找到為止。

     若找遍該磁道均不存在此記錄,則表明該文件中無此記錄;若被查找的記錄在溢出區,則可從磁道索引項的溢出索引項中得到溢出鏈表的頭
指針,然后對該表進行順序查找。 

     例如,要在圖7.2中查找記錄R136,先查主索引,即讀入C0T0;因為136<286,則查找柱面索引的C0T1,即讀人C0T1;因為136<145,所以進一步把C1T0讀入內存;查磁道索引,因為90<136<145,所以C1T2即為R136所存放的磁道,讀人C1T2后即可查得R136。  
     為了提高檢索效率,通??勺屩魉饕qv內存,并將柱面索引放在數據文件所占空間居中位置的柱面上,這樣,從柱面索引查找到磁道索引時,磁頭移動距離的平均值最小。  

3.ISAM文件的插入操作 
    當插人新記錄時,首先找到它應插入的磁道,若該磁道不滿,則將新記錄插入該磁道的適當位置上即可;若該磁道已滿,則新記錄或者插在該磁道上,或者直接插入到該磁道的溢出鏈表上。插入后,可能要修改磁道索引中的基本索引項和溢出索引項。 

    (1)插入R65,首先將1柱面1磁道中大于65的記錄順次后移,導致R90溢出至溢出區T11’0(11磁道0塊中),造成磁道T1中最大關鍵字成為R80,修改磁道索引,將基本項中最大關鍵字90修改為80,將溢出項中最大關鍵字改為90,指針指向T11’0(溢出鏈表頭在11磁道0塊中),然后在相應位置插入R65。  
    例如,在圖7.2中依次插入R65 R95和R83。  
    (2)插入R95,使得T2中的R145溢出至溢出區T11’1,修改相應磁道索引。(3)插入R83,因為80<83<90,則83直接插入溢出區T11’2中,其指針指向T11’0,并修改磁道1的溢出鏈表,使得表頭指向T11’2。  插入完成后的結果如圖7.3所示。  8.jpg

圖7.3 VSAM

4. ISAM文件的刪除操作 
      ISAM文件中刪除記錄的操作,比插入簡單得多,只要找到待刪除的記錄,在其存儲位置上作刪除標記即可,而不需要移動記錄或改變指針。在經過多次的增刪后,文件的結構可能變得很不合理。此時,大量的記錄進入溢出區,而基本區中又浪費很多的空間。因此,通常需要周期性地整理ISAM文件,把記錄讀入內存重新排列,復制成一個新的ISAM文件,填滿基本區而空出溢出區。 

7.2 VSAM文件

   VSAM是Virtual Storage Access Method(虛擬存儲存取方法)的縮寫,它也是一種索引順序文件的組
織方式,采用B+樹作為動態索引結構。這種文件組織方式利用了操作系統中提供的虛擬存儲器的功能,用戶讀/寫記錄時不必再考慮外存儲器中的柱面、磁道等具體存儲信息,文件只有控制區間和控制區域等邏輯存儲單位,這種存儲方式可以在一個磁道中放個控制區間,也可以一個控制區間跨個磁道。  

1. VSAM文件結構  

   VSAM文件的結構由三部分組成:  索引集  順序集  數據集

   9.jpg

                       圖 7.4 

2.VSAM文件中控制區間的結構 

    在VSAM文件中,記錄可以是定長的也可以是不定長的。因而在控制區間中,除了存放記錄本身之外,還有每個記錄的控制信息(如記錄的長度等)和整個區間的控制信息(如區間中存放的記錄數等),控制區間的結構如圖7.5所示。在控制區間上存取一個記錄是需從控制區間的兩端出發同時向中間掃描。

    10.jpg

                   圖7.5 VSAM文件控制區間結構圖

3.VSAM文件的插入 
    VSAM文件中沒有溢出區,解決插入的方法是在初建文件時留出空間:一是每個控制區間內不填滿記錄,在最末一個記錄和控制信息之間留有空隙;二是在每個控制區域中有一些完全空的控制區間,并在順序集的索引中指明這些空區間。當插入新記錄時,大多數的新記錄能插入到相應的控制區間內,但要注意:為了保持區間內記錄的關鍵字從小至大有序,則需將區間內關鍵字大于插入記錄關鍵字的記錄,向控制信息的方向移動。 

    若在若干記錄插入之后控制區間已滿,則在下一個記錄插入時,要進行控制區間的分裂,即把近乎一半的記錄移到同一控制區域內全空的控制區間中,并修改順序集中相應索引。倘若控制區域中已經沒有全空的控制區間,則要進行控制區域的分裂,此時順序集中的結點亦要分裂,由此需要修改索引集中的結點信息。但由于控制區域較大,通常很少發生分裂的情況。   

4. VSAM文件的刪除 

    在VSAM文件中刪除記錄時,需將同一控制區間中,比刪除記錄關鍵字大的記錄向前移動,把空間留給以后插人的新記錄。若整個控制區間變空,則回收用作空閑區間,且需刪除順序集中相應的索引項。  

5. VSAM文件的優點 
    
和ISAM文件相比,基于B+樹的VSAM文件有如下優點:能保持較高的查找效率,查找一個后插入記錄和查找一個原有記錄具有相同的速度;動態地分配和釋放存儲空間,可以保持平均75%的存儲利用率;而且永遠不必對文件進行再組織。因而基于B+樹的VSAM文件,通常被作為大型索引順序文件的標準組織。 

8. Hash(直接文件)文件

1. Hash文件 

    哈希(Hash)文件又稱散列文件或者直接存取文件,是利用哈希函數法組織的文件,它類似于哈希表,即根據文件記錄的關鍵字的特點,設計一種哈希函數和處理沖突的方法,從而將記錄散列到外存儲器上。由于哈希文件中通過計算來確定一個記錄在存儲設備上的存儲位置,因而邏輯順序的記錄在物理地址上是不相鄰的,因此哈希文件不宜使用磁帶存儲,只適宜使用磁盤存儲;并且哈希文件這種結構只適用于定長記錄文件和按主鍵隨機查找的訪問方式。 

    哈希文件的組織方法與哈希表的組織方法相比有一點不同。對于哈希文件來說,磁盤上的文件記錄通常是成組存放的,若干個記錄組成一個稱為桶的存儲單位。假若一個桶能存放m個記錄,即m個哈希函數值相同的記錄可以存放在同一個桶中,而當第m+1個哈希函數值相同的記錄出現時才發生沖突。 

2. 鏈地址法解決沖突的方法是
    哈希文件中處理沖突的方法也可采用哈希表中處理沖突的各種方法,但鏈地址法是哈希文件處理沖突
的首選方法。  
    當某個桶中的哈希函數值相同的記錄超過m個時,便產生“溢出”,此時會動態生成一個桶以存放那些溢出的哈希函數值相同的記錄。通常把存放前m個哈希函數值相同的記錄的桶稱為基桶,把存放溢出記錄的桶稱為溢出桶?;昂鸵绯鐾暗慕Y構相同,均為m個記錄的數組加一個桶地址指針。  

    當某個基桶未溢出時,基桶中的指針為空;當基桶溢出時,動態生成一個溢出桶存放溢出記錄,基桶中的指針置為指向該溢出桶;若溢出桶中的哈希函數值相同的記錄再溢出時,再動態生成第二個溢出桶存放溢出記錄,第一個溢出桶中的指針置為指向第二個溢出桶。這樣就構成了一個鏈接             

11.jpg

                   圖8.1 hash文件。 

例如,假定某個文件有20個記錄,其關鍵字集合為{2,23,5,26,1,3,24,18,27,12,7,9,4,19,6,16,33,11,10,13}。桶的容量=3,桶
數=7,用除留余數法作哈希函數H(key)=key%7,其對應的哈希文件如圖8.1所示。 

3.在哈希文件中查找記錄 
       首先根據待查記錄的關鍵字值求得哈希地址(即基桶地址),將基桶的記錄讀入內存進行順序查找,若找到某記錄的關鍵字等于待查記錄的關鍵字,則查找成功;若基桶內無待查記錄且基桶內指針為空,則文件中沒有待查記錄,查找失敗;若基桶內無待查記錄且基桶內指針不空,則將溢出桶中的記錄讀入內存進行順序查找,若在某個溢出桶中查找到待查記錄,則查找成功;若所有溢出桶鏈內均未查找到待查記錄,則查找失敗。 

4.哈希文件中刪去一個記錄  
    僅需對被刪記錄作刪除標記即可。  

6.哈希文件的優點是:  

(1)文件隨機存放,記錄不需進行排序;  

(2)插入、刪除方便;  

(3)存取速度快; 

(4)不需要索引區,節省存儲空間。 

7.哈希文件的缺點是: 
     (1)不能進行順序存取,只能按關鍵字隨機存??; 
     (2)詢問方式限于簡單詢問; 
    (3)在經過多次插入、刪除后,可能造成文件結構不合理,需要重新組織文件。

9. 多重文件

1.多重表文件 
    多重表文件是一種將索引方法和鏈接方法相結合的組織方式,他對主關鍵字建立主索引,對每個需要查詢的次關鍵字均建立一個索引,同時將具有相同次關鍵字的記錄鏈接成一個鏈表,并將此鏈表的頭指針、鏈表長度及次關鍵字,作為索引表的一個索引項。通常多重表文件的主文件是一個順序文件。如圖:

1.jpg 

2. 倒排文件 
      倒排文件和多重表文件構造相似,主要區別在于在次關鍵字索引中,具有相同次關鍵字的記錄之間不設指針進行鏈接,而是在倒排表中列出具有該次關鍵字記錄的所有物理記錄號。 倒排文件中的次關鍵字索引稱做倒排表。倒排表和主文件一起就構成了倒排文件。上例文件中的倒排表如圖9.2所示。   

    13.jpg

               圖9.2 倒排表

3. 倒排文件的應用 
    倒排文件應用非常廣泛,例如在WEB或者其它文本搜索引擎的設計中,在搜索引擎收集完數據進行預處理時,搜索
引擎往往需要一種高效的數據結構來對外提供檢索服務,而現行最有效的數據結構就是倒排文件,他是搜索引擎的核心內容之一。

    詳細內容請看:倒排索引-搜索引擎的基石

參考:

《數據結構(C語言版)》.嚴蔚敏_吳偉民

《計算機操作系統教程》張堯學 第三版

轉自:http://blog.csdn.net/hguisu/article/details/6120991

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/3133

(0)
s19930811s19930811
上一篇 2015-04-13
下一篇 2015-04-13

相關推薦

  • 虛擬主機的實現

    示例1:基于ip 編輯配置文件,切換到最后一行,增加: <VirtualHost 192.168.1.117:80>     ServerName web1.ams.com     DocumentRoot "/vhosts/web1/htdocs" </VirtualHost&g…

    Linux干貨 2016-08-05
  • varnish

    緩存 緩存之所以能夠生效是程序的運行具有局部性特征: 時間局部性:一個數據被訪問過之后,可能很快會被再次訪問到; 空間局部性:一個數據被訪問時,其周邊的數據也有可能被訪問到 緩存的是熱區數據 時效性: 緩存空間耗盡:LRU,最近最少使用; 過期:緩存清理 緩存命中率:hit/(hit+miss) 頁面命中率:基于頁面數量進行衡量 字節命中率:基于頁面的體積進…

    Linux干貨 2017-07-03
  • ifcfg, ip, ss,配置文件 (Blog 7)

    Linux主機接入網絡:
    IP/MASK
    GATEWAY
    DNS

    Linux干貨 2017-11-27
  • 防火墻之iptables使用

    一、防火墻簡介           Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件;        軟件防火墻(軟件邏輯):一般寄生在操作系統…

    2017-06-18
  • rsync+inotify實現數據實時備份

    rsync+inotify實現數據實時備份 §·rsync簡單介紹 1 §·什么是rsync 1 §·rsync的功能特性 1 §·rsync的優點和不足 2 §·初識inotify 2 §·rsync命令工作模式 2 §·rsync常用命令選項 3 §·配置rsync以守護進程的方式運行 3 ※·安裝并啟動 xinetd 3 ※·為rsync服務器提供配置…

    Linux干貨 2016-10-30
  • 淺述sed命令

    1、sed工作原理       sed(stream editor)是一種流編輯器,本身也是一個管道命令,可以分析編輯標準輸入(standard input),包括對數據進行替換、刪除、新增、選取特定行等等。運行時以行為單位,每次只處理一行的內容,因此它又被稱為行編輯器。sed還可與正則表達式配合使用,從而簡…

    Linux干貨 2016-08-10
欧美性久久久久