我阅读了几个来源,但没有找到完整的信息。我想了解实际录音是如何发生的。
- 我是否正确理解我们处理块编号(例如,每个 4Kb)?那些。我们是否仍然存储一些最终数量的空闲块地址?
- 事实证明,操作系统并没有寻址特定的字节(如page RAM + offset的情况,这会导致32x的限制,例如,4GB的RAM),而只是向设备发送命令(例如,ssd)我现在要写的。找到一个空闲的数据块(他在开始时保存在某处)并说将以下数据写入该块并发送尽可能多的数据,每个数据块干扰(例如 4Kb)或更少,然后找到下一个块,或者如果它用完数据发送命令结束记录?
- 如果任何文件是无限数量的链接块,我找不到任何信息为什么对最大文件大小有限制?
是的,系统以某种形式存储条件块的编号。块大小也由设备的特性决定。它可以是 4 kb 或兆字节。例如,硬盘驱动器使用柱面、磁头、扇区系统。起初,这些是直接真实的“坐标”,现在它们不再存在,磁盘控制器可以报告数百个磁盘和磁头,然后它本身就会转换为真实数据。
在磁盘或其他外部设备的情况下,通常按字节寻址非常不方便,因此采用更大的单元。在 RAM 的情况下,出现了 4 GB 的限制,因为地址总线(允许您寻址特定字节)存储在 32 位寄存器中。32 分之 2 是 4 GB。现在,在 64 位系统中,事实上,地址的所有 64 位都没有使用,但通常大约 48 位(这仍然非常非常多 - 256 TB,但现在))。但这里也有一点。如果早些时候他们“逐字节”地使用内存,那么在某些时候他们意识到,如果数据总线不是 8 位而是 16 位,并且一次读取两个字节,则可以将速度提高一倍。无论如何,在许多情况下,仍然需要读取第二个字节。现在,据我所知,它们一次读取 64 个字节,即使实际上需要 1 个字节。
有趣的是,这究竟是如何发生在“非常低的水平”上的。并且有许多不同的协议。内存通常在并行总线上工作——也就是说,每个位都有一条线路,通常是这样发生的。首先,处理器(更准确地说是内存控制器,现在通常位于处理器中)在地址总线上设置所需的地址,然后通过单独的布线,给出“读/写”信号。内存在数据总线上公开必要的数据(或将其用于写入)并在单独的线上设置其标志。为什么使用单独的电线会出现这些麻烦?在这里你需要记住物理学。光速为 300,000 km/s,时钟频率为 3 GHz(为美而圆),结果是 3 10^8 m/s / 310^9 tk/s = 0.1 m/周期 - 每个处理器周期光传播 10 cm!10厘米是主板上从处理器到内存的导体长度。因此,在一个周期中,信号可能“无法达到/无法以正常形式建立”(是的,这很粗鲁,但请进入当时电路板上正在发生的电气过程并阅读有关电路的课程,它在一所技术大学教了几年,我不会)。
如果你拿其他东西,例如USB,那么就有串行传输。如果我们非常有条件地简化一切,那么通过改变电压,对 1 和 0 进行编码,双方的控制器就数据包传输的开始和结束的速度和符号达成一致。事实上,通过改变电压,数据被传输。包大小不同,在同一个维基百科https://ru.wikipedia.org/wiki/USB中,您可以看到所有变化的图表。在这里,您经常不得不低速可靠地播放,或者高速但顽皮。寻找中庸之道。
因此,他们提出了以小块存储/寻址的想法 - 从 512 字节到 4-8 kb。如果你做的少,你将不得不分配更多的空间来存储地址和大小,如果你做的更多,那么在一些块(片)的末尾会有未使用的空间(例如,如果文件是 128 字节, 并且块是 8 kb,那么几乎整个块都是空的......)。
一些文件系统也学会了绕过这个。据我所知,NTFS 可以在一个块中存储两个小文件。
一件有趣的事情由此而来。例如,如果磁盘大小为 1 MB,扇区为 1 KB(数字只是为了便于计算),那么这样的磁盘上不能保存超过 1024 个文件(但实际上更少- 您仍然需要将文件系统保存在某个地方。在计算机 Uknts 中,文件大小通常以块为单位表示以节省空间。没人知道它是 1 字节还是 2。每个块是 512 字节。它占用了 14 字节存储文件名、日期、大小、位置。是的,正好是 14 个字节(尽量把它全部挤进去,文件名是 6 个字符 + 3 个扩展名,磁盘分别为 400 和 800 kb)。
实际上,许多文件系统在放置所有必要信息的方式上有所不同。
还有其他存储信息的方式——磁带。在这里它们可能非常非常大,它们只是以连续流的形式写入那里,通常,为了读取文件,您需要逐个文件顺序读取头文件并计算要跳过多少(即倒带文件尺寸)。但是添加一个新文件很快——尾地址通常存储在开头的某个地方(它就像一个单链表)。但这是一种选择,可能还有其他存储选择。没有人会在开始时为一百或两条记录保留一个位置并留下下一张桌子的地址(原来是经典套牌)
让我们更深入。录音本身是如何工作的?有一个完整的发明和创新领域。例如,在光盘的情况下,起初一切都很简单——磁头只是以正确的方式磁化一小块光盘,当需要读取它时,它会检查这种磁化(磁带播放器几乎可以工作)一样!)然后我想写更多 - 他们开始弄清楚如何打包然后就开始了。他们写的不是一个位,而是一次写入 2 个,仅使用 4 度磁化(在 ssd 中使用相同的技巧)。然后他们开始在另一层之上直接写一层。是的,在这种情况下,会发生读取错误,但使用特殊技术来恢复数据(读取 - Reed-Solomon 码. 简而言之,我们在控制信息之上写入了 8 位有用信息和 3 位。如果一位被损坏,那么它可以被恢复,知道控制的。好处在哪里?现在你可以有条件地写两倍密集,即使知道一位总是损坏。疯狂地?也许吧,但是当发行的价格是数百万亿美元的利润时,你不会这样做。(同一个西部数据经常被抓到,他“不告诉”他在里面使用什么样的系统,有时,在同一个系列中,他只是简单地改变它,降低生产成本,人们发誓,因为他们通过间接迹象发现了这一点,有时甚至是重要的迹象(例如,由于控制器从事数据恢复,读取速度下降)我们将把它的诚实/合法性留给制造商的良心)。
我们在硬件本身(铁)级别上存在限制,在使用此硬件的实现级别上存在限制。因此,它们应该一起考虑。
在使用 RAM 的情况下,限制之一是我们必须向总线发送我们想要接收数据的地址的硬件。由此可见,即使 32 位系统上的 RAM 更大,我们也无法访问它,因为我们无法将地址推高。
硬件也解决了这个限制,在支持 PAE 的处理器上,32 位系统克服了 4GB RAM 限制。
https://wasm.in/blogs/stranichnaja-adresacija-pae.476/
另一个问题是 RAM 必须很快,所以我们尝试一次性从中传输数据。这是通过在所有总线上并行传输数据来实现的。如果我们能够始终如一地填写这些地址,那么限制就没有问题,但这样的内存也会慢很多倍。
用 RAM 完成。
外部存储器不是为最高速度而设计的,而是为存储信息而设计的。在这里,我们不再局限于一次性传输整个地址的任务,而是通过顺序命令执行控制。因此,在 RAM 中没有硬件限制。
在相同的 FAT32 的情况下,在设备驱动程序级别会发生与 RAM 相同的事情。它是很久以前设计的,并且还要求将地址作为 32 位数字在一个块中传输。就是这样,这是文件系统实现本身的要求。
这个限制不是硬件限制,也就是说是可以克服的,于是出现了exFat,简单的去掉了这些软件限制,修复了旧系统的问题。
是的,空间被分成不同长度的块,但我们自己可以确定这些块的大小以及如何使用它。这是工程师的工作,他们希望如何使用文件系统。您可以对卷的整个卷进行预分区,也可以想出一个系统来动态扩展地址空间和文件空间。在这种情况下有许多不同的解决方案。
https://timeweb.com/ru/community/articles/tipy-faylovyh-sistem-ih-prednaznachenie-i-otlichiya
只是到最后,你还是要考虑系统如何运行得相当稳定和快速。同时,在现代系统中,除了文件本身,它们的元数据和日志系统也会被存储以防万一发生故障。
如果您想了解更详细的内容,可以阅读 Unix 中的 iNode 系统。
https://www.techspot.com/article/2377-file-system-explainer/
https://www.researchgate.net/publication/38107261_A_Hardware_Filesystem_Implementation_with_Multidisk_Support