Таблица файлов находится в файловой системе или в памяти?

9

В контексте управляющих таблиц операционной системы термин «файловые таблицы» относится к структуре данных, которая является частью файловой системы или находится в основной памяти (и в этом случае я предполагаю, что она будет иметь ссылки только на открытые файлы) ? Мой учебник 1 говорит,

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

Кроме того, что такое система управления файлами? Означает ли это файловую систему?

1 Сталлингс, Операционные системы , 7- е изд., С. 127

Kazark
источник

Ответы:

22

Без дальнейшего контекста неясно, говорит ли Stalling о таблице inode в памяти или о таблицах в файловой системе. Я одолжил кому-то намного более раннее издание книги, но так и не получил его; поэтому я не могу посмотреть контекст самостоятельно.

Существует три «файловых таблицы», но обсуждаемую здесь чаще называют « таблицей inode в памяти »; вторая обычно называется « таблицей открытых файлов » и существует для каждого процесса. Обе таблицы находятся в памяти ядра и не доступны для программы. Третья «таблица» на самом деле представляет собой два набора таблиц в файловой системе (на диске), первая - это таблица inode на диске, а вторая - сами блоки данных (примечание: это обсуждение касается традиционного управления файловой системой UNIX, более новые системы могут есть разные организации). Записи в таблице индексов имеют последовательности ссылок на блоки данных, которые содержат либо косвенные ссылочные блоки, либо фактические данные. Ключ к файлув файловой системе находится индекс, а не сами блоки данных. Когда Stalling говорит о «файловой таблице» на диске, обычно это будет «меньшая» таблица на диске, которая обозначает файлы, такие как таблица inode или таблица определения блоков в системах FAT.

С точки зрения таблицы inode в памяти, inode загружается из файловой системы, его значение st_nlink увеличивается, а затем становится доступным для остальной системы, когда данные inode записываются на диск, st_ctime обновляется. Если индекс больше не нужен в памяти, значение st_nlink уменьшается, и запись в таблице помечается как свободная. Каждый процесс начнется со ссылками на три или пять записей в памяти в таблицу инф.узлов: иноды из stdin, stdout, stderr- это часто файл устройство (терминал) - а затем ссылки на текущий каталог и корневой каталог. Инод будет находиться в таблице только один раз, поэтому в таблице может быть несколько ссылок на один инод.

Таблица открытых файлов сохраняется для каждого процесса и содержит ссылки на таблицу inode в памяти, а также указатели на буферы и информацию о состоянии (например, fseek(2)значение и флаги из open(2). Дескриптор файла является буквально индексом в таблице открытых файлов; но большинство люди обращаются к записи в таблице открытых файлов, когда говорят о «дескрипторе файла».

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

Подпрограммы в ядре называются « системой управления файлами », а « файловая система » - это организация на диске. В настоящее время существует несколько «подключаемых» модулей, которые могут быть загружены ( modprobe(8)) в систему управления файлами для различных организаций на диске. Например, существуют типы файловых систем ext2 / ext3 / ext4, и у каждого из них есть свой модуль в системе управления файлами ядра; то же самое с ntfs, sbfs, nfs, vfat, jfs и т. д.

Это немного сложнее, чем я планировал, поэтому я на этом остановлюсь.

Arcege
источник
Это невероятно хороший ответ.
Казарк,
Да, пожалуйста, не останавливайтесь, когда вы даете такой хороший, исчерпывающий ответ.
Lizardx