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.
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.
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.
DYSK
Boot block (blok systemowy) |
Super block (blok identyfikacyjny) |
tablica i-wezlow | bloki danych |
1 plik (i zwiazany z nim i-wezel), moze miec kilka nazw; jedna otrzymuje przy tworzeniu, reszta nazw to tzw. linki.
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)
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.
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.
Poczatek | Wprowadzenie | Struktura systemu plikow | blok systemowy i identyfikacyjny | i-wezly | blok danych. | slowniczek
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).
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).
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.
Cechy wspólne:
Minix | Xenix | SystemV | Coherent | |
---|---|---|---|---|
wielkosc bloku | 1024 | 1024 (512) | 1024 (512) | 512 |
zapis slowa "short" | 0 1 | 0 1 | 0 1 | 0 1 |
zapis slowa "long" | 0 1 2 3 | 0 1 2 3 | 0 1 2 3 | 2 3 0 1 |
numeracja i-wezla | short | short | short | short |
i-wezel nie istniejacy | 0 | 0 | 0 | 0 |
i-wezel korzenia | 1 | 2 | 2 | 2 |
max twardych dowiazan | 250 | ?? | ?? | >=10000 |
zarzadzanie i-wezlami | bitmap zaj. | pamiec podreczna wolnych i-wezlow | ||
zarzadzanie blokami | bitmap zaj. | "lista" wolnych blokow | ||
polozenie bloku inentyfikacyjnego | blok 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