为什么文件系统有自己的块大小,而不是使用硬盘块大小?

Why's filesystem has your own block size, instead of using hard disk block size?

简而言之,文件系统是如何与块设备通信的?

我不太了解块大小。我认为 ext4 (Linux) 文件系统的块大小是 4KB,考虑到现代处理器的页面大小 (4KB),这是合乎逻辑的。现在我认为现代 SSD 的块大小(最小可寻址单元)为 256KB 或 4MB,具体取决于磁盘。这可能是由于几个因素(内存吞吐量、成本与性能等)造成的。

In short, how's file system communicate with block device?

文件系统不与块设备通信,OS 可以。在 x86 上,OS 设置 PCI DMA 主机控制器的寄存器,称为 AHCI (https://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html)。 OS 以 256KB/4MB 的块触发 read/write 周期 to/from RAM。它可能包含它在启动时加载的文件系统的结构。因此它已经知道不同文件的位置(它有一个缓存)。它将加载它需要的文件系统部分,read/write 文件,然后以大块的形式重写磁盘上的修改。

此外,AHCI 在命令完成时触发 MSI 中断。基本上,OS 代表用户模式进程触发 DMA read/write 周期。然后它将这些进程放在等待 IO 队列中。中断时,它将进程放回 运行 队列。