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

标签 linux ubuntu operating-system filesystems

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

最佳答案

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

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


文件系统不与 block 设备通信,操作系统可以。在 x86 上,操作系统设置 PCI DMA 主机 Controller 的寄存器,称为 AHCI (https://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html)。操作系统以 256KB/4MB 的 block 触发对 RAM 的读/写周期。它可能包含它在启动时加载的文件系统的结构。因此它已经知道不同文件的位置(它有一个缓存)。它将加载它需要的文件系统部分,读/写文件,然后以大块的形式重写磁盘上的修改。
此外,AHCI 在命令完成时触发 MSI 中断。基本上,操作系统代表用户模式进程触发 DMA 读/写周期。然后它将这些进程放在等待 IO 队列中。在中断时,它会将进程放回运行队列。

关于linux - 为什么文件系统有自己的 block 大小,而不是使用硬盘 block 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69481433/

相关文章:

linux - 如何在 Linux 上获取中断向量号?

linux - 用于记录 Linux 进程的 CPU 和内存使用情况的 Shell 脚本

c++ - 在控制台中同时输入和输出

bash - 通过命令行别名的 CSV 列计数

google-chrome - Ubuntu 14.04 + fglrx + google-chrome = 故障?

c++ - 目标文件平台独立吗?

.net - Windows 10 更新后 Windows Mobile 设备中心停止工作

c++ - 在 eclipse、Red Hat Linux 中运行 c++ 项目时出现问题

c - 为什么我在命令行上看不到 execvp() 的结果?

ubuntu - 尝试将文件夹/文件从远程服务器传输到本地时,协议(protocol)错误 : mtime. 秒不存在