我正在阅读 The UNIX Time-Sharing System
由D.M.Ritchie和K.Thompson撰写,他们在书中简单介绍了UNIX操作系统。在文件系统部分,当他们谈到 "mount "时,他们说了下面2段话。而我对这两段中的粗体和itatic内容有一些疑问。
第1段:当对一个i节点表示特殊的文件提出IO请求时,最后12个设备地址字是不重要的,第一个指定的是内部设备名,解释为一对数字,分别代表了一个 器件类型 和 子设备号. 设备类型表示哪个系统例程将处理该设备上的IO;子设备号选择,例如,连接到特定控制器上的磁盘驱动器或几个类似终端接口中的一个。
第2段:在这种环境下,mount系统调用(3.4节)的实现是非常直接的,mount维护了一个? 系统表 其参数是i-数字和 普通文件的设备名 在挂载过程中指定的,并且其 对应值 是指定的特殊文件的设备名。在打开或创建过程中扫描路径名时,会对每一个出现的i-number-device对进行搜索;如果发现匹配的设备。i-number被替换为根目录的i-number,设备名称被替换为表值。
从第一段中,我知道 设备名称 是存在于 特别档案 i节点。但是,为什么在第二段中说 普通档案 也有它?
褂幸桓龃? 系统表 的 mount
试图维护?在第2段中,是否表明系统表是内部文件系统的一部分,挂载过程做出这样一个表,它的条目是 特别档案 指向挂载的外部设备中的文件?
先说说2个看法。
mount /dev/sda2 /mnt/sda2
首先是两个观察: 特别档案 /dev/sda2
和一个非特殊文件(普通档案) /mnt/sda2
.让我们假设 /dev/sda1
是设备100,并安装在 /
. 让我们假设 /dev/sda2
是装置200,并安装在 /mnt/sda2
. 当你抬头看时,会发生什么?/mnt/sda2/x
? 该文件被存储为 /x
关于 /dev/sda2
. 下面是发生了什么。
mnt
在设备100的inode 1中,发现例如inode 5。sda2
在设备100的inode 5中,发现例如inode 17。/dev/sda2
安装在 /mnt/sda2
,该表返回 /dev/sda2
,也就是设备200--我们正在进入另一个挂载的文件系统。x
在设备200的inode 1中,找到例如inode 11。所以回答你的问题。