Filesystems

高位/低位是什麼意思?

  • March 3, 2020

我在這裡學習了一些關於 Ext4 文件系統知識。在此連結的第一個表中,他們描述了 inode 的欄位。每個欄位條目都有一個:

  • 抵消
  • 尺寸
  • 姓名
  • 描述

在描述欄位中,文件指出其中一些值是低位或高位。低位/高位是什麼意思,在這個 ext4 文件系統範例中使用這個概念背後的解釋是什麼?

讓我們舉一個例子,使用您在問題中連結到的文件i_uid作為參考:該欄位具有大小__le16並被描述為Lower 16-bits of Owner UID. 如果創建此文件系統的系統僅允許 16 位使用者 ID,則所有使用者 ID 都可以放入該i_uid欄位:__le16確實代表“little-endian 16 位”。在你的類比中,如果你只能有兩位數並且成本是 29 美元,那麼你就已經準備好了,因為它很合適。

如果它使用 32 位使用者 ID(我很確定沒有系統使用更大的使用者 ID),那麼 32 位使用者 ID 將不適合 size 的欄位__le16,因此 32 位被分成兩個 16 位數量。如果我們將位從最低有效位的 0 到最高有效位的 31 編號(這只是我們在這裡使事情明確的約定),那麼位 0-15(“低位”位)被放入該i_uid欄位,但第 16-31 位(“高階”位)不適合,必須轉到其他位置:在使用 32 位使用者 ID 的 Linux 上,它們最終位於inode 欄位的子欄位中l_i_uid_highosd2在你的類比中,如果成本是 129 美元但你有兩位數的盒子,那麼29將適合低位的兩位數框,並01會進入高位的兩位數框。

補充幾點:請注意,所有欄位都是“小端” - 如果欄位包含多個字節(例如__le16,包含兩個字節),則最不重要的字節首先出現,最重要的字節出現排在第二位,但它們是相鄰的。這與系統 CPU 的字節順序無關:這樣,文件系統在磁碟上的佈局方式與佈局它的 CPU 無關;如果需要,您可以在具有相反字節序的不同系統上讀取此文件系統(需要注意的是,在兩個系統上執行的 ext4 版本應該兼容)。

另請注意,使用者 ID 的低 16 位(= 2 個字節)和使用者 ID 的高 16 位儲存在磁碟上相鄰的兩個位置:第一個位置在偏移量 0x2 處inode 的開頭,但第二個是 inode 開頭的偏移量 0x74 + 0x4:0x74 是 12 字節i_osd2欄位的開始位置,0x4 是l_i_uid_high從欄位開頭的偏移量i_osd2。這可能是因為在某些時候,“全世界都是 16 位使用者 ID”,所以早期的文件系統只為使用者 ID 保留第一個欄位。當需要使用 32 位使用者 ID 時,第二個 16 位不能相鄰放置,因為其他欄位已經存在(在這種情況下i_size欄位,最初限制為 32 位,但事實證明太小,因此最終i_size_field添加了 an 以獲得另外 32 位的大小 - 請參閱 inode 中的偏移量 0x6C),因此它被放置在(可能)第一個位置在未使用且可供使用的 inode 中。

許多這種複雜性是出於向後兼容性考慮(ext4 希望能夠讀取 ext3 文件系統而使用者無需執行任何特殊操作)和適應未來擴展的願望所必需的。事後看來,所有分散的部分都可以放在一起,你會看到例如一個i_uid類型__le32,而不是必須將它分成兩部分。但這就是你必須做的事情,才能在不放棄以前的一切的情況下繼續前進。

引用自:https://unix.stackexchange.com/questions/570804