Приведет ли последовательное чтение файла к случайным поискам на диске?

У меня сложилось впечатление, что последовательное сканирование файла на самом деле будет последовательным поиском на диске. Однако недавно я прочитал, что блоки файла могут быть записаны на диск файловой системой не подряд. Если индексные дескрипторы используются в качестве карты, и каждый блок получается путем следования указателю блока, мне интересно, действительно ли фактический механизм, с помощью которого файловая система извлекает блоки файла, является последовательным?

Если ответ зависит от файловой системы, было бы здорово указать некоторые основные файловые системы. Спасибо.


person Phelodas    schedule 08.08.2016    source источник
comment
Для начала нужно дать определение последовательности -- на HDD нет последовательности, так как HDD трехмерный (пластина/дорожка/сектор).   -  person Eugene Mayevski 'Callback    schedule 08.08.2016
comment
@EugeneMayevski'EldoS последовательные == непрерывные блоки на жестком диске.   -  person itisravi    schedule 09.08.2016
comment
@itisravi ваш комментарий, к сожалению, не применим, потому что последовательный и смежный являются синонимами, и проблема с ними была указана в моем предыдущем комментарии. Более того, два соседних сектора не являются смежными. Сектора на HDD с самого начала последовательно не нумеруются, поэтому логический сектор 1 и логический сектор 2, даже когда они находятся на одной дорожке (цилиндре), соседями не являются.   -  person Eugene Mayevski 'Callback    schedule 09.08.2016
comment
@EugeneMayevski'EldoS Хорошо, не знал. Так что же означает непрерывное распределение? Должна быть какая-то логика, которая распределяет блоки так, чтобы они находились в непосредственной физической близости (даже если они не были последовательно пронумерованы), чтобы минимизировать время поиска между секторами одной и той же пластины и между пластинами при чтении файла.   -  person itisravi    schedule 09.08.2016


Ответы (1)


Файловые системы пытаются выделить как можно больше последовательных блоков во время записи. Но по мере их старения (т. е. много создания + удаления с течением времени) фрагментация становится неизбежной. Существуют эвристики для уменьшения фрагментации, такие как спекулятивное предварительное выделение, отложенное предварительное выделение и т. д. Сами приложения могут выполнять такие действия, как предварительное выделение (пример fallocate), включение упреждающего чтения и запуск инструментов дефрагментации в зависимости от функций, доступных в файловой системе, чтобы сделать блоки непрерывными или, по крайней мере, читается быстрее.

person itisravi    schedule 08.08.2016