2016-08-08 9 views
1

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

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

+0

Сначала вам нужно дать определение «последовательный» - на жестком диске нет последовательности, так как жесткий диск 3-мерный (пластинка/дорожка/сектор). –

+0

@ EugeneMayevski'EldoS последовательный == смежные блоки на жестком диске. – itisravi

+0

@itisravi Ваш комментарий, к сожалению, неприменим, поэтому «последовательные» и «смежные» являются синонимами, и проблема с ними указана в моем предыдущем комментарии. Более того, два смежных сектора не смежны. Секторы на жестком диске с самого начала не нумеруются последовательно, поэтому логический сектор 1 и логический сектор 2, даже если они находятся на одной и той же дорожке (цилиндре), не являются соседями. –

ответ

0

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