~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ C1E33F0D2D99D94B2436B81E56CBDB1F__1695756720 ✰
Заголовок документа оригинал.:
✰ inode - Wikipedia ✰
Заголовок документа перевод.:
✰ индексный дескриптор — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Inode ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/c1/1f/c1e33f0d2d99d94b2436b81e56cbdb1f.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/c1/1f/c1e33f0d2d99d94b2436b81e56cbdb1f__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 04:58:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 26 September 2023, at 22:32 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

индексный дескриптор — Википедия Jump to content

индексный дескриптор

Из Википедии, бесплатной энциклопедии

Индексный дескриптор (индексный узел) — это структура данных в файловой системе в стиле Unix , которая описывает объект файловой системы, такой как файл или каталог . Каждый индексный дескриптор хранит атрибуты и расположение дисковых блоков данных объекта. [1] Атрибуты объектов файловой системы могут включать метаданные (время последнего изменения, [2] доступ, изменение), а также владельца и разрешения . данные [3]

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

Этимология [ править ]

была неуверенность В списке рассылки ядра Linux относительно причины использования «i» в «inode». В 2002 году этот вопрос был задан пионеру Unix Деннису Ритчи , который ответил: [4]

По правде говоря, я тоже не знаю. Это был просто термин, который мы начали использовать. «Индекс» — мое лучшее предположение из-за немного необычной структуры файловой системы, в которой информация о доступе к файлам хранится в виде плоского массива на диске, а вся информация об иерархических каталогах находится отдельно от нее. Таким образом, i-номер — это индекс в этом массиве, i-узел — это выбранный элемент массива. (В первом издании руководства использовалось обозначение «i-», дефис постепенно опускался.)

Статья Ричи и Кена Томпсона 1978 года подтверждает идею «индекса» как этимологического происхождения инодов. Они написали: [5]

[…] запись каталога содержит только имя связанного файла и указатель на сам файл. Этот указатель представляет собой целое число, называемое i-номером (индексным номером) файла. При доступе к файлу его i-номер используется как индекс в системной таблице ( i-список ), хранящейся в известной части устройства, на котором находится каталог. файла Найденная таким образом запись ( i-node ) содержит описание файла.

Кроме того, Морис Дж. Бах писал, что слово inode «является сокращением термина индексный узел и обычно используется в литературе по системе UNIX». [6]

Подробности [ править ]

Дескрипторы файлов , таблица файлов и таблица индексных дескрипторов в Unix [7]

Файловая система опирается на структуры данных о файлах, а не на их содержимое. Первые называются метаданными — данными, описывающими данные. Каждый файл связан с индексным дескриптором , который идентифицируется целым числом, часто называемым i-номером или номером индексного дескриптора .

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

Номер индексного дескриптора индексирует таблицу индексных дескрипторов файловой системы. По номеру индексного дескриптора драйвер файловой системы ядра может получить доступ к содержимому индексного дескриптора, включая местоположение файла, тем самым обеспечивая доступ к файлу. Номер индексного дескриптора файла можно найти с помощью ls -iкоманда. ls -i Команда печатает номер индексного дескриптора в первом столбце отчета.

Во многих старых файловых системах индексные дескрипторы хранятся в одной или нескольких областях фиксированного размера, которые настраиваются во время создания файловой системы, поэтому максимальное количество индексных дескрипторов фиксируется при создании файловой системы, что ограничивает максимальное количество файлов, которые может хранить файловая система. держать. Типичная эвристика распределения индексных дескрипторов в файловой системе — один индексный дескриптор на каждые 2 КБ байт, содержащихся в файловой системе. [8]

В некоторых файловых системах в стиле Unix, таких как JFS , XFS , ZFS , OpenZFS , ReiserFS , btrfs и APFS, отсутствует таблица индексных дескрипторов фиксированного размера, но они должны хранить эквивалентные данные, чтобы обеспечить эквивалентные возможности. Распространенные альтернативы таблицам фиксированного размера включают B-деревья и производные B+-деревья .

Имена файлов и последствия для каталогов:

  • Индексные дескрипторы не содержат имен жестких ссылок , а содержат только метаданные других файлов.
  • Каталоги Unix представляют собой списки ассоциативных структур, каждая из которых содержит одно имя файла и один номер индексного дескриптора.
  • Драйвер файловой системы должен найти в каталоге определенное имя файла, а затем преобразовать это имя в правильный соответствующий номер индексного дескриптора.

