背景:
軟考裏面,屢次碰到一道題:數組
過程
之前對於這樣的題,僅僅知道:在文件系統中,文件的存儲設備一般劃分爲若干個大小相等的物理塊,每塊長爲 512 或 1024 字節。文件的理結構是指文件在存儲設備上的存儲方法,經常使用的文件物理結構有:連續文件、串聯文件和索引文件三種。
(1) 連續文件 ( 順序文件 ) 連續文件是一種最簡單的物理文件結構,它把一個在邏輯上連續的文件信息依次存放到物理塊中。連續文件的優勢是一旦知道文件在文件存儲設備上的起始位置和文件長度,就能進行存取。連續文件適合於順序存取,在連續存取相鄰信息時,存取速度快。其缺點是在文件創建時需指定文件的信息長度,之後不能動態增加,通常不宜於須要常常修改的文件。
(2) 串聯文件 ( 連接文件 ) 串聯文件用非連續的物理塊來存放文件信息,這些物理塊之間沒有順序關係,其中每一個物理塊設有一個指針,指向下一個物理塊的地址,這樣全部的物理塊都被連接起來,造成一個連接隊列。串聯文件的優勢是能夠解決存儲器的碎片問題,提升存儲空間利用率。因爲串聯文件只能按照隊列中的連接指針順序查找,所以搜索效率低,通常只適用於順序訪問,不適用於隨機存取。
(3) 索引文件索引文件是另外一種對文件存儲不連續分配的方法。爲每一個文件創建一張索引表,索引表中的每一表項指出文件信息所在的邏輯塊號和與之對應的物理塊號。索引文件既能夠知足文件動態增加的要求;又能夠方便而迅速地實現隨機存取。
對一些大的文件,當索引表的大小超過一個物理塊時,會發生索引表的分配問題。通常採用多級 ( 間接索引 ) 技術,這時在由索引表指出的物理塊中存放的不是文件住處而是存放文件信息的物理塊地址。這樣,若是一個物理塊能存儲 n 個地址,則採用一級間接索引,將使可尋址的文件長度變成 n2 塊,對於更大的文件能夠採用二級甚至三級間接索引 ( 例如, Unix 操做系統採用三級索引結構 ) 。
索引文件的優勢是既適用於順序存取,又適用於隨機存取。缺點是索引表增長了存儲空間的開銷。另外,在存取文件時須要訪問兩次磁盤,一次是訪問索引表,另外一次是根據索引表提供的物理塊號訪問文件信息。爲了提升效率,一種改進的方法是,在對某個文件進行操做以前,預先把索引表調入內存。這樣,文件的存取就能直接從在內存的索引表中肯定相應的物理塊號,從而只須要訪問一次磁盤。
學習
在 Unix 系統中,文件的物理結構採用索引方式。定義有一個索引節點字符數組,該字符數組最多能夠放下 13 個地址項,而且規定
地址項 0-9 採用直接尋址方法,
地址項 10 採用一級間接尋址,
地址項 11 採用二級間接尋址,
地址項 12 採用三級間接尋址。
先進行簡單的換算, 11264/1024 大約是 11KB 。因爲地址項 0-9 可直接尋址 10 個物理盤塊,由於每一個物理塊的大小爲 1KB ,因此當訪問文件的前 10KB 範圍的數據時是直接尋址。地址項 10 採用一次間接尋址,即地址項 10 裏存放的是一級索引表的地址,由於每一個盤塊號佔 4 個字節,因此,該索引表可存放 1024/4=256 個物理塊的地址,因此當訪問文件的 10-266KB 之間的數據時是一次間接尋址。
但是若是要訪問的數據是 320KB ,因此還有 320-266=54KB 。顯然,地址項 11 足夠存取這些數據,因此,最多就在地址項 11 而無須存取地址項 12 ,即只須要二次間接尋址
但是若是要訪問的數據是 65804KB ,因此還有 62802-10-256-256^2=2 。因此,地址項 11 不夠,因此要存在地址項 12 中,即只須要三次間接尋址。
總結:
UNIX/Linux文件系統中,一個盤塊的大小爲1KB,每一個盤塊號佔4個字節,即每塊可放256個地址。直接尋址爲10塊,一次間接尋址爲256塊,二次間接尋址爲256*256塊,三次間接尋址爲256*256*256塊。