3

Я читаю книгу об операционных системах, и я запутался в части о внутренней файловой структуре. Цитата из книги:

Дисковые системы обычно имеют четко определенный размер блока, определяемый размером сектора. Весь дисковый ввод-вывод выполняется в единицах одного блока (физическая запись), и все блоки имеют одинаковый размер. Вряд ли размер физической записи будет точно соответствовать длине желаемой логической записи. Логические записи могут даже различаться по длине.

Упаковка нескольких логических записей в физические блоки является распространенным решением этой проблемы. Например, операционная система UNIX определяет все файлы как просто потоки байтов. Каждый байт индивидуально адресуется своим смещением от начала (или конца) файла. В этом случае размер логической записи составляет 1 байт. Файловая система автоматически упаковывает и распаковывает байты в блоки физического диска - скажем, 512 байтов на блок - по мере необходимости.

Что подразумевается под упаковкой нескольких логических записей в физические блоки здесь?

2 ответа2

3

Это на самом деле очень просто, но сложно объяснить. Я думаю, что нам просто нужно перефразировать то, что уже сказал автор.

Диск требует, чтобы вы говорили с ним в блоках. Предполагая, что размер блока составляет 512 байт:

Если вы хотите записать 400 байт на диск, вы должны добавить еще 112 байт, чтобы получить 512 байт. Дополнительные 112 байтов также могут быть нулями, но они должны быть там.

Когда вы хотите прочитать ваши 400 байтов с диска, жесткий диск даст вам 512 байтов, и ваша задача - отделить фактические данные от 112 байтов заполнения.

Это то, что мы называем упаковкой и распаковкой. Вы можете получить более сложный, чем пример выше, но это принцип.

1

Что подразумевается под упаковкой нескольких логических записей в физические блоки?

Сначала вы должны понять, что такое "логическая запись" .
Это может быть переменная длина, например, текст в предложениях.
Из него может быть фиксированная длина, например структура данных.

Упаковка определяет, как организовать данные в виде этих логических записей в "физические" контейнеры, то есть блоки на диске.
Для записей, составленных из текста, доступ для чтения и записи, как правило, является последовательным (т.е. вы начинаете с начала и продвигаетесь к "концу"). Таким образом, эти записи будут упакованы без учета границ блоков.
Для записей, состоящих из (двоичных) данных, может возникнуть проблема с упаковкой, особенно когда записи данных будут доступны случайно (например, поиск в базе данных), а не последовательно (например, на ленте).

Назад во времена перфокарт (по 80 символов на карту). Я видел неудачную программу, которая хранила одну 80-байтовую запись на 512-байтовый сектор, чтобы упростить отображение записи на сектор для произвольного доступа. Для этого размера логической записи максимальное количество записей, которые могут быть упакованы (установлены) в один 512-байтовый блок, составляет шесть, с 32 неиспользуемыми байтами на сектор.
Для оптимального (произвольного) времени доступа (и за счет не минимизации места для хранения) логическая запись не должна занимать дисковые блоки (так что произвольный доступ может быть удовлетворен чтением или записью только одного блока).

Некоторые операционные системы, например * nixes, имеют тенденцию скрывать базовую структуру физических блоков при использовании файлов. Другие операционные системы могут предлагать файловые системы, которые больше раскрывают характеристики оборудования, такие как типы файлов, которые распределены из смежных секторов, или связанных секторов, или таблицей секторов, и системные вызовы, такие как readblk(), а также read() (для записи ). Упаковка записей фиксированной длины для произвольного доступа является более важной в такой среде.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .