Видит ли файловая система запоминающее устройство как (очень большой) байтовый массив?

12

Я хочу знать, как файловая система записывает и читает с устройства хранения.

Я думаю, вот как это работает:

Файловая система не имеет прямого доступа к устройству хранения, но устройство хранения (драйвером устройства хранения) представляется файловой системе в виде (очень большого) байтового массива.

Например, если файловая система хочет получить доступ к жесткому диску, она просто получит доступ к байтовому массиву, представляющему жесткий диск.

Таким образом, файловая система может работать с любым типом запоминающего устройства (традиционный жесткий диск, SSD, USB-накопитель и т. Д.), И изменяется только драйвер устройства для запоминающего устройства.

Это изображение показывает то, что я только что объяснил:

введите описание изображения здесь

Правильно ли я понимаю?

joseph_m
источник

Ответы:

15

В Linux (и Unixes эры 1980-х годов) запоминающее устройство (довольно часто дисковый раздел на каком-то жестком диске или на некотором SSD ) является блочным устройством (см. Это ), так же как и [последовательность] блоков (которая является базовая единица физического ввода / вывода). Размер физического блока зависит от аппаратного обеспечения (старые диски IDE имели размер блока 512 байт, новые большие диски SATA имеют размер блока 4 Кбайт, прочитайте вики-страницу расширенного формата ), а также когда вы создаете файловую систему (например mkfs, с помощью mke2fs (8)) вы можете указать размер логического блока, который будет кратным (часто малой степени двух, включая 1) этого физического размера блока. Читайте также о логической адресации блоков .

В прошлом (вспомним рабочие станции Sun3 1990-х годов) диск был сделан из цилиндров с головками, организованными по секторам (см. Википейдж CHS ), с сектором, содержащим блок. Сегодня они все еще остаются, но являются искусственным артефактом, предоставляемым контроллером жесткого диска (схема на самом диске). В некоторых ОС драйвер блочного устройства перепланировал и переупорядочил запросы ввода-вывода, чтобы минимизировать перемещение головки диска и задержку вращения .

Таким образом, файловая система может работать с любым типом запоминающего устройства (традиционный жесткий диск, SSD, USB-накопитель и т. Д.), И изменяется только драйвер устройства для запоминающего устройства.

Да, но зло в деталях (например, прочитайте про TRIM и Write Amplification , специфичные для твердотельных накопителей). И детали важны, поэтому фактическая реализация менее проста, чем ваша фигура. Узнайте больше о файловых системах (и подумайте о кластерных и удаленных файловых системах, включая SMB и NFS ; прочитайте также о Logical Volume Manager ).

Прочитайте Операционные системы: Три Легких Части (и его постоянная часть).

Обратите внимание, что блочные устройства исчезли во FreeBSD (фактически предоставляя общую абстракцию для символьных и блочных устройств). Я подозреваю, что даже в Windows ОС знает о разделах, размере блоков и т. Д. (Но вы должны проверить).

Василий Старынкевич
источник
Windows также обрабатывает разделы на дисках, и каждый раздел может использовать свою файловую систему (возможно, FAT-32 в одном и NTFS в другом). Файловая система может обращаться к разделам на уровне блоков, или блоки могут быть объединены в «кластеры». На любом данном разделе размер кластера будет фиксированным.
Саймон Б
Я вроде знал это, потому что MSDOS в основном знал.
Старынкевич
На самом деле FreeBSD по-прежнему использует то, что вы называете «блочные устройства». Нет доступа к жесткому диску, кроме как в виде большого массива блоков. Они просто называются символьными / необработанными устройствами во FreeBSD. Они по-прежнему обращаются к устройству в виде большого массива блоков. Единственное, чего не хватает во FreeBSD - это кэширование на уровне устройства, которое не требуется, поскольку файловая система уже обеспечивает кэширование.
юхист
3

Все, что говорит Василий Старынкевич, правильно. Я добавлю немного больше. Действительно, дисководы были «блочными», но блочные устройства (и многие другие устройства) были представлены в двух формах: «сырой» и «приготовленный». Необработанные устройства можно адресовать только частями, кратными их собственному размеру. Таким образом, устройство с необработанным диском может считывать или записывать только один или несколько блоков одновременно, а не только один или два байта. Приготовленные устройства добавили слой, который позволял бы такие меньшие операции, а также различные другие функции.

Файловые системы работали с необработанными устройствами и, таким образом, рассматривали их не как большой массив байтов, а скорее как большой массив блоков, как объяснил BS.

Тофер
источник