Представление этих данных в памяти ядра операционной системы называется struct inodeв Линуксе . В системах, производных от BSD, используется термин vnode ядра («v» относится к уровню виртуальной файловой системы ).

Описание индексного дескриптора POSIX [ править ]

Стандарт POSIX требует поведения файловой системы, на которое сильно влияют традиционные UNIX файловые системы . Индексный дескриптор обозначается фразой «серийный номер файла», определяемой как каждой файловой системы . уникальный идентификатор файла для [9] Этот серийный номер файла вместе с идентификатором устройства, содержащего файл, однозначно идентифицируют файл во всей системе. [10]

В системе POSIX файл имеет следующие атрибуты: [10] который может быть получен с помощью stat системный вызов:

  • Идентификатор устройства (идентифицирует устройство, содержащее файл; то есть область уникальности серийного номера).
  • Серийные номера файлов.
  • Режим файла , который определяет тип файла и то, как владелец файла, его группа и другие могут получить доступ к файлу.
  • , Количество ссылок показывающее, сколько жестких ссылок указывают на индексный дескриптор.
  • Идентификатор пользователя владельца файла.
  • Идентификатор группы файла.
  • Идентификатор устройства файла, если это файл устройства .
  • Размер файла в байтах .
  • Временные метки , указывающие, когда сам индексный дескриптор был последний раз изменен ( ctime , время изменения индексного дескриптора ), последнее измененное содержимое файла ( mtime , время модификации ) и последний доступ ( atime , время доступа ).
  • Предпочтительный размер блока ввода-вывода .
  • Количество блоков, выделенных этому файлу.

Последствия [ править ]

Файловые системы, созданные с использованием индексных дескрипторов, будут иметь следующие административные характеристики:

Файлы с несколькими именами и жесткие ссылки [ править ]

Файлы могут иметь несколько имен. Если несколько имен жестко связаны с одним и тем же индексным дескриптором, тогда имена эквивалентны; т.е. тот, который будет создан первым, не имеет особого статуса. В этом отличие от символических ссылок , которые зависят от исходного имени, а не от индексного дескриптора (номера).

Сохранение индексного дескриптора и несвязанные файлы [ править ]

Индексный дескриптор может не иметь ссылок. Индексный дескриптор без ссылок представляет собой файл, в котором не осталось записей каталога или путей, ведущих к нему в файловой системе. Файл, который был удален или в котором отсутствуют записи каталога, указывающие на него, называется «несвязанным» файлом.

Такие файлы удаляются из файловой системы, освобождая занятое место на диске для повторного использования. Индексный дескриптор без ссылок остается в файловой системе до тех пор, пока ресурсы (дисковое пространство и блоки), освобожденные несвязанным файлом, не будут освобождены или файловая система не будет изменена.

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

Преобразование номера индексного дескриптора и получение пути к каталогу файлов [ править ]

Обычно невозможно сопоставить открытый файл с именем файла, которое использовалось для его открытия. Когда программа открывает файл, операционная система преобразует имя файла в номер индексного дескриптора, а затем отбрасывает имя файла. В результате такие функции, как getcwd() и getwd() , который извлекает текущий рабочий каталог процесса, не может напрямую получить доступ к имени файла.

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

Некоторые операционные системы сохраняют дополнительную информацию, чтобы ускорить выполнение этой операции. Например, в Linux VFS [11] кэш записей каталога, [12] также известные как dentry или dcache, представляют собой записи кэша, используемые ядром для ускорения операций файловой системы путем хранения информации о ссылках на каталоги в оперативной памяти .

Историческая возможность жесткой привязки каталогов [ править ]

Исторически сложилось так, что каталоги можно было жестко связать . Это сделало структуру каталогов произвольным ориентированным графом , в отличие от ориентированного ациклического графа . Каталог мог быть даже собственным родителем. Современные системы обычно запрещают это запутанное состояние, за исключением того, что родительский элемент root по-прежнему определяется как root. Наиболее заметное исключение из этого запрета обнаружено в Mac OS X (версии 10.5 и выше), которая позволяет суперпользователю создавать жесткие ссылки на каталоги. [13]

стабильность номера индексного дескриптора и файловые системы, от Unix отличные

Когда файл перемещается в другой каталог той же файловой системы или когда дефрагментация диска изменяет его физическое местоположение, номер индексного дескриптора файла остается неизменным.

