Понимание понятия Inodes

Я обращаюсь к ссылке о понятии Inodes

Я смущен на частях:

  1. 12 прямых указателей блока
  2. 1 единственный косвенный указатель блока
  3. 1 двойной косвенный указатель блока
  4. 1 тройной косвенный указатель блока

Теперь в схеме говорится, что каждый указатель составляет 32/64 бита.

  • [Запрос]: Почему и как эти значения выведены? Я имею в виду, почему конкретно имеют указатели только на 32 или 64 бита?

В схеме говорится, Один блок данных {8 КБ} для каждого указателя {байты на 4 байта/8}

  • [Запрос]: Как это на самом деле удается? т.е. 8*1024 байта / 8 байтов = 1 024 байта? Какова логика позади наличия 8-байтового указателя для блока 8 КБ?

5
задан Abhijeet Kasurde 25 May 2014 в 02:53
поделиться

2 ответа

Указатели, о которых идет речь, являются адресами дисковых блоков - каждый указатель содержит информацию, необходимую для идентификации блока на диске. Поскольку каждый блок диска имеет размер не менее 512 байт (иногда 4096 или 8192 байт), при использовании 32-битных адресов диск может адресовать до 512 * 4 * 10243 = 2 ТиБ (тебибайта - чаще называемого терабайтом) при условии использования блоков размером 1/2 КиБ; при увеличении размера блока размеры соответственно увеличиваются (так, 32 ТиБ при размере блока 8 КиБ). Для схемы адресации для больших дисков придется перейти к большим размерам блоков или большим адресам дисков - следовательно, 48- или 64-битные адреса могут быть приемлемыми.

Итак, чтобы ответить на вопрос 1, 32 бита - это обычный размер для многих вещей. Очень часто, когда 32 бита уже недостаточно велики, следующий разумный размер - 64 бита.

Ответ на вопрос 2:

  • При блоках данных размером 8 KiB, если файл имеет размер 96 KiB или меньше, то он использует 12 блоков или меньше на диске, и все адреса этих блоков хранятся непосредственно в самом inode.

  • Когда файл становится больше, дисковый драйвер выделяет один косвенный блок и записывает его в inode. Когда драйверу нужно получить блок, он считывает косвенный блок в память, а затем находит адрес нужного блока из косвенного блока. Таким образом, для получения данных требуется (номинально) два чтения, хотя, конечно, косвенный блок имеет тенденцию кэшироваться в памяти.

  • При размере блока 8 KiB и дисковых адресах размером 4 байта в одном косвенном блоке можно разместить 2048 дисковых адресов. Таким образом, для файлов размером от 96 KiB + 1 байт до 16 MiB или около того, существует только один косвенный блок.

  • Если файл становится еще больше, то драйвер выделяет двойной косвенный блок. Каждый указатель в двойном косвенном блоке указывает на один косвенный блок. Таким образом, вы можете иметь еще 2048 косвенных блоков, каждый из которых может эффективно указывать на 16 МБ, что позволяет хранить файлы размером до 32 ГБ (приблизительно).

  • Если файл становится еще больше, то драйвер выделяет тройной косвенный блок. Каждый из 2048 указателей в тройном косвенном блоке указывает на двойной блок. Таким образом, при 32-битной схеме адресации с 32-битными адресами можно было адресовать файлы размером примерно до 64 ТиБ. Только вот дисковые адреса кончатся раньше (максимум 32 ТиБ из-за 32-битных адресов к блокам по 8 КиБ).

Таким образом, структура inode может обрабатывать файлы большего размера, чем 32-битные дисковые адреса.

Я оставлю читателю возможность посмотреть, как изменится ситуация с 64-битными дисковыми адресами.

10
ответ дан 18 December 2019 в 06:22
поделиться

Прежде чем давать ответы, вы должны понять, как работает файловая система:

Когда пользователь или программа обращается к файлу по имени, операционная система использует это имя для поиска соответствующего индексного дескриптора, который затем позволяет системе получить информацию о файле, необходимую для выполнения дальнейших операций. То есть имя файла в Unix-подобной операционной системе является просто записью в таблице с номерами inode, а не связано напрямую с файлом (в отличие от других операционных систем, таких как системы Microsoft Windows). Номера inode и соответствующие им inode хранятся в таблицах inode, которые хранятся в стратегических местах файловой системы, в том числе рядом с ее началом.

Ответ на первый вопрос заключается в том, что битовое пространство покрывает всего 32 или 64 бита. просто он составляет 2 ^ 32, и он достаточно велик, чтобы определить все эти переменные. Кроме того, для дальнейшего использования он должен знать размер бит для операций. В вашем примере они просто определены таким образом.

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

Предлагаю вам ознакомиться с этой книгой, очень полезной для понимания файловой системы Unix .

alt text

3
ответ дан 18 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: