歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> 講解Unix內核超級塊知識

講解Unix內核超級塊知識

日期:2017/3/6 11:40:56   编辑:Unix資訊

我們今天要涉及的知識是Unix內核,所有的Unix內核都同宗同源,並且提供相同的API,現代的Unix內核存在許多設計上的相似之處。今天,我們就來介紹關於Unix內核超級塊的知識,我們下面就來看看吧!

Unix內核超級塊

Unix內核超級塊由以下字段組成:
1,文件系統的規模
2,文件系統中空閒塊的數目
3,文件系統上可用的空閒塊表
4,空閒塊表中下一個空閒塊的下標
5,索引結點表的大小
6,文件系統中空閒索引結點號表
7,文件系統中空閒索引結點的數目
8,空閒索引結點表中下一個空閒索引結點的下標
9,空閒塊表的鎖字段和空閒索引結點表的鎖字段
10,用來標識超級塊已經被修改的標志

注意:6中提到的空閒索引結點號表位於文件系統中,它與內存中的空閒索引結點表不同。

下面介紹Unix內核是如何為新的文件分配索引結點的,前面我們知道Unix內核是通過iget算法得到已經存在的文件的索引結點,這裡Unix內核通過ialloc算法來為新文件分配索引結點。文件系統包含一個線性的索引結點表。

當結點的類型字段為0時,此索引結點為空閒,也就是說沒有文件占用此結點。當進程創建新文件需要索引結點時,如果進行線性的搜索而獲得,其代價過高了。為此,unix在超級塊裡包含了一個數組,把空閒的索引結點號緩沖起來。等到需要的時候,在此表中取用空閒的號對應的索引結點,提高了效率。

當空閒索引結點號表為空時,此時緩沖起來的空閒索引結點被用完,Unix內核重新在磁盤上搜索空閒的結點來填滿空閒索引結點號表,搜索完成後內核將“銘記”住填滿的空閒索引結點號表裡最大的元素,以便下次搜索時即從該號往後搜索。

當Unix內核釋放一個索引結點(調用ifree算法),即該索引結點的所有聯結變為0時,Unix內核把此結點號與“銘記”索引結點號比較,如果結點號小於“銘記”號,則使“銘記”號=該結點號,這樣做的目的是為了防止遺漏空閒的索引結點。理論上,這樣做空閒索引結點號永遠都在超級塊的空閒索引結點號表裡,但例外是有的。

接下來著重討論ialloc算法,當超級塊上了鎖,此時進入睡眠(sleep),直到超級塊可用,然後檢查是否有空閒索引結點號緩沖著,如果沒有,將Unix內核超級塊上鎖,搜索磁盤索引結點表填充空閒索引結點號表,然後為超級塊解鎖。在空閒索引結點號表裡取得一個號,將空閒結點的數目減一,然後調用iget算法,得到索引結點,並將結點調入內存完成對它的初始化,然後返回索引結點。

這樣,我們就對Unix內核的知識基本上介紹的差不多了,如果大家還有問題,那我們會幫助大家一起來解決的。

Copyright © Linux教程網 All Rights Reserved