Эта уникальная характеристика позволяет перемещать или переименовывать файл даже во время операций чтения или записи, обеспечивая тем самым непрерывный доступ без сбоев.

файла Эта функция — сохранение местоположений метаданных и блоков данных в центральной структуре данных независимо от переименования или перемещения файла — не может быть полностью воспроизведена во многих файловых системах, отличных от Unix, таких как FAT и ее производные, поскольку в них отсутствует механизм для поддержки этого. инвариантное свойство, когда одновременно перемещаются и запись каталога файла, и его данные. файла В этих файловых системах перемещение или переименование файла может привести к более значительным изменениям в структуре данных, представляющей файл, и система не ведет отдельную централизованную запись о местоположении блоков данных и метаданных , как это делают индексные дескрипторы в Unix-подобных системах. системы.

установка библиотеки с файловыми inode Упрощенная системами

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

Эта операция должна выполняться атомарно , то есть она должна выглядеть как одна операция, которая либо полностью завершена, либо не выполняется вообще, без промежуточного состояния, видимого для других процессов.

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

Когда операционная система заменяет файл (и создает новый индексный дескриптор), она блокирует [14] на индексном дескрипторе [15] и, возможно, содержащий каталог. [16] Это предотвращает чтение или запись файла (inode) другими процессами. [17] во время операции обновления, что позволяет избежать несогласованности или повреждения данных. [18]

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

Одним из существенных преимуществ этого механизма является то, что он устраняет необходимость перезагрузки системы для замены используемых в данный момент библиотек. Следовательно, системы могут беспрепятственно обновлять или обновлять библиотеки программного обеспечения , не прерывая запущенные процессы или операции.

Потенциал исчерпания индексных дескрипторов и решения [ править ]

При создании файловой системы некоторые файловые системы выделяют фиксированное количество индексных дескрипторов. [19] Это означает, что в файловой системе могут закончиться индексные дескрипторы, даже если в файловой системе осталось свободное место. Такая ситуация часто возникает в случаях использования, когда имеется много небольших файлов, например, на сервере, хранящем сообщения электронной почты, поскольку каждому файлу, независимо от его размера, требуется собственный индексный дескриптор.

Другие файловые системы обходят это ограничение, используя динамическое распределение индексных дескрипторов. [20] Динамическое распределение индексных дескрипторов позволяет файловой системе создавать больше индексных дескрипторов по мере необходимости вместо того, чтобы полагаться на фиксированное число, созданное во время создания файловой системы. [21] Это может «разрастить» файловую систему за счет увеличения количества индексных дескрипторов, доступных для новых файлов и каталогов, что позволяет избежать проблемы нехватки индексных дескрипторов. [22]

