Без подальшого контексту незрозуміло визначити, чи говорять Stalling про таблицю inode в пам'яті або про таблиці з файловою системою. Я позичив комусь набагато більш раннє видання книги, але не отримав його назад; тому я не можу самостійно шукати контекст.
Існує три "таблиці файлів", але та, про яку йдеться тут, частіше називається " таблицею введення в пам'яті "; другий, як правило, називається " таблиця відкритих файлів ", і існує в процесі. Обидві таблиці знаходяться в пам'яті ядра та не доступні програмі. Третя «таблиця» - це дійсно два набори таблиць у файловій системі (на диску), перший - це таблиця введення на диску, а другий - самі блоки даних (зверніть увагу: ця дискусія стосується традиційного управління файловою системою UNIX, нові системи можуть мають різні організації). Записи в таблиці inode мають послідовності посилань на блоки даних, які містять або непрямі опорні блоки, або фактичні дані. Ключ до файлуу файловій системі знаходиться inode, а не самі блоки даних. Коли Stalling говорить про дискову "таблицю файлів", це, як правило, "менша" таблиця на диску, яка позначає файли, такі як таблиця inode або таблиця визначення блоку в системах FAT.
З точки зору таблиці inode в пам'яті, inode завантажується з файлової системи, її значення st_nlink збільшується, а потім стає доступним для решти системи, коли дані Inode записуються на диск, st_ctime оновлюється. Якщо inode більше не потрібен у пам'яті, значення st_nlink зменшується, а запис у таблиці позначається як вільний. Кожен процес почнеться з посиланнями на три або п'ять записів у пам'яті в таблицю інф.узлов: иноді з stdin
, stdout
, stderr
- це часто файл пристрій (термінал) - а потім посилання на поточний каталог і кореневої каталог. Інода буде розміщуватися в таблиці лише один раз, тому в таблиці може бути кілька посилань на один inode.
Таблиця відкритого файлу зберігається за кожним процесом і містить посилання на таблицю inode пам'яті, а також покажчики на буфери та інформацію про стан (наприклад, fseek(2)
значення та прапорці open(2)
. Дескриптор файлу буквально є індексом у відкритій таблиці файлів; але більшість люди посилаються на запис у відкритій таблиці файлів, коли говорять про "дескриптор файлу".
Коли файл відкривається за допомогою open(2)
знайденого наявного запису у відкритій таблиці файлів, визначається вкладення посилання на файл за назвою шляху, що inode завантажується в таблицю inode пам'яті в пам'яті, якщо вона ще не завантажена, кількість ліній st_nlink збільшується, а запис запису inode посилається в дескрипторі файлів, встановлюються прапори і виділяються буфери. При закритті відбувається реверс.
Підпрограми в ядрі називаються " системою управління файлами ", а " файлова система " - організацією на диску. Сьогодні modprobe(8)
на диску є ряд модулів, що підключаються, які можна завантажити ( ) у систему управління файлами для різних організацій. Наприклад, існують типи файлової системи ext2 / ext3 / ext4, і кожен з них має інший модуль у системі управління файлами ядра; те саме з ntfs, sbfs, nfs, vfat, jfs тощо.
Це трохи довше, ніж я спочатку мав намір, тому я зупинюсь тут.