2014-03-30 164 views
1

一個非常基本的問題。當我嘗試打開文件描述符時,通過提供文件的全限定路徑,執行的步驟的確切順序是什麼。Unix文件系統:如何將文件名轉換爲磁盤扇區?

我找

  • 如何在Linux上工作
  • 給出一個文件名 - 它是如何轉換爲索引節點和磁盤扇區
  • 做Linux的文件系統(特別是EXT3和EXT4)維護某種文件名到inode映射?
+1

這是一個非常理智的好奇心,但你不應該在乎磁盤扇區是如何在文件系統中組織的。內核中的文件系統驅動程序正在關注這一點。 –

回答

3

另外的tmp's answer

文件真的是inodes

通常,給定文件在某個目錄中有一些指向其inode的條目。 Directories正在將名稱映射到inode,而目錄是一種文件。請參閱stat(2)瞭解inode包含的內容(可以通過應用程序代碼進行查詢),特別是針對各種文件類型(純文件,目錄,char或塊設備,fifo,符號鏈接...)。因此,目錄通常是一個字典(以各種文件系統特定的方式實現)將字符串映射到inode。因此,在目錄/bin/中,通常有一個條目將bash與用於bash shell(即/bin/bash)的ELF可執行文件的inode相關聯。使用readdir(3)(又稱爲getdents(2))讀取目錄中的條目。

可能發生的情況是,某個給定的inode不能通過某個名稱更容易到達。特別是當一個進程是open(2) -ing一個文件,然後unlink(2) -ing它(同時保持打開的文件描述符)。這是製作臨時文件的首選方式。 (當沒有更多進程使用它們時,它們將由內核釋放)。

它也可能發生,給定的inode有幾個目錄條目指向它。 (即文件具有「多個名稱」)這發生在系統調用link(2)。 (符號鏈接文件是使用symlink(2)創建的)。

又見path_resolution(7)unix file system & file system & ext2 & ext3 & ext4 & btrfs & comparison of file systems wikipages。另請閱讀舊的file system描述(一些細節是爛的,但總的想法在這裏,特別是VFS的作用)

+0

以及如何將文件名映射到inode?這是否發生在目錄級別?例如,打開文件「/home/bobo/foo/hello.txt」,查找文件名到inode將進行4次('/'爲'home','/ home'爲'bobo','/home/bobo'作爲'foo','/ home/bobo/foo'作爲hello.txt。一旦文件的inode已知 - 它指向硬盤上的塊,然後讀取塊的調用是這個文件名來阻止分辨率是如何工作的 –

+0

按照我給你的所有鏈接 –

+0

@AmitSharma:是的文件名的循環會發生4次(在你的例子中)和每個級別(目錄),內核會檢查用戶是否有適當的權限,但如果你真的想了解所有的概念和算法,你必須參考我提到的那本書。 –

4

當我們調用內核執行以下步驟 「打開(文件路徑)」:

  1. 文件名轉換爲索引節點。
  2. 爲inode分配一個新的文件表項,初始化各種東西(每個進程)。
  3. 分配用戶文件描述符條目並存儲到文件表項(全局數據結構)中。
  4. 將用戶文件描述符返回給調用者。

有關內部算法的完整信息,你可能需要參考的偉大偉大的經典書莫里斯Ĵ巴赫介紹這些概念和具體的方式實施「中的UNIX操作系統設計」。

相關問題