Linux内核 - 对于"放置"它意味着什么?一个inode?

时间:2015-12-03 15:08:28

标签: linux linux-kernel kernel 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.
 */

对我而言,听起来并非如此"把"什么,但"放弃"它。我知道drop_inode函数,在某些情况下会从iput调用,所以使用术语" put"在这里更加令人困惑。

3 个答案:

答案 0 :(得分:6)

<item name="android:windowContentOverlay">@null</item> 是内核代码中用于递减对象引用计数的常用术语。它是put的补充,增加了引用计数。您可以找到很多地方,而不仅仅是inode。

引用计数用于防止共享对象被破坏,只要它们正在被使用。代码使用对象get,使用它,然后使用get来释放它。

答案 1 :(得分:3)

ng-clik function与搜索inode的iput相反, 必要时为它分配内存并返回对inode的引用 呼叫者。

iget将此inode&#34;返回&#34;,即在需要时释放内存。

有一个参考计数器系统,可以使用一个inode 由一个以上的呼叫者并行,因此可以 如果没有用户,则只丢弃(即从内存中删除) 再一次(每个用户都叫iput)。

iput

答案 2 :(得分:1)

基本上,进程有一个文件描述符表,其中包含指向进程打开的文件的文件指针,文件指针实际上是指向打开文件表项(由内核维护)的指针。并且Open File Table将有一个inode指针指向I-node Table中的项目(也由内核维护)。 I节点表包含文件的所有信息(文件信息和指向块存储文件数据的指针)

打开文件时,会将一个inode项添加到I节点表中。为了更快地实现和释放inode,系统将维护inode缓存。当I节点表需要一个新项时,它将使用iget()从缓存中获取一个inode,当一个文件关闭时,它将使用iput()将相关的inode返回到缓存。

因此,iput()表示将inode输入到inode缓存,DROPPING意味着减少I节点表中inode的引用。请参阅this page以获取更多详细信息。