什麼是分層命名系統?
讓我們考慮一個名為區域的組織,它通常被仔細定義,或者構成一個有向無環圖 (DAG)。在一個仔細定義的名稱空間中,一個節點只能有指向它的邊。
在一個DAG名稱空間中,任何節點都可以有多個指向它的邊。也可以有具有多個根節點的名稱空間。分層系統通常使用越來越結構化的名稱空間。從一個節點到另一個節點的一系列邊標籤稱為路徑名。
路徑名用於標識圖中的節點。一個完整的路徑名總是從根節點開始。一個相對路徑名是任何不從根節點開始的路徑名。目錄節點是名稱空間的永續性儲存和複製的最小單位。
如果它們都在一臺主機上,我們只有一箇中心伺服器,它很簡單,不能擴充套件,也不能提供容錯性。或者,通常存在名稱空間的多個副本,稱為完全複製。
同樣,這通常很簡單,訪問速度也很快。但是,副本可能難以保持一致和同步,這可能會隨著系統增長而成為瓶頸。在分層名稱空間的情況下,部分子樹可以由一臺伺服器維護。
在域名系統 (DNS) 的情況下,這種分佈也協調了網路的物理分佈。每個區域都與一個永續性字首相關聯,該字首從根到該區域。
DNS名稱空間層次結構如下所示:
解釋
現在,每個節點都維護一個字首表,並且給定一個名稱,伺服器將聯絡具有最長匹配字首的區域。
如果不是權威名稱伺服器,則將下一個區域的字首傳遞出去以獲取相應的名稱伺服器。
作為廣播的替代方法,被聯絡的名稱伺服器也可以提供此區域的權威名稱伺服器的位置。
通常,只需要很少的訊息來完成名稱解析。
一個重要的見解是,我們僅使用任意位串作為識別符號。因此,我們可以簡單地將名稱空間一分為二,併為每個部分引入一個新的根節點。此外,分割槽根節點應該分散在網路中,因此訪問也應該分散。
每個區域都有一個關聯的目錄節點,用於跟蹤該區域中的元素。每個區域通常進一步劃分為許多較小的子區域。這導致一個目錄節點樹。頂級區域的目錄稱為根節點,它瞭解所有元素。葉區域對應於分散式系統中的本地區域網路。
作業系統中的名稱示例如下:
檔案 −/boot/vmlinuz, ~/addresses/DS/notes/tex/naming.tex
程序 − one, 14293
裝置 −/dev/hda,/dev/ttyS1
使用者 − chak, cs9243。通常出於實際原因,完全不同的實體通常使用不同的命名方案進行命名。也就是說,它們存在於不同的名稱空間中。
有時,一個新的系統設計試圖將各種實體整合到一個同構名稱空間中,並試圖為這些實體提供統一的介面。
例如,作業系統的一個核心概念是統一處理檔案、裝置、套接字等。
一些系統還提供了一個/proc檔案系統,它將程序對映到檔案系統中的名稱,並允許透過此檔案介面訪問程序資訊。
此外,UNIX作業系統透過/proc檔案系統提供對各種程序資訊結構的訪問。Plan 9和Inferno系統更進一步,其設計遵循“所有資源都像一系列分離檔案系統中的檔案一樣命名和訪問”的理念。