Размер блока файловой системы
Каково значение размера блока файловой системы? Если размер блока файловой системы установлен в 8K, это означает, что все операции ввода/вывода ввода/вывода будут иметь размер 8K? Итак, если мое приложение хочет читать, скажем, 16 байт при смещении 4097, тогда будет считываться блок 4K, начинающийся со смещения 4096?
Как работают записи в этом случае? Предположим, что я хочу написать 64 байта.
Ответы
Ответ 1
Вы правы. Размер блока - это единица работы файловой системы. Каждое чтение и запись выполняется в полных кратных размерам блока.
Размер блока также является наименьшим размером на диске, который может иметь файл. Если у вас размер блока размером 16 байтов, тогда файл размером 16 байт занимает полный блок на диске.
В книге "Практическая конструкция файловой системы" указано:
Блок: самый маленький блок, записываемый на диск или файловую систему. Все Файловая система состоит из операций над блоками. Файловая система блок всегда имеет тот же размер или больше (в целых кратных), чем размер блока диска.
Ответ 2
Обычно, когда вам приходится иметь дело с файлами в программировании, вы должны использовать абстракцию Stream.
Операции ввода-вывода через код часто читаются и записываются в потоки; чтение и запись из и в потоки, можно буферизовать так, чтобы фрагменты файла могли быть прочитаны или записаны.
Размер блока по fs относится к поверхности диска отображения; незначительный размер одного блока - количество блоков (и, следовательно, элементы в таблице, которые хранят информацию о распределении файлов).
Так что ОС так может отображать файл на диске дискретно на основе размера блока и иметь меньшую "карту файлов".
Как я знаю, это не влияет на абстракцию потока в API языка программирования.