2015-12-03 10 views
7

私はiput機能の上、以下のコメントを見た:それは何かを「置く」、それを「落とす」いないように聞こえるように私にはLinuxカーネル - iノードを「置く」とはどういう意味ですか?

/** 
* iput - put an inode 
* @inode: inode to put 
* 
* Puts an inode, dropping its usage count. If the inode use count hits 
* zero, the inode is then freed and may also be destroyed. 
* 
* Consequently, iput() can sleep. 
*/ 

を。私はいくつかのケースでiputから呼び出さdrop_inode機能の承知しているので、用語の使用は、ここではさらに混乱である「置きます」。

答えて

6

putオブジェクトの参照カウントをデクリメントためのカーネルコードで一般的な用語です。 getの補数であり、参照カウントが増加します。あなたはinodeだけでなく、たくさんの場所を見つけることができます。

参照カウントは限りが使用されているように破壊されることから共有オブジェクトを維持するために使用されています。コードをオブジェクトgetでオブジェクトを使用し、それを使用してからputそれを解放します。

3

iputはiノードを検索igetの反対である、 は、必要に応じてそれにメモリを割り当て、 呼び出し側にiノードへの参照を返します。

iputは、必要に応じて、すなわちメモリを解放し、「戻る」このinodeをとります。参照カウンタシステムがあり

それ のないユーザがもう存在しない場合、すべての((すなわち、メモリから除去される)ように、1つのiノードは、複数の発信者によって並列に を使用することができ、したがって、 のみドロップできますユーザーはiputと呼ばれています)。

/** 
* iget_locked - obtain an inode from a mounted file system 
* @sb:   super block of file system 
* @ino:  inode number to get 
* 
* Search for the inode specified by @ino in the inode cache and if present 
* return it with an increased reference count. This is for file systems 
* where the inode number is sufficient for unique identification of an inode. 
* 
* If the inode is not in cache, allocate a new inode and return it locked, 
* hashed, and with the I_NEW flag set. The file system gets to fill it in 
* before unlocking it via unlock_new_inode(). 
*/ 
struct inode *iget_locked(struct super_block *sb, unsigned long ino) 
1

基本的プロセスがファイルへのファイルポインタ位置を含むファイル記述子テーブル、プロセスオープンを有し、ファイルポインタは、実際には(カーネルによって維持されている)ファイルを開く表の項目へのポインタのポイントです。 Open File Tableには、Iノードテーブルの項目を指すiノードポインタ(カーネルによって維持される)があります。 I-ノードテーブルは

ファイルを開く

は、iノード項目がI-ノードテーブルに追加される(ブロックストアファイルのデータへのファイル情報とポインタ)ファイルのすべての情報が含まれています。 inodeを高速かつ高速に実行するために、システムはinodeキャッシュを維持します。 I-ノードの表は、新しいアイテムを必要とするとき、それはキャッシュからinodeを取得するためにigetが()を使用すると、ファイルが閉じているとき、それはiput使用してキャッシュに関連するiノードを返します()。

だからiput()は、iノードキャッシュにinodeをPUT手段、及び滴下はiノードテーブルのiノードの参照を減らすことを意味します。詳細はthis pageを参照してください。

関連する問題