歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix資訊

淺析Unix內核索引結點表

大家都知道Unix內核,所有的Unix內核都同宗同源,並且提供相同的API,現代的Unix內核存在許多設計上的相似之處。今天,我們就來介紹更多的Unix內核的知識。是關於Unix內核索引結點表的,我們下面就來看看吧!

索引結點(index node,簡稱inode)是文件系統的核心內容,也是Unix內核最重要的數據結構。unix中一個文件只有一個inode與其相對應,它的儲存在磁盤的索引結點表裡。索引結點表是一個線性數組。索引結點的各個域的內容如下:
1,文件所有者的標識號。
2,文件類型。
3,文件的存取權限。
4,文件的存取時間。
5,文件的聯結數。
6,文件在磁盤上的位置。
7,文件大小。

(注意:索引結點不表明該文件的路徑)

當索引結點被某個進程引用是,它被調入內存中。在內存中存在另外一個索引結點表(in-core inode list)和一個空閒索引結點表。當索引結點被調入內存時(在Unix內核中使用iget算法),將索引結點放入內存索引結點表裡,並將其引用數加1。

內存索引結點裡的數據域除了磁盤索引結點的內容以外,還有以下新的域:
1,內存索引結點的狀態
2, 含有該文件的文件系統的邏輯設備號。
3,索引結點號。(索引結點在磁盤上數組裡索引)
4,指向其他內存索引結點的指針。
5,引用數。

Unix內核用文件系統和索引結點號來標識特定的索引結點,在高層的系統調用請求是使用iget算法來分配一個索引結點的內存拷貝,即內存索引結點。Unix內核獨立的操縱索引結點鎖和引用數。在系統調用執行期間將起鎖住,防止其他的進程在此期間使用此結點,調用結束後開鎖。在兩次系統調用之間結點是不上鎖的。

而iget算法主要完成的任務:索引結點號為參數,如果索引結點位於內存索引結點表中則引用數加1,返回索引結點,如果位結點位於空閒索引結點表中(此表中索引結點的引用數為0),則從該表中取出該索引結點,放入在內存索引結點表中,並將其引用數加1,如果在兩個表中都沒有該索引結點,則在空閒表中移出一個新的索引結點,在磁盤索引結點表中尋找到該結點,讀入內存索引結點表中,然後返回該索引結點。

當Unix內核釋放索引結點時,引用數減1。如果引用數降為0,而且文件的內存拷貝與磁盤拷貝不同,則執行寫磁盤操作,並把索引結點放入空閒表裡。這裡用到的算法是iput。如果文件的聯結數為0,則Unix內核釋放該文件的所有數據塊,並釋放該文件的磁盤索引結點。

在這裡,我們就對Unix內核的索引結點表介紹到這裡吧,希望大家可以繼續關注我們以後對Unix內核的知識的介紹。

Copyright © Linux教程網 All Rights Reserved