IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)操作系統(tǒng)LINUX → 有關(guān)linux文件系統(tǒng)的幾個(gè)問題

有關(guān)linux文件系統(tǒng)的幾個(gè)問題

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  問題一:如果要找某一個(gè)特定的文件,內(nèi)核如何處理?

  答案:

 ?。?)在目錄項(xiàng)緩存中查找,注意這里是通過哈西函數(shù)查找的,而且查找順序?yàn)閺挠蚁蜃蟆?/p>

  e.g.

  處理/usr/src/jiawei.c,會(huì)從 jiawei.c 開始向上逐級(jí)查找,直到根目錄,這樣的效率很高。

  (2)如果緩存中沒有,那么然后文件系統(tǒng)會(huì)從根目錄開始找起,逐級(jí)查找。

  具體是這樣,先找到/目錄(根目錄)的dentry(目錄項(xiàng)),然后會(huì)找到它的inode,它的inode會(huì)有一項(xiàng)專門記錄其下一級(jí)的所有 dentry,找到對(duì)應(yīng)的 dentry,再如上述一樣接著進(jìn)行。然后就這樣一直找到所要找的文件(注意 linux下面沒有目錄,因?yàn)槟夸浺彩俏募?。

  問題二:dentry 結(jié)構(gòu)體中的 d_inode 指向的的是哪個(gè) inode?

  答案:

  切記這里指向的是本 dentry 的 inode,而不是下一級(jí)的 inode。

  問題三:vfs 中的 dentry 結(jié)構(gòu)體中的 vunsigned 類型?

  答案:

  如下是在網(wǎng)上下載的源碼(有我們自己的解釋):

  struct dentry {

  atomic_t d_count; //目錄項(xiàng)對(duì)象使用計(jì)數(shù)器

  unsigned int d_flags; //目錄項(xiàng)標(biāo)志

  struct inode * d_inode;//與文件名關(guān)聯(lián)的索引節(jié)點(diǎn),從該指針找到 inode,從而找到所要找的文件(應(yīng)該是這樣)

  struct dentry * d_parent;// 父目錄的目錄項(xiàng)對(duì)象

  struct list_head d_hash; //散列表表項(xiàng)的指針

  struct list_head d_lru; //未使用鏈表的指針

  struct list_head d_child; //父目錄中目錄項(xiàng)對(duì)象的鏈

  struct list_head d_subdirs;//對(duì)目錄而言,表示子目錄目錄項(xiàng)對(duì)象的鏈表

  struct list_head d_alias; //相關(guān)索引節(jié)點(diǎn)(別名)的鏈表

  int d_mounted;//對(duì)于安裝點(diǎn)而言,表示被安裝文件系統(tǒng)根項(xiàng)

  struct qstr d_name; //文件名

  unsigned long d_time; /* used by d_revalidate*/

  struct dentry_operations *d_op;// 目錄項(xiàng)方法

  struct super_block * d_sb; //文件的超級(jí)塊對(duì)象

  vunsigned long d_vfs_flags;

  void * d_fsdata;//與文件系統(tǒng)相關(guān)的數(shù)據(jù)

  unsigned char d_iname [DNAME_INLINE_LEN]; //存放短文件名

  };

  事實(shí)上 kernel 早就不用這個(gè)數(shù)據(jù)類型了,你可以找找最近2.6 版的,找不到了,下面是 2.6.34.4 的 dentry 源碼。

  struct dentry {

  atomic_t d_count;

  unsigned int d_flags; /* protected by d_lock */

  spinlock_t d_lock;/* per dentry lock */

  int d_mounted;

  struct inode *d_inode; /* Where the name belongs

  to - NULL is

  * negative */

  /*

  * The next three fields are touched by

  __d_lookup.Place them here

  * so they all fit in a cache line.

  */

  struct hlist_node d_hash;/* lookup hash list */

  struct dentry *d_parent; /* parent directory */

  struct qstr d_name;

  struct list_head d_lru;/* LRU list */

  /*

  * d_child and d_rcu can share memory

  */

  union {

  struct list_head d_child/* child of parent list */

  truct rcu_head d_rcu;

  } d_u;

  struct list_head d_subdirs;/* our children */

  struct list_head d_alias;/* inode alias list */

  unsigned long d_time;/* used by d_revalidate */

  const struct dentry_operations *d_op;

  struct super_block *d_sb;/* The root of the dentry

  tree */

  void *d_fsdata;/* fs-specific data */

  unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /*

  small names */

  };

  以上是我們西郵linux興趣小組中fs團(tuán)隊(duì)討論的幾個(gè)問題,現(xiàn)在來給大家說一下我們討論的結(jié)果。如果有異議,希望各位提出來,謝謝!

關(guān)鍵詞標(biāo)簽:linux

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

    人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載