看起来,imap的要点是要保持个别inode的点,以便能够以非常快的方式完成写操作(有人可以解释它是如何工作的),但我想知道让imaps包含指针到其他imaps了。 不仅如此,它们也存在于多个层面上
一个iNode映射(有时候被篡改为imap,尽pipeIMAP是一个电子邮件协议),是一个指向iNode的指针(看起来你已经得到了这个)。 这在日志(主要是日志文件系统)上用作抽象层。 基本上,当你想查找给定的文件系统iNode时,翻译层查找该位置的iNode地图,并返回文件系统实际上应该指向的当前iNode。 然后读取该位置以查找该文件。
一些文件系统可以堆叠这些。 当多次写入单个逻辑文件系统iNode而不刷新日志/日志时,则每个写入将使用磁盘上的新物理位置,包括指向该位置的iNode。 每个过时的iNode地图都被更新为指向新的iNode地图,并最终到达当前的iNode。
这背后的推理不是速度,而是一致性。 在写入过程中,在磁盘上select一个新位置,写入完成,然后旧位置更新为指向新位置。 日志/日志合并后,文件系统将更新为指向最新位置,并释放旧位置。 这样,如果在任何时候出现电源故障,您永远不会丢失数据,文件系统指向旧版本的文件或新的,但从来没有任何其他(如一半写入文件,或损坏的数据,或草地)。
这是处理结构的一个相当典型的方式,指向其他结构,并可能在大小上发生根本性的变化。 文件系统已经在分区上pipe理固定大小的存储空间块。 所以你通常使用这个大小(或它的倍数)作为你的单位大小。
如果你有足够的物体,你可以把它们放在一个块里,你就这样做了。 如果一个块溢出,用一个指向一个新分配的块的指针replace该块中的一个项目,该块保存被replace的指针和新的指针。
select此方法是因为:
它与caching很好地玩。 最高级别的块往往会被访问很多,并坚持在caching中。
它只需要以块大小的单位跟踪空闲空间,所以它适用于基于位图的自由空间pipe理。
它的规模很好,平均查找时间大致与元素数量的对数成正比。 (理论上,如果你在一个块中存储了32个指针,你可以通过n个查找访问32 ^ n个指针。)
它dynamic平衡。 在添加或删除指针时,可以执行相当简单的操作来保持树平衡。 (你不想得到一棵长而瘦的树,你想保持它肥胖和短,这实际上很容易做到。)