Bez dalszego kontekstu nie jest jasne, czy Stalling mówi o tabeli i-węzłów w pamięci czy o tablicach w systemie plików. Pożyczałem komuś znacznie wcześniejsze wydanie książki, ale nigdy jej nie odzyskałem; więc nie mogę sam sprawdzić kontekstu.
Istnieją trzy „tabele plików”, ale omawiana tutaj jest bardziej powszechnie nazywana „ tabelą i-węzłów in-memory ”; drugi jest powszechnie nazywany „ otwartą tabelą plików ” i istnieje na proces. Obie tabele znajdują się w pamięci jądra i nie są dostępne dla programu. Trzecia „tabela” to tak naprawdę dwa zestawy tabel w systemie plików (na dysku), pierwsza to tablica i -węzłów na dysku, a druga to same bloki danych (uwaga: ta dyskusja dotyczy tradycyjnego zarządzania systemem plików UNIX, nowsze systemy mogą mieć różne organizacje). Wpisy w tabeli i-węzłów mają sekwencje odniesień do bloków danych, które zawierają albo pośrednie bloki odniesienia, albo dane rzeczywiste. Klucz do plikuw systemie plików jest i-węzeł, a nie same bloki danych. Kiedy Stalling mówi o „tabeli plików na dysku”, zwykle jest to „mniejsza” tabela na dysku, która oznacza pliki, takie jak tablica i-węzłów lub tablica definicji bloków w systemach FAT.
Jeśli chodzi o tabelę i-węzłów w pamięci, i-węzeł jest ładowany z systemu plików, jego wartość st_nlink jest zwiększana, a następnie udostępniana reszcie systemu, gdy dane i-węzła są zapisywane na dysku, st_ctime jest aktualizowany. Jeśli i-węzeł nie jest już potrzebny w pamięci, wartość st_nlink jest zmniejszana, a wpis w tabeli jest oznaczany jako wolny. Każdy proces rozpocznie się od odniesień do około trzech lub pięciu wpisów do tabeli w pamięci węzła: iwęzłówm z stdin
, stdout
, stderr
- są często plikiem urządzenia (tty) - a następnie odwołania do bieżącego katalogu i katalogu głównego. I-węzeł będzie znajdować się w tabeli tylko raz, więc może istnieć wiele odniesień do pojedynczego i-węzła w tabeli.
Otwarta tabela plików jest przechowywana dla każdego procesu i zawiera odwołania do tabeli i-węzłów w pamięci oraz wskaźniki do buforów i informacje o stanie (takie jak fseek(2)
wartość i flagi z open(2)
. Deskryptor pliku jest dosłownie indeksem w otwartej tabeli plików; ale większość ludzie mówią o pozycji w otwartej tabeli plików, gdy mówią o „deskryptorze pliku”.
Gdy plik jest otwierany przy użyciu open(2)
, znajduje się dostępny wpis w otwartej tabeli plików, i-węzeł odwołania do pliku przez nazwę ścieżki jest określany, że i-węzeł jest ładowany do tabeli i-węzłów w pamięci, jeśli jeszcze nie został załadowany, licznik st_nlink jest zwiększany, a pozycja i-węzła jest przywoływana w deskryptorze pliku, ustawiane są flagi i przydzielane są bufory. Po zamknięciu następuje odwrotność.
Procedury w jądrze są nazywane „ systemem zarządzania plikami ”, a „systemem plików ” jest organizacja na dysku. Obecnie istnieje wiele modułów „podłączalnych”, które można załadować ( modprobe(8)
) do systemu zarządzania plikami dla różnych organizacji na dysku. Na przykład istnieją typy systemów plików ext2 / ext3 / ext4, a każdy z nich ma inny moduł w systemie zarządzania plikami jądra; to samo z ntfs, sbfs, nfs, vfat, jfs itp.
To jest trochę bardziej skomplikowane niż pierwotnie zamierzałem, więc zatrzymam się tutaj.