什么是分层命名系统?


让我们考虑一个名为区域的组织,它通常被仔细定义,或者构成一个有向无环图 (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系统更进一步,其设计遵循“所有资源都像一系列分离文件系统中的文件一样命名和访问”的理念。

更新于:2021年11月29日

763 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告