Как выделяется место на диске для отредактированного файла - PullRequest
0 голосов
/ 09 апреля 2011

Предположим, я сохраняю текстовый файл в хранилище на жестком диске (предположим, что хранилище на диске новое и поэтому дефрагментировано), а имя файла - A с размером файла, скажем, 10 МБ

Полагаю, файл AЗанимает некоторое место на диске, как показано, где х - это незанятое пространство / память на диске

AAAAAAAAAAAAA xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx *

Теперь я создаю и сохраняю другой файл Bкакой-то размер.Таким образом, B будет сохранен как

AAAAAAAAAAAAA BBBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxx - поскольку диск дефрагментирован, я предполагаю, что хранилище будет непрерывным.

Здесь, если я отредактируюи уменьшите размер файла до 2 МБ.Можете ли вы сказать, как сейчас будет распределяться память?

Некоторые варианты, о которых я мог бы подумать: AAAAAA xxxxxxxxxBBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxx

или AA xxx AA xxx A x A xxBBBBBBBBBBBBBBBBXBXBXBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * * * * * * * * * * * *

или совершенно новое место освобождает больший кусок для другихфайлы.xxxxxxxxxxxxxxxBBBBBBBBBBBBBBBB AAAAAA xxxxxxxxxxxxxxxxxxxxxx

или это любой другой способ, основанный на любом алгоритме или структуре данных.

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

Многое будет зависеть от того, какой тип файловой системы вы используете (а также от того, как ОС взаимодействует с ней).Поведение файловой системы NTFS в Windows может отличаться от поведения файловой системы ext3 в Ubuntu для того же набора логических операций.

В целом, однако, большинство современных файловых систем определяют файл как последовательность указателейна блоки на диске.Существует минимальный размер блока, который описывает наименьший выделяемый блок (обычно в диапазоне от 512 байт до 4 Кбайт), поэтому файлам, размер которых меньше этого размера или не является точным кратным этому размеру, будет выделено определенное количество дополнительного пространства.

Так что же происходит, когда вы выделяете 10 МБ файл «А»?Файловая система резервирует блоки размером 10 МБ (возможно, даже с учетом нескольких дополнительных блоков в конце для размещения любых незначительных изменений, внесенных в файл или его метаданные) для содержимого файла.В идеале эти блоки должны быть смежными, как в вашем примере.Когда вы редактируете «А» и уменьшаете его, файловая система освобождает часть или все (скорее всего, все, так как в большинстве случаев редактирование «А» предполагает повторную запись всего содержимого «А» на диск, поэтому нет особых причин дляфайловая система предпочитает хранить «A» в том же физическом местоположении, а не записывать данные в новое место где-либо еще на диске) блоков, выделенных для «A», и обновлять свою ссылку, чтобы включить любые новые блоки, которые были выделены, если это необходимо,

С учетом вышесказанного, в типичном случае и с использованием современной файловой системы и ОС, я ожидаю, что ваш пример создаст следующее конечное состояние на диске ('b' и 'a' представляют дополнительные байты, выделенные для 'B'и' A ', которые не содержат каких-либо значимых данных):

xxxxxxxxxxxxxxxBBBBBBBBBBBBBBBBBBAAAAAAaaxxxxxxxxxxxxxxxxxxxxxx

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

Таким образом, краткий ответ: «это зависит».

0 голосов
/ 09 апреля 2011

То, как выполняется распределение, полностью зависит от типа файловой системы (например, FAT32, NTFS, jfs, reiser и т. Д. И т. Д.) И программного обеспечения драйвера.Ваше предположение о том, что файл будет храниться непрерывно, не обязательно верно - может быть более производительным хранить его в другом шаблоне, в зависимости от аппаратного обеспечения.Например, допустим, у вас есть диск с 16 головками цилиндров и размером блока в 512 байт, тогда было бы наиболее эффективно хранить объем 8 КБ данных на 16 различных цилиндрах.Вращая механические детали, история резко меняется - концепция типа «фрагментация» внезапно теряет смысл, потому что время доступа к каждому блоку одинаково - независимо от того, в каком порядке это делается.

0 голосов
/ 09 апреля 2011

Нет, это так:

Сначала вы создаете файл A: (здесь большой A означает данные, фактически используемые для A, и 'a' для зарезервированных данных для A, x означает бесплатно).

AAAAAAAAAAAAAaaaaaaaXXXXXXXXXXXXXXXXXXX

Затем добавляется B:

AAAAAAAAAAAAAaaaaaaaBBBBbbbbbbbbbb

Затем добавляется C, но не остается незарезервированного пространства:

AAAAAAAAAAAAAaaaaaaaBBBBbbbbCCCccc

Если A обрезается, это то, что произойдет

AAAAAaaaaaaaxxxxxxxxBBBBbbbbCCCccc

Если B теперь расширен, это произойдет:

AAAAAaaaaaaaBBBBxxxxxBBBBBBBBCCCccc

Вы видите, что данные для B больше не близки друг к другу, это называется фрагментацией. Когда вы запускаете инструмент дефрагментации, данные снова помещаются близко друг к другу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...