Понимание концепции Inodes - PullRequest
5 голосов
/ 03 мая 2010

Я имею в виду ссылку о понятиях Inodes

Я запутался в деталях:

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

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

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

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

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

Ответы [ 3 ]

12 голосов
/ 21 января 2012

Пример расчета максимального размера файла

* Assume that there are 10 direct pointers to data blocks, 1 indirect pointer, 1 double indirect pointer, and 1 triple indirect pointer
* Assume that the size of the data blocks is 1024 bytes = 1Kb, i.e., BlockSize = 1Kb
* Assume that the block numbers are represented as 4 byte unsigned integers, i.e., BlockNumberSize = 4b
* Some data blocks are used as index blocks. They store 1024 bytes / 4 bytes/entry = 256 entries
* Maximum number of bytes addressed by 10 direct pointers is

    = Number of direct pointers * Blocksize 
    = 10 * 1Kb
    = 10Kb


* Maximum number of bytes addressed by single indirect pointer is

    = NumberOfEntries * BlockSize
    = (Blocksize / BlockNumberSize) * BlockSize
    = (1Kb / 4b) * 1Kb
    = 256 * 1Kb
    = 256Kb


* Maximum number of bytes addressed by double indirect pointer is

    = NumberOfEntries^2 * BlockSize
    = (Blocksize / BlockNumberSize)^2 * BlockSize
    = (1Kb / 4b)^2 * 1Kb
    = (2^10 / 2^2)^2 * (2^10b)
    = (2^8)^2 * (2^10)b
    = (2^16) * (2^10)b
    = 2^6 * 2^20 b
    = 64 Mb


* Maximum number of bytes addressed by triple indirect pointer is

    = NumberOfEntries^3 * BlockSize
    = (Blocksize / BlockNumberSize)^3 * BlockSize
    = (1Kb / 4b)^3 * 1Kb
    = (2^10 / 2^2)^3 * (2^10b)
    = (2^8)^3 * (2^10)b
    = (2^24) * (2^10)b
    = 2^4 * 2^30 b
    = 16 Gb


* Maximum file size is 16Gb + 64Mb + 266Kb 
10 голосов
/ 03 мая 2010

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

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

Ответ на Q2:

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

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

  • Имея размер блока 8 КиБ и 4-байтовые адреса дисков, вы можете разместить 2048 адресов дисков в одном косвенном блоке. Таким образом, для файлов размером от 96 КиБ + 1 байт до 16 МБ или около того существует только один косвенный блок.

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

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

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

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

3 голосов
/ 03 мая 2010

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

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

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

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

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

альтернативный текст http://ecx.images -amazon.com / images / I / 511L2NK6ZNL._BO2,204,203,200_PIsitb-sticker-arrow-click, TopRight, 35, -76_AA300_SH20_OU01_.jpg

...