Linux 内核 - "put" 一个 inode 是什么意思?
Linux Kernel - What does it mean to "put" an inode?
我在 iput
函数顶部看到以下评论:
/**
* 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.
*/
对我来说,这听起来像是 "putting" 什么都不是,而是 "dropping"。我知道 drop_inode
函数,它在某些情况下会从 iput
调用,因此术语 "put" 的用法在这里更加令人困惑。
iput
与 iget
相反,它搜索一个 inode,
如有必要,为其分配内存,并 returns 对 inode 的引用
来电者。
iput
获取此 inode "back",即在需要时释放内存。
有引用计数器系统,可以使用一个inode
由多个呼叫者并行,因此可以
只有在没有用户的情况下才会被删除(即从内存中删除)
不再(每个用户都调用了 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)
put
是内核代码中用于递减对象引用计数的常用术语。它是 get
的补码,它增加了引用计数。您可以在很多地方找到它,而不仅仅是 inode。
引用计数用于防止共享对象在使用期间被销毁。使用对象的代码 get
对象,使用它,然后 put
释放它。
基本上一个进程有一个文件描述符Table,其中包括一个指向进程打开的文件的文件指针,文件指针实际上是指向打开文件的一项的指针Table(由内核维护)。打开文件 Table 将有一个 inode 指针指向 I-node Table 中的项目(也由内核维护)。 I节点table包含文件的所有信息(文件信息和指向存储文件数据的块的指针)
当您打开一个文件时,一个 inode 项目被添加到 I-node table。为了更快的实现和释放inode,系统会维护一个inode缓存。当i节点Table需要一个新的item时,它会使用iget()从缓存中获取一个inode,当一个文件关闭时,它会return将相关的inode放到缓存中使用输入().
所以iput()表示PUT inode到inode cache,DROPPING表示减少I-node中某个inode的引用Table。请参阅 this page 以获取更多详细信息。
我在 iput
函数顶部看到以下评论:
/**
* 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.
*/
对我来说,这听起来像是 "putting" 什么都不是,而是 "dropping"。我知道 drop_inode
函数,它在某些情况下会从 iput
调用,因此术语 "put" 的用法在这里更加令人困惑。
iput
与 iget
相反,它搜索一个 inode,
如有必要,为其分配内存,并 returns 对 inode 的引用
来电者。
iput
获取此 inode "back",即在需要时释放内存。
有引用计数器系统,可以使用一个inode
由多个呼叫者并行,因此可以
只有在没有用户的情况下才会被删除(即从内存中删除)
不再(每个用户都调用了 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)
put
是内核代码中用于递减对象引用计数的常用术语。它是 get
的补码,它增加了引用计数。您可以在很多地方找到它,而不仅仅是 inode。
引用计数用于防止共享对象在使用期间被销毁。使用对象的代码 get
对象,使用它,然后 put
释放它。
基本上一个进程有一个文件描述符Table,其中包括一个指向进程打开的文件的文件指针,文件指针实际上是指向打开文件的一项的指针Table(由内核维护)。打开文件 Table 将有一个 inode 指针指向 I-node Table 中的项目(也由内核维护)。 I节点table包含文件的所有信息(文件信息和指向存储文件数据的块的指针)
当您打开一个文件时,一个 inode 项目被添加到 I-node table。为了更快的实现和释放inode,系统会维护一个inode缓存。当i节点Table需要一个新的item时,它会使用iget()从缓存中获取一个inode,当一个文件关闭时,它会return将相关的inode放到缓存中使用输入().
所以iput()表示PUT inode到inode cache,DROPPING表示减少I-node中某个inode的引用Table。请参阅 this page 以获取更多详细信息。