操作系统完成的“文件打包”是什么?

操作系统完成的“文件打包”是什么?

我正在读关于操作系统,我对以下部分感到困惑内部文件结构书中引用:

磁盘系统通常具有由扇区大小决定的明确定义的块大小。所有磁盘 I/O 都以一个块(物理记录)为单位执行,并且所有块的大小相同。物理记录大小不太可能与所需逻辑记录的长度完全匹配。逻辑记录的长度甚至可能有所不同。

将大量逻辑记录打包到物理块中是解决此问题的常见方法。例如,UNIX 操作系统将所有文件定义为简单的字节流。每个字节都可以通过其与文件开头(或结尾)的偏移量单独寻址。在这种情况下,逻辑记录大小为 1 字节。文件系统会根据需要自动将字节打包和解包到物理磁盘块中(例如,每块 512 字节)。

是什么意思将多个逻辑记录打包到物理块中在这里?

答案1

其实很简单,但解释起来却很难。我认为我们只需要复述作者已经说过的话。

磁盘需要你跟它说话. 假设块大小为 512 字节:

如果你想写入 400 字节到磁盘,你必须再添加 112 字节,使之达到 512 字节。额外的 112 字节可能为零,但它们必须存在。

当您想从磁盘读取 400 字节时,硬盘将为您提供 512 字节,您的工作就是从 112 字节填充中分离出实际数据。

这就是我们所说的包装拆开。你可以得到比上面的例子更复杂的东西,但是这就是原理。

答案2

这里的“将多个逻辑记录打包成物理块”是什么意思?

首先你必须了解什么是“逻辑记录”是。
它可以是可变长度,例如句子中的文本。
也可以是固定长度,例如数据结构。

打包决定了如何将这些逻辑记录形式的数据组织到“物理”容器(即磁盘块)中。
对于由文本组成的记录,读写访问通常是连续的(即从头开始,一直到“结尾”)。因此,这些记录将被打包,而不考虑块边界。
对于由(二进制)数据组成的记录,打包可能是一个问题,尤其是当数据记录将被随机访问(例如数据库查找)而不是按顺序访问(如磁带)时。

回到打孔卡的时代(每张卡 80 个字符)。我曾见过一个蹩脚的程序,它在每个 512 字节扇区中存储一个 80 字节记录,以简化随机访问的记录到扇区的映射。对于该大小的逻辑记录,可以打包(或装入)到一个 512 字节块中的最大记录数是六个,每个扇区有 32 个未使用的字节。
为了获得最佳(随机)访问时间(并且不最小化存储空间),逻辑记录不应跨越磁盘块(以便只需读取或写入一个块即可满足随机访问)。

某些操作系统(例如 *nix)在使用文件时倾向于隐藏底层物理块结构。其他操作系统可能会提供更多暴露硬件特性的文件系统,例如由连续扇区、链接扇区或扇区表分配的文件类型,以及系统调用,例如读取块()读()(对于记录)。在这样的环境中,固定长度记录的打包对于随机访问来说更为重要。

相关内容