Концепция Inodes и размеров блоков

Итак, я выполняю некоторые задачи по обзору экзамена, и одна из них гласит: «В системе UNIX V длина блока составляет 1 КБ, и каждый блок может содержать в общей сложности 256 адресов блока. Используя схему inode, какова максимальная размер файла?"

Теперь ирония здесь в том, что профессор предоставил решения, и я понимаю математику / логику одинарного, двойного и тройного косвенного распределения, это прямое распределение, которое меня сбивает с толку.

Согласно решению, схема прямого размещения использует 10 блоков, потому что 2^10 байт = 1 КБ. Почему? Что стоит за этой формулой? Является ли это просто произвольным числом, которое придумали изобретатели UNIX System V inode? Потому что мне не имеет смысла иметь 10 указателей на 1024 байта, так как 1024/10 = один адрес каждые 102,4 байта, гораздо логичнее было бы иметь 8 или какое-то другое число.

Профессор намекнул, что такой вопрос вполне может быть на нашем выпускном экзамене, и я бы не стал рисковать, используя шаблонную формулу, которую не понимаю.


person Scott    schedule 11.12.2012    source источник
comment
Примечание: отредактированная опечатка: 20 блоков должны были быть 10 блоками.   -  person Scott    schedule 11.12.2012


Ответы (2)


Я уверен, что Google мог бы дать вам очень полный ответ гораздо быстрее и проще, чем задавать его здесь, и действительно, даже здесь я получаю 3145 результатов поиска для сообщений, содержащих «косвенные блоки inode», но поскольку вы спросили здесь, вот и все. ответ:

Что ж, структура inode на диске имеет место только для определенного количества адресов блоков вместе со всей другой информацией, которую она должна содержать, если она должна поместиться внутри самого блока.

В случае SysV inodes есть место для 40 байтов адресов блоков данных, которые были разбиты на 13 3-байтовых адресов и один байт, оставленный для «номера генерации файла» (который вы можете здесь игнорировать).

Итак, у вас есть 13 адресов, как вы собираетесь их эффективно использовать для адресации блоков данных файла для файлов, которые содержат гораздо больше, чем просто 13 блоков данных?

Было принято решение использовать первые 10 адресов в качестве прямых, т. е. они напрямую идентифицируют, какой блок является 1-10-м блоком данных файла. 11-й, 12-й и 13-й адреса указывают на косвенные блоки: одиночный косвенный блок, двойной косвенный блок и тройной косвенный блок соответственно.

Как отмечается в вопросе, каждый косвенный блок может содержать 256 адресов. Таким образом, вам просто нужно умножить их и сложить, учитывая, что набор адресов первого косвенного блока указывает непосредственно на блоки данных, а двойные косвенные блоки указывают сначала на большее количество блоков адресов блоков данных, а тройной- косвенные блоки указывают на блоки указателей на дополнительные блоки указателей на адреса блоков данных.

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

Понимание косвенных блоков в Файловые системы Unix

person Greg A. Woods    schedule 11.12.2012

В одном блоке из 1024 байт и 4-байтовых указателях можно хранить 1024/4 = 256 указателей. Если в каждом файле есть один блок для i-узлов, то вы получите 256 * 1024, т. е. файлы размером 256 КБ. Я не знаю, откуда взялись эти 10 блоков.

person perreal    schedule 11.12.2012