Inlining[editвстраивание

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

Если данные файла помещаются в пространство, выделенное для указателей на данные, это пространство можно удобно использовать. Например, ext2 и ее преемники хранят данные символических ссылок (обычно имена файлов) таким образом, если размер данных не превышает 60 байт («быстрые символические ссылки»). [23]

В Ext4 есть опция файловой системы под названием inline_dataэто позволяет ext4 выполнять встраивание, если оно включено во время создания файловой системы. Поскольку размер индексного дескриптора ограничен, это работает только для очень маленьких файлов. [24]

В системах, отличных от Unix [ править ]

  • NTFS имеет главную файловую таблицу (MFT), в которой файлы хранятся в B-дереве. Каждая запись имеет «fileID», аналогичный номеру индексного дескриптора, который однозначно относится к этой записи. [25] Три временные метки, идентификатор устройства, атрибуты, количество ссылок и размеры файлов находятся в записи, но в отличие от POSIX разрешения выражаются через другой API. [26] Расположение на диске более сложное. [27] Более ранние файловые системы FAT не имели такой таблицы и не могли создавать жесткие ссылки.
    • В NTFS также предусмотрена концепция встраивания небольших файлов в запись MFT. [28]
    • Производный ReFS имеет гомологичный MFT. ReFS имеет 128-битный идентификатор файла; это расширение также было перенесено в NTFS, которая изначально имела 64-битный идентификатор файла. [26]
  • Та же статистика API GetFileInformationByHandle можно использовать на общих томах кластера и SMB 3.0 , поэтому эти системы предположительно имеют схожую концепцию идентификатора файла. [26]

См. также [ править ]

Ссылки [ править ]

  1. ^ Таненбаум, Эндрю С. Современные операционные системы (3-е изд.). п. 279.
  2. ^ ЙВСАНТЕН. «Разница между mtime, ctime и atime — Linux Howtos и часто задаваемые вопросы» . Linux Howtos и часто задаваемые вопросы . Архивировано из оригинала 20 ноября 2016 г. {{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  3. ^ «Анатомия переключателя виртуальной файловой системы Linux» . IBM.com .
  4. ^ Лэндли, Роб (20 июля 2002 г.). «Вперёд: Re: Что означает буква «i» в индексном дескрипторе? Деннис Ритчи тоже не знает» . linux-kernel (список рассылки) . Проверено 12 января 2011 г.
  5. ^ Ричи, Деннис М.; Томпсон, Кен (1978). «Система разделения времени UNIX» . Технический журнал Bell System . 57 (6): 1913–1914 . Проверено 19 декабря 2015 г.
  6. ^ Морис Дж. Бах (1986). Проект операционной системы UNIX . Прентис Холл. ISBN  978-0132017992 .
  7. ^ Бах, Морис Дж. (1986). Проект операционной системы UNIX . Прентис Холл. п. 94. Бибкод : 1986duos.book.....B .
  8. ^ "линфо" . Информационный проект Linux . Проверено 11 марта 2020 г.
  9. ^ «Определения — серийный номер файла 3.176» . Открытая группа . Проверено 10 января 2018 г.
  10. ^ Перейти обратно: а б "<sys/stat.h>" . Открытая группа . Проверено 15 января 2018 г.
  11. ^ Гуч, Ричард. Энберг, Пекка (ред.). «Обзор виртуальной файловой системы Linux» . ядро.org . Проверено 20 мая 2023 г.
  12. ^ Ричард Гуч. Энберг, Пекка (ред.). «Кэш записей каталога (dcache)» . ядро.org . Проверено 20 мая 2023 г.
  13. ^ «Какова команда Unix для создания жесткой ссылки на каталог в OS X?» . Переполнение стека . 16 января 2011 г. Архивировано из оригинала 5 января 2020 г. . Проверено 5 января 2020 г.
  14. ^ Сообщество разработчиков ядра. «Запирание» . ядро.орг . Проверено 21 мая 2023 г.
  15. ^ Гуч, Ричард. Энберг, Пекка (ред.). «структура inode_operations» . ядро.org . Проверено 21 мая 2023 г.
  16. ^ Сообщество разработчиков ядра. «Блокировка каталога» . ядро.орг . Проверено 21 мая 2023 г.
  17. ^ Сообщество разработчиков ядра. «Типы блокировок и их правила» . ядро.org . Проверено 21 мая 2023 г.
  18. ^ ван де Вен, А., Молнар, И. «Валидатор правильности блокировки во время выполнения» . ядро.org . Проверено 21 мая 2023 г. {{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  19. ^ Сообщество разработчиков ядра. «2. Дизайн высокого уровня» . ядро.org . Проверено 21 мая 2023 г.
  20. ^ Сообщество разработчиков ядра. «Метаданные самоописания XFS» . ядро.org . Проверено 21 мая 2023 г.
  21. ^ Сообщество разработчиков ядра. «2.7. Политика распределения блоков и индексных дескрипторов» . ядро.org . Проверено 21 мая 2023 г.
  22. ^ Вадала, Дерек (2002). «6. Файловые системы». Управление RAID в Linux . O'Reilly Media, Inc. ISBN  9781565927308 .
  23. ^ «Ядро Linux: файловые системы» . вт.nl.
  24. ^ «Схема диска Ext4» . ядро.org . Проверено 18 августа 2013 г.
  25. ^ «Есть ли в Windows номера индексных дескрипторов, как в Linux?» . Переполнение стека .
  26. ^ Перейти обратно: а б с «Функция GetFileInformationByHandle (fileapi.h) — приложения Win32» . docs.microsoft.com .
  27. ^ «[MS-FSCC]: типы атрибутов NTFS» . docs.microsoft.com .
  28. ^ «Windows — максимальный размер файла, который может полностью храниться в главной таблице файлов NTFS (MFT)» .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: C1E33F0D2D99D94B2436B81E56CBDB1F__1695756720
URL1:https://en.wikipedia.org/wiki/Inode
Заголовок, (Title) документа по адресу, URL1:
inode - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)