Zobacz tez:
Spis tresci tematu 1 - Jadro - wprowadzenie
System plikow - wprowadzenie


Struktura systemu plików na dysku;
blok systemowy i identyfikacyjny;
lista i-wezlów,
blok danych.


Spis rzeczy:


Wprowadzenie.

Plik z punktu widzenia uzytkownika to strumien bajtow, do ktorego mozna sie dostac otwierajac plik, a nastepnie cos do niego zapisac, odczytac, zamknac, skasowac. Dostep do takiego pliku okresla jego nazwa. Lecz wiadomo, ze takie podejscie ze strony systemu jest nierealne. Nazwa pliku to tylko interfejs, umozliwiajacy prace z plikami. My podajemy nazwe, otrzymujemy numerek i na tym numerku operujemy, a system wykonuje za nas czarna robote, tzn. np. sprawdza, czy mamy dostep do tego pliku, itd.


Wiadomosci ogólne.

Dane na dysku fizycznie sa pamietane w blokach o dlugosci z reguly 512 B, 1KB, 2KB, 4KB (wielokrotnosc 512 bajtow - dlugosci sektora na twardym dysku).
W systemie UNIX na dysku znajduja sie tylko pliki. Katalog tez jest plikiem, ale specjalnym. Urzadzenia (drivery) tez sa plikami specjalnymi. Kazdy taki plik ma swoj typ, ktory ogranicza dostep do takiego pliku (np. nie mozna skopiowac pliku katalogu).Tak wiec mowiac "plik" - mam na mysli katalog, plik specjalny, lacze itp.
Jadro komunikuje sie z systemem plikow (a nie z fizycznym urzadzeniem) przez program obslugi urzadzenia (driver). Dostep do poszczegolnych urzadzen odbywa sie poprzez numer urzadzenia (traktowanego jako urzadzenie logiczne) dla kazdego unikalny. Takie rozwiazanie pozwala na ujednolicony dostep do systemow plikow zapisanych na roznych urzadzeniach blokowych (twarde dyski, CD-romy i in.) i jest stosowane we wlasciwie wszystkich dzisiejszych systemach operacyjnych.


Struktura systemu plików na dysku.

DYSK
Boot block
(blok systemowy)
Super block
(blok identyfikacyjny)
tablica i-wezlow bloki danych

Na dysku mozna znalezc (w kolejnosci rosnacych blokow)

Struktury utrzymujace dane o pliku.

Jadro systemu utrzymuje globalna tablice plikow, globalna tablice i-wezlow oraz kazdy proces dostaje swoja wlasna tablice deskryptorow plikow uzytkownika.

1 plik (i zwiazany z nim i-wezel), moze miec kilka nazw; jedna otrzymuje przy tworzeniu, reszta nazw to tzw. linki.


Blok systemowy i identyfikacyjny.

Blok systemowy (boot block) jest polozony na poczatku systemu plikow, zawiera dane o dysku oraz tzw. boot-strap code, czyli program ladujacy, lub jest pusty.

Blok identyfikacyjny (super block) dane co do rozmiaru systemu plikow (ilosc blokow), podzial na partycje, w niektorych systemach bitmape zajetosci blokow na dysku, lub gdzie jej szukac, itp.

Rozmiar bloku systemowego oraz identyfikacyjnego jest staly. (patrz porownanie systemow plikow)


Blok danych.

Bloki danych to pozostale bloki (nie uzywane przez system w celach zarzadzania systemem plikow) sluzace do bezposredniego trzymania danych. Jeden blok moze nalezec tylko do jednego pliku, lub byc wolny. Informacja o zajetosci bloku jest zakodowana w specjalnej liscie, lub w FAT (File Allocation Table).W linuxie jest to lista wolnych blokow (utrzymywana na dysku>. Poniewaz piszac do pliku (tylko wtedy chcemy miec nowy wolny blok) jadro wybiera pierwszy wolny blok na dysku, to taka struktura danych jest wydajna czasowo. Po zapisie lista jest uaktualniana.


I-wezly; lista i-wezlow.

Kazdemu plikowi na dysku odpowiada i-wezel (wezel indeksu). I-wezly trzymane sa na dysku zaraz za boot-block'iem - blokiem systemowym, blokiem identyfikacyjnym, a przed blokami danych w tablicy i-wezlow (w Linuxie tablica ta ma dlugosc 3071 blokow, przy czym na 1 bloku znajduje sie wiele i-wezlow - zalezy to od rozmiaru bloku).W Linuxie 2.0 i-wezel glownego katalogu ("/") ma numer 2.
W innych systemach i-wezly moga byc trzymane w specjalnych listach lub drzewach. (oczywiscie tez na dysku). Wtedy ilosc zajmowana przez i-wezly zalezy tylko od ilosci plikow na dysku, spowalnia jednak (bez zastosowania specjalnych struktur danych) przeszukiwanie takiego systemu.

Zarzadzanie i-wezlami.

Utworzenie nowego pliku tworzy nowy i-wezel. Gdy plik jest otwarty, jego i-wezel jest przechowywany w pamieci operacyjnej. Przy zamykaniu pliku jego i-wezel jest zapisywany na dysk.

Jadro identyfikuje pliki poprzez indeks w tablicy deskryptorow plikow uzytkownika. Indeks ten nazywamy deskryptorem pliku. Pliki o derskryptorach 0 i 1 zwiazane sa z tzw. standardowym wejsciem - wyjsciem. Poniewaz pliki trzymane sa w tablicy plikow, istnieje maksymalna liczba otwartych plikow: w Linuxie 2.0 - 255

Sposob dostepu do plikow przez system:

   nazwa pliku -> open() -> deskryptor pliku
                                   |
                                   |
                                   |
                                   v
    ----------------------------------------------------------------
   |     Schemat dostepu do i-wezlow                                |
   |                                                                |
   |      ---                  ---                  ---             |
   |     | . |--------        |   |                |   |            |
   |     |---|        |       |---|                |---|            |
   |     | . |---------======>| . |--------------->| . |            | 
   |     |---|                |---|                |---|            | 
   |     | . |--------------->| . |--------        |   |            |
   |     |---|                |---|        |       |   |            |
   |     |   |                |   |        |       |---|            |
   |     |   |                |   |         ------>| . |            |
   |     |   |                |   |                |---|            |
   |     |   |                |   |                |   |            |
   |      ---                  ---                  ---             |
   |                                                                |
   |    Tablica          Tablica plikow       tablica i-wezlow      |
   |  deskryptorow                                                  |
   |    plikow                                                      |
   |  uzytkownika                                                   |
    ----------------------------------------------------------------
                                   |
                                   |
                                   v
                            .-------------.     
                           | i-wezel pliku |
                            '-------------'

Rozmiar listy i-wezlow jest okreslony przy instalowaniu systemu plikow.


Bibliografia

  1. Maurice J. Bach "Budowa systemu operacyjnego UNIX"
  2. niektore pliki zrodlowe
  3. wlasna wiedza na temat innych systemow operacyjnych (Amiga Kickstart 3.0)


Poczatek | Wprowadzenie | Struktura systemu plikow | blok systemowy i identyfikacyjny | i-wezly | blok danych. | slowniczek


Rozne dodatki.


Slowniczek raczkujacego informatyka.


blok - kilka sektorow (na ogol 1-16) polaczonych razem, w celu zmniejszenia ilosci zlecen operacji na urzadzeniach blokowych.

deskryptor pliku - liczba calkowita okreslajaca plik, na ktorym dzialamy. Dokladniej okresla indeks polozenia w tablicy deskryptorow plikow uzytkownika.

i-wezel - struktura utrzymujaca wszelkie dane o polozeniu pliku na dysku (sama tez jest zapisana na dysku w tablicy i-wezlow), a wiec:

link - pomocnicza, dodatkowa nazwa pliku pozwalajaca na szybkie dotarcie do pliku, ktory jest w innym kaatalogu lub na innym dysku (na innym komputerze). Moze byc dowolna - przy robieniu linka (linki?) okreslamy nazwe i plik docelowy.

plik - strumien bajtow mozliwych do czytania jeden po drugim (lub pisania). ma swoja dlugosc i atrybuty, np. plik tylko do czytania; atrybuty te sa oddzielne dla wlasciciela pliku, jego grupy, wszystkich uzytkownikow. (to znaczy, ze kazda grupa moze mniec rozne prawa do tego samego pliku). System operacyjny udaje taki model na urzadzeniach blokowych.

sektor - najmniejsza jednostka zapisu na dysku mieszczaca z reguly 512 bajtow.

tablica deskryptorów plików uzytkownika - tablica lokalna dla kazdego procesu. W niej dla kazdego otwartego pliku system trzyma wskazniki do odpowiednich wpisow w tablicy plikow.

tablica plikow - struktura globalna utrzymywana przez jadro. ZXawiera dane o otwartych plikach. W niej znajduja sie dane m. in. gdzie w tablicy i-wezlow szukac iwezla przynaleznego do danego pliku, a takze informacje o miejscu, od ktorego rozpoczac czytanie lub pisanie. Jadro wpisuje w te tablice towy wpis podczas otwierania pliku.

urzadzenie blokowe - urzadzenie, z ktorego mozemy odczytywac i zabisywac bloki jako najmniejsza niepodzielna porcje danych - sa to dyski twarde, stacje dyskow elastycznych (ale nie drukarki, terminale, z ktorych mozemy odczytywac lub zapisywac bajt po bajcie).


Pytania i odpowiedzi

  1. Jak dziala MMU (Memory Management Unit - Jednostka zarzadzania pamiecia), jak sprzetowo jest generowane przerwanie zmiany kontekstu (i jak system ustawia czas nastepnego przerwania)?

    Odp. na pyt. 1: NIe jestem inzynierem, ale z tego co wiem MMU daje m. in. mozliwosc "przemapowania" adresow i generowanie przerwan, jesli adres nie istnieje. W ten sposob mozna emulowac tzw. maszyne wirtualna, tzn. kazdy uzytkownik ma wlasna kopie komputera, na ktorym pracuje, i ma wrazenie, ze jest sam, bo ma do dyspozycji caly komputer (pozornie), a nie tylko moze zobie zdalnie uruchamiac procesy.
    Odwolanie sie do nieistniejacego adresu powoduje wystapienie bledu przekroczenia dostepnych segmentow pamieci.

    Odp. na pyt. 2: J. w., ale z tego co wiem, kazdy hardware ma mozliwosc generowania przerwan poprzez wyzerowanie sie odp. licznika. Ustawiamy licznik na okreslona wartosc, puszczamy go i czekamy na przerwanie (oczywiscie musi byc ustalona procedura obslugi przerwania).

  2. Co to znaczy, ze proces spi z flaga TASK_INTERRUPTIBLE i TASK UNINTERRUPTIBLE?

    Odp.:

    TASK_INTERRUPTIBLE - z chwila nadejscia sygnalu do spiacego procesu, proces jest budzony (aby ustawic kontekst dla tego procesu), obslugiwany jest sygnal.

    TASK_UNINTERRUPTIBLE - proces nie jest budzony przy nadejsciu sygnalu.


Porownanie przykladowych systemow plikow: Minix FS (1992), Xenix FS (1992), SystemV FS(1993), Coherent FS(1993).

Cechy wspólne:

MinixXenixSystemVCoherent
wielkosc bloku 10241024 (512) 1024 (512)512
zapis slowa "short"0 10 10 10 1
zapis slowa "long"0 1 2 30 1 2 30 1 2 32 3 0 1
numeracja i-wezlashortshortshortshort
i-wezel nie istniejacy0000
i-wezel korzenia12 22
max twardych dowiazan250????>=10000
zarzadzanie i-wezlamibitmap zaj.pamiec podreczna wolnych i-wezlow
zarzadzanie blokami bitmap zaj."lista" wolnych blokow
polozenie bloku inentyfikacyjnegoblok 1
(1024..2047)
blok 1
(1024..2047)
blok 1
(512..1023)
blok 1
(512..2047)
rozmiar i-wezla(/blok)32(32)64(16)64(16) 64(8)
rozmiar katalogu(/b)16/32 (64/32) 16 (64) 16 (64)16 (32)

Poczatek | Wprowadzenie | Struktura systemu plikow | blok systemowy i identyfikacyjny | i-wezly | blok danych. | slowniczek


Opracowal Jakub Husak