caban,systemy operacyjne II, opracowanie wykładu

background image

Systemy operacyjne II – skrót (na 4)

1969 – Bell Labs firmy AT&T mikrokomputery PDP-7 i PDP-9

Twórcy UNIXa: Ken Thompson, Dennis Ritchie

Wersje z sukcesem komercyjnym:

AIX (IBM)

SunOS, Solaris (Sun)

Ultrix (Compaq)

HP-UX (hp)

Xenix (Microsoft)

POSIX – Portable Operating System Interface, obejmuje interfejs programistyczny (API), interfejs
użytkownika (polecenia systemowe), właściwości powłoki system

Single UNIX Specification – inicjatywa The Open Group, mocno zbieżna z POSIX

UNIX cechy:

Projektowany na potrzeby badao

Tanie licencje

Mocne podstawy techniczne

UNIX – cechy charakterystyczne:

Bardziej złożone funkcje uzyskuje się ze złożenia mniej złożonych

Każdy program jest filtrem

Przenośnośd ponad efektywnośd

Prosty format plików ASCII

Kod wielokrotnego użycia

Skrypty

Prosty interfejs użytkownika

Raportowanie jeśli coś nie tak i tylko wtedy

Hierarchiczny system plików

Wielozadaniowośd i wieloużytkownikowośd

Komunikacja międzyprocesowa

Protokół TCP/IP

System operacyjny jest po to by ukryd obsługę sprzętu przed użytkownikiem i programami
użytkownika

Struktura systemu UNIX:

background image

Użytkownik

Shell i narzędzia (programy)

Jądro

Sprzęt

Jądro dostaje od użytkownika (programu) wywołanie systemowe i podaje przerwanie do sprzętu.

Jądro odpowiedzialne jest za zarządzanie zasobami, współdzielenie użytkowników i zadao oraz
komunikację, jest warstwą ochronną pomiędzy programamio i sprzętem, kontroluje działanie
programów, urządzeo peryferyjnych.

Podsystemy jądra:

System plików (hierarchia katalogów, wiele systemów plików, wejścia/wyjścia)

Zarządzanie procesami

Cygwin (GPL) – implementacja POSIX dla Win32

Istnieje API języka C do wszystkich wywołao systemowych

W jądrze znajduje się:

Tabela procesów – zwiera wpis każdego procesu w systemie

Tabela otwartych plików – zawiera min. 1 wpis dla każdego otwartego pliku w systemie

Zbiór użytkowników tworzy grupę, użytkownicy mogą byd członkami wielu grup.

Każdy użytkownik należy do pierwotnej grupy (domyślnej).

Grupy i użytkownicy znajdują się w katalogach /etc/passwd i /etc/group

Hasła użytkownika przechowywane są w /etc/passwd i /etc/shadow, szyfrowanie kodem 7 bitowego
kodu ASCII, jest ono kluczem algorytmu DES. E-blok DES jest modyfikowany za pomocą 12 bitowej
wartości (ziarna) ustalanego na podstawie czasu aktualnego (zazwyczaj), algorytm jest wykonywany

background image

na 64 bitowym bloku zer. Wyjście podawane jest na wejście kolejnej iteracji (25 iteracji). 64 bitowy
wynik transformowany jest na 11 znaków z alfabetu 64 znakowego (litery,cyfry, ‘.’ I ‘/’).

Uwierzytelnianie – udowadnianie tożsamości

Autoryzacja – sprawdzenie czy można wykonad operację

Mikrojądro – strukturalizacja systemu, w którym jądro zawiera minimalną ilośd programów
wbudowanych, pozwala na komunikację i minimalne zarządzanie procesami/zasobami, duże
możliwości personalizacji, bezpieczeostwo

Makrojądro – strukturalizacja systemu, w którym funkcje systemu są umieszczane w jądrze, a nie w
obszarze użytkownika (makrojądrem jest Linux/Windows)

Typy praw:

Read

Write

Execute

Zbiory uprawnieo:

Właściciela

Grupy

Pozostałych

Dla katalogu prawa wyglądają tak, że:

Read – może listowad zawartośd

Write może dodawad/usuwad pliki

Execute – może otwierad pliki

Efektywny UID i GID – UID i GID przypisane programowi wykonywanemu przez jądro, możliwe jeśli
pliki mają ustawione flagi setuid i set gid

Ścieżka bezwzględna – od katalogu głównego /

Ścieżka względna od bieżącego katalogu roboczego

Urządzenia w UNIXie są traktowane jak pliki, w systemie widoczne jako pliki specjalne

Każdy proces zawiera własną tablicę deskryptorów plików, jest indeksowana od 0, wpisy wskazują na
wpisy w tabeli otwartych plików.

Trzy pierwsze wpisy w tablicy deskryptorów są zarezerwowane dla standardowego wejścia (0),
standardowego wyjścia (1), wyjścia błędów (2) i domyślnie dotyczą terminala (/dev/tty).

Katalog hierarchiczny odpowiada systemowi plików na pojedynczym dysku, z którego ładowany jest
system, pozostałe podsystemy są montowane, czyli dołączane do istniejącego drzewa.

background image

Wpisy w katalogach są dowiązaniami do pliku na dysku, dwa różne wpisy mogą byd dowiązaniami do
tego samego pliku.

Dowiązania symboliczne – „pliki” zawierające nazwę innego pliku, nie zmieniają liczby dowiązao do
pliku (informacja o pliku), pozwalają na wiązanie między różnymi systemami plikowymi.

Dowiązania sztywne (regularne) – umieszczona w systemie plików referencja na konkretny i-węzeł

W UNIXie wszystkie procesy są potomkami procesu init, procesy zwykle kooczą się po wywołaniu
exit, tworzone są poprzez wywołanie fork() lub vfork().

Procesy mogą byd w stanie:

Uśpiony

Zatrzymany

Wykonywany

Oczekujący

Zombie

Kontekst procesu to:

Przestrzeo adresową (kod, dane, stos, pamięd współdzieloną)

Informacje kontrolne (u-obszar, tablica procesów)

Dane uwierzytelniające

Zmienne środowiskowe

U-obszar – częśd przestrzeni użytkownika powyżej stosu, zwykle odwzorowany w ustalony adres,
zawiera informacje niezbędne podczas wykonywania procesu, może byd wymienialny

Tablica procesów Proc - zawiera informacje konieczne gdy proces nie wykonuje się, nie może byd
wymieniany.

U-obszar obejmuje:

Kontekst procesu

Wskaźnik w tablicy Proc

Rzeczywisty i efektywny ID

Argumenty, zwracane wartości, błędy wywołania

Informacje o sygnałach

Deskryptory

Bieżący katalog i korzeo

Tablica Proc zawiera:

ID procesu i grupy

Wskaźnik na U-obszar

Stan procesu

Wskaźnik na kolejki

Priorytet

background image

Informacje zarządzania pamięcią

Flagi

Root ma UID i GID =0

Mechanizm blokowania: gdy nie są dostępne zasoby proces jest usypiany ( sleep() ), umieszcza się w
kolejce zablokowanych, gdy zasób jest zwalniany wywołuje się wakeup() dla wszystkich procesów,
przechodzą one w stan gotowy i kolejkowane.

Priorytety jądra 0-49

Priorytety użytkownika: 50-127

kill() – wysyłanie sygnałów

proces to wykonywana jednostka, program w trakcie wykonywania, czyli dane i kod w pamięci.

Obraz to komputerowe środowisko wykonywania programu, czyli zbioru bajtów przechowywanych w
pliku wykonywalnym.

fork() – tworzy nowy proces, kopiuje pamięd wirtualną, katalog roboczy i deskryptory, zwraca
wartośd PID potomka, procesowi potomnemu 0

exec() – rodzina programów zastępująca wykonywany kod innym

Efektywnie fork kopiuje dane dopiero po odwołaniu się do nich (przyspieszenie wykonania).

Rodzic gromadzi informacje o potomku poprzez funkcję wait, proces po wywołaniu jest w stanie
zombie, aż do wywołania wait przez rodzica.

Proces i ID:

ID procesu

ID grupy procesów

ID procesu rodzica

Efektywny UID i GID

Rzeczywisty UID i GID

Umask

Środowisko procesu to zbiór par nazwa-wartośd będących napisami.

Sygnał – wiadomośd międzyprocesowa, może byd specjalnie obsługiwana, domyślnie obsługiwana lub
ignorowana

Typowe sygnały:

Sigkill

Sigterm

Sigchld

Sigstop

background image

Sigcont

signal() – ustawienie obsługi specjalnej dla sygnału

Łącza – wyjście jednego procesu jest wejściem innego

vi -r - wyświetla liste odnalezionych plików wymiany

vi:

^ - początek wiersza

$ koniec wiersza

/napis – wystąpienie napisu z prawej

dd – usuwa wiersz

ndd lub dnd – usuwa n wierszy

yy lub Y – kopiuje bieżący wiersz do bufora

p – wstawia wiersz z bufora

:set nu – numerowanie wierszy

:syntax on – podświetlenie składni

gcc – kompilator C

g++ kompilator C++

działanie gcc:

Preprocesorowanie

Kompilacja

Asemblacja

Konsolidacja

Opcje gcc:

-c – zatrzymuje po kompilacji lub asemblacji bez linkowania

-o – określa nazw

-D – ustawia macro

-g – informacje dla debugera

-I – dodaje katalog do przeszukiwania dla .h

-L – dodaje katalog do przeszukiwania dla bibliotek

-l… – dołączanie biblioteki

-Wall – ostrzeżenia dla wszystkich sytuacji niepolecanych

Makefile:

plik wykonuje się po podaniu polecenia make, służy do kompilacji złożonych projektów

konstrukcja w postaci:
cel : zależności
<Tab>reguła

background image

% zastępuje dowolny ciąg

wildcard – dowolna nazwa

Debugowanie GDB:

gcc –g plik.c –o output

gdb output / gdb output 12345 (pid procesu)/ gdb output core.2957 (zrzut pamięci)

W samym GDB:

run arglist

set args arglist

b [file:] line – ustawia breakpoint

b [file:] func – ustawia breakpoint na funkcję

clear – czyści breakpoint kolejny lub wyspecyfikowany

delete – czyści wszystkie break pointy

c – kontynuuj

s – pojedynczy krok

Zmienne środowiskowe:

#include …

extern char ** environ;

int main…

Biblioteki:

statyczna:

background image

o gcc -c libname.c
o ar cr libname.a libname.o
o #include libname.h
o gcc program.c -o output –L. –lname

współdzielona:

o gcc -shared -fPIC – o libname.so obj.o
o gcc program.c -o output –L. –lname \ -Wl, -rpath,.

Współdzielona ładowana dynamicznie:

o gcc -shared -fPIC – o libname.so obj.o
o w programie używamy funkcji:

 void *dlopen(plik,tryb)
 dlclose(handle)
 char *dlerror()
 void *dlsym(handle,func_name)

LD_LIBRARY_PATH – zmienna pozwalająca na zmianę katalogów przeszukiwania dla bibliotek

Proces – egzemplarz wykonywanego programu

Porces!=wątek

Proces posiada własną przestrzeo adresową, wątki posiadają wspólna sekcję danych

Kontekst procesu:

Pid, gpid,uid,gid

Środowisko

Katalog roboczy

Kod programu

Rejestry

Stos

Sterta

Deskryptory

Akcje sygnałów

Biblioteki współdzielone

Narzędzia komunikacji międzyprocesowej (np. IPC)

Informacje kontrolne (u-obszar, tablica procesów proc)

Procesy tworzy się za pomocą fork() lub vfork()

Procesy zwykle kooczą się po wywołaniu exit()

Init – proces po którym wszystkie procesy „dziedziczą”

Algorytm planowania w Linuksie to algorytm planowania round-robin z wywłaszczeniami, w którym
każdy proces posiada przyczeilony i ustalony kwant czasu

background image

Umask – działa na zasadzie, że od podanych praw odejmuje się jego wartośd

getpid() – pid naszego procesu

getppid() – pid procesu macierzystego

getuid/geteuid – uid/efektywny uid procesu

getgid/getegid – gid/efektywny gid procesu

Proces potomny dziedziczy po macierzystym:

uid, euid, gid, egid

deskryptory i pozycje

identyfikatory sesji, terminal sterujący, sygnalizatory ustanowienia id usera i grupy, bieżący
katalog roboczy, katalog główny, maskę tworzenia plików

maskę sygnałów oraz obsługę

sygnalizator zamykania (close-on-exec)

środowisko

segment pamięci wspólnej

ograniczenia zasobów systemowych

Potomek nie dziedziczy blokad plików, ma zerowane zbiory zaległych sygnałów oraz wartości czasów.

int atexit(void (*func)(void)) – rejestruje funkcje do wywołania po exit, wywołanie w odwrotnej
kolejności

pid_t wait(int *status) – czeka na któregoś z potomków

pid_t waitpid(pid_t pid, int *status, int options) – czeka na zakooczenie potomka pid, jeśli pid=-1 to
na dowolny, jeśli 0 to na każdy który ma gpid taki sam, >0 na konkretny <-1 na konkretny o pid=|pid|

Procesy zombie są adoptowane przez proces init.

kill(pid,signal) – wysyłanie sygnału

sighandler_t signal(signum,sighandler_t) – ustawia nowy sposób obsługi sygnału, zwraca poprzedni

Sygnały SIGKILL i SIGSTOP nie mogą byd ani przechwycone ani zignorowane.

Sigaction – zmiana obsługi sygnału, do tego struktura o tej samej nazwie

Sigprocmask – zmienia maskę blokowanych sygnałów (ustawiamy na te które mają byd blokowane
lub te które nie mają byd)

Sigemptyset – pusty zbiór sygnałów

Sigfillset – kompletny zbiór sygnalów

Sigaddset – dodaje do zbioru

Sigdellset – usuwa ze zbioru

background image

Sigismember – sprawdza czy w zbiorze

Wątek – jednostka wykonawcza w obrębie jednego procesu, jest ciągiem instrukcji wykonywanych
na tych samych danych, wątki działają na wspólnych zasobach procesu, duplikują jedynie to co jest im
potrzebne, dysponują własnymi kopiami:

wskaźnika na stos

rejestrów

inf. dot. planowania

zestawów sygnałów

danych wątku

Z współdzielenia zasobów wynika:

wskaźniki o tej samej wartości wskazują na te same dane

zmiany dokonywane przez jeden wątek widziane przez inne

wymuszanie jawne stosowanie synchronizacji

Wątki poziomu użytkownika same zarządzają wykonaniem, wątek rezygnuje z czasu procesora
poprzez bezpośrednie wywołanie żądania wymiany albo odebranie sygnału zegara systemowego.

Wątki poziomu jądra implementowane przez dołączanie do procesu tabeli wątków, system zarządza
wątkami z wykorzystaniem kwantów czasu, brak kradzenia czasu przez zachłanny wątek i blokowania
operacji I/O

clone() – funkcja tworzy nowy proces, pozwoli procesom potomnym współdzielid kontekst wykonania
(obszar pamięci, tablica deskryptorów, sygnały).

pthread – wątek Linuksa dla C w postaci pthread.h i biblioteki pthread

Wątki są zdecydowanie bardziej wydajne niż procesy tworzone fork().

Wątki stosuje się jeśli zadania im stawiane mogą byd wykonywane niezależnie w dużym stopniu.

Wszystkie wątki mają dostęp do globalnej pamięci procesu, mogą mied własne prywatne dane.

pthread_mutex_ - Miteksy

pthread_attr_ - obiekty atrybutów wątków

pthread_create – tworzy wątek

pthread_exit – kooczy wątek

pthread_join – czeka na zakooczenie wątku podanego parametrem (wątek musi byd dołączalny),
tylko jeden wątek może czekad na dany inny wątek, jest punktem anulowania

pthread_self – zwraca id wątku

pthread_equal – sprawdza czy id1 i id2 odnoszą się do tego samego wątku (return >0)

background image

pthread_detach – odłącz wątek od macierzystego

pthread_cancel – przerywa działanie wątku wskazanego ( anulowanie synchroniczne – do punktu
anulowania/asynchroniczne – w każdej chwili)

Muteksy – rodzaj semaforów binarnych, może byd zablokowany (wart. 1) lub odblokowany (wart. 0),
muteks może byd odblokowany tylko przez wątek który go zablokował, teoretycznie mogą byd
rekurencyjne.

pthread_mutex_init – inicjalizacja Miteksu

pthread_mutex_destroy – niszczy muteks

pthread_mutex_lock – funkcja zajmuje muteks (jeśli zajęty to czeka)

pthread_mutex_trylock – sprawdzenie stanu Miteksu

pthread_mutex_unlock – odblokowanie Miteksu

Każdy obiekt IPC ma określony identyfikator i klucz (32 bity nieujemna rzeczywista), identyfikator
przydzielany podczas otwierania, jak deskryptor, klucz jest „nazwą” zasobu, na podstawie którego
uzyskuje się identyfikator, dostęp jest kontrolowany jak dla plików.

Kolejki komunikatów – umożliwiają przesyłanie pakietów danych pomiędzy procesami (komunikaty
zawierają treśd z długością i typ), odbiorca może czekad na dowolny komunikat lub na komunikat
określonego typu, komunikaty są przechowywane aż do odebrania lub usunięcia kolejki.

msgget() – zwraca id kolejki lub tworzy nową

msgctl() – wykonuje operacje na kolejce: IPC_STAT (kopiowanie inf. Ze struktury), IPC_SET (zapis
wartości), IPC_RMID (usunięcie kolejki i struktur danych)

msgsnd() – wysyła komunikat

msgrcv() – funkcja czyta z kolejki, jeśli msgtyp jest 0 to czytany pierwszy dostępny, jeśli > 0 to
komunikat danego typu, jeśli <0 to pierwszy o najniższym numerze <= wartości bezwgl. z msgtyp

ftok() – zwraca unikalny klucz

semafory – struktury danych użytkowane wspólnie przez kilka procesów, stosowane najczęściej do
synchronizowania działania kilu procesów korzystających ze wspólnego zasobu, podstawowym
rodzajem semafora jest semafor binarny, przyjmujący dwa stany opuszczony (P) i podniesiony (V).

Są dwa podejścia do semaforów:

1

o Opuszczony ma wartośd 0
o Podniesiony ma wartośd >0

2

o Opuszczony ma wartośd >0
o Podniesiony ma wartośd =0

background image

semget() – zwraca id zestawu semaforów lub tworzy taki zestaw

semctl() – wykonuje operacje sterujące na zestawie semaforów

sepom() – wykonanie operacji semaforowej (na jednym lub więcej semaforze), sem_op zawiera
wartośd która zostanie dodana do semafora, jeśli któraś z funkcji sops nie zostanie wykonana to
zablokowanie procesu i nie wykonanie wszystkich operacji.

Pamięd współdzielona – specjalnie utworzony segment wirtualnej przestrzeni adresowej, do którego
dostęp ma wiele procesów, pierwszy proces tworzy taki segment, następnie dowiązuje go powodując
odwzorowanie w obszar danych i może dalej zapisywad dane, inne procesy mogą już czytad/pisad.

shmget() – tworzy segment pamięci współdzielonej i umożliwia dostęp do segmentu

shmctl – odpowiednik msgctl

*shmat() – funkcja dołącza segment pamięci wspólnej do przestrzeni adresowej procesu, zwraca
adres odwzorowania

shmdt() – wyłącza segment z przestrzeni adresowej procesu

fread() – nakładka na funkcję systemową read()

open() – przekształca ścieżkę na deskryptor pliku

creat() – open() z flagami O_WRONLY|O_CREAT|O_TRUNC (O_TRUNC – obcięcie do zerowej
długości)

flagi:

O_RDONLY

O_WRONLY

O_RDWR

O_APPEND – do dopisywania

Parametry mode S_I*:

R – read

background image

W – write

X – execute

USR – user

GRP – group

OTH – other

read() – czyta z deskryptora do bufora

background image

write() – pisze z bufora do deskryptora

lseek() – przesuwa się po deskryptorze

Przy dużych plikach efektywny jest zapis/odczyt paczkami będącymi wielokrotnościami bloków
dyskowych w systemie plików.

unlink() – usuwa nazwę z systemu plików (zmniejsza licznik dowiązao sztywnych i-węzła), jeśli jest to
ostatni deskryptor, a coś czyta to zaznaczany do usunięcia

remove() – odwołuje się bezpośrednio do unlink dla plików i do rmdir dla katalogów

fcntl() – dokonuje jednej z wielu różnych operacji na deskryptorze, np. F_GETFD lub F_SETFD
(sprawdzenie/ustawienie bitu FD_CLOEXEC czyli co ma byd zrobione z plikiem po wykonaniu exec),
F_NOTIFY (powiadamianie o modyfikacji katalogu/plików), *LEASE (pobranie/ustawienie dzierżawy)

Jeśli w prawach pliku zamiast x jest s w części usera/grupy to proces przyjmuje identyfikator
właściciela programu, jeśli zamiast x jest t w części others to program nie jest zwalniany z pamięci
(przestarzałe, nazywane bitem lepkości)

access() – sprawdza czy proces może czytad/pisad/wykonywad i sprawdzad istnienie pliku,
sprawdzanie poprzez maski R_OK W_OK X_OK i F_OK, jeśli ok to zwracane 0

chmod() – zmiana praw dostępu

chown() – zmiana właściciela (jeśli któryś na -1 to nie będzie zmian), zmieniad może tylko SuperUser

dowiązanie sztywne – nowa nazwa dla istniejącego pliku, nie można powiedzied które jest oryginalne,
ma te same prawa i właścicielstwo, nie może odnosid się do katalogów i różnych systemów plików

dowiązanie symboliczne – plik zawierający łaocuch z nazwą pliku na który wskazuje, może byd
stosowany do katalogów, są interpretowane w trakcie działania, może zawierad fragmenty ścieżki
względnej, może wskazywad na istniejący lub nieistniejący plik, nie można nadpisad istniejącego
dowiązania, prawa są nieistotne

link() – tworzy dowiązanie twarde

symlink() – tworzy dowiązanie symboliczne

stat()/fstat() – zwraca informacje o podanym pliku, nie są konieczne prawa dostępu do pliku, w
przypadku stat konieczne są prawa przeszukiwania do katalogów po kolei.

Makra do plików:

S_ISREG

S_ISDIR

S_ISCHR – urządzenie znakowe

S_ISBLK – urządzenie blokowe

S_ISFIFO

S_ISLNK

background image

S_ISSOCK

Katalog to plik zawierający listę i-węzłów i nazw plików

mkdir() – tworzy katalog

rmdir() – usuwa katalog (pusty!)

opendir() – otwiera katalog

closedir() – zamyka katalog

readdir() – czyta katalog

rewinddir() – powraca do początku katalogu

chdir() – zmienia katalog bieżący

getcwd() – kopiuje nazwę bieżącego katalogu do bufora

scandir() – skanuje katalog wywołując funkcję filter() dla każdego katalogu (zdefiniowaną przez
użytkownika), następnie dla wartości >0 z filter wywoływana jest funkcja porównująca compar()
(zdefiniowana przez użytkownika) i umieszczane w tablicy namelist

alphasort/versionsort – funkcje porównujące do compar()

ftw() – przechodzenie drzewa katalogu wywołując funkcję fn dla każdego wpisu

Potoki:

Nazwane (kolejki FIFO), dostępne dla różnych procesów

Nienazwane, dostępne dla bezpośrednio spokrewnionych procesów

pipe() – funkcja tworzy potok nienazwany, pod filedes[0] jest odczyt, pod filedes[1] jest zapis

z potoków czytamy/piszemy jak ze zwykłych plików

close() – można zamknąd odczyt/zapis z potoku

background image

fcntl(filedes, F_SETFL, O_NONBLOCK) – zmiana zachowania w przypadku przepełnionego potoku i
pustego (normalnie blokowanie)

mkfifo() – tworzy potok nazwany

mmap() – odwzorowuje w pamięci plik, mapowanie pliku do pamięci

munmap() – kooczy odwzorowanie plików w pamięci

memcpy() – kopiuje między mapowanymi plikami w pamięci

Systemy plików w Linux (według kolejności powstania i używania):

Minix do 64MB, nazwy 14 znaków

Ext do 2GB, nazwy 255 znaków, listy do zarządzania wolnymi blokami, brak rozróżnienia na
czas dostępu, modyfikacji i tworzenia

Ext2 do 16384GB, rozmiar pliku do 2048 GB, automatyczne rozpoznawanie uszkodzeo
(lost+found)

Ext3 obsługa księgowania, brak odzyskiwania plików

Ext4 obsługa woluminu do 1024PB, mniejsza fragmentacja

EXT2

System składa się z wielu grup bloków dyskowych, jeden blok jest uważany za podstawową jednostkę
objętościową danych.

Wielkośd bloku jest stała w ramach całego systemu plików (1024:4096 bajtów).

Pierwszy blok każdej partycji jest zarezerwowany na sektor ładowania danej partycji i nei jest
zarządzany przez system plików tej partycji. Następne bloki są blokami obsługiwanymi przez system
plików partycji, w przypadku EXT2:

Superblok – zawiera kluczowe informacje o dysku i formacie danych (liczba i-węzłów i bloków na
dysku, liczba wolnych), we wszystkich grupach ma tą samą wartośd

Deskryptor grup – zawiera informacje o miejscach w których zaczynają się pozostałe części grup i
liczbie wolnych i-węzłów i bloków w grupach, taki sam we wszystkich grupach

background image

Bitmapa bloków – obszar 1 bloku dyskowego, tablica bitowa zawierająca mapę zajętości bloków w
grupie

Bitmapa i-węzłów – 1 blok dyskowy, tablica bitowa zawierająca mapę zajętości i-węzłów w grupie

Tablica i-węzłów – obszar na dysku zawierający i-węzły danej grupy

Bloki danych – dane właściwe w blokach

Struktury mogą zajmowad więcej niż jeden blok.

Jądro systemu korzysta z superbloku i deskryptorów grupy znajdujących się w zerowej grupie bloków

e2fsck – program badający spójnośd systemu pliku, odwołuje się do grupy zerowej i kopiuje w
pozostałych blokach

liczba grup bloków zależy od rozmiaru partycji i wielkości bloku

liczba grup bloków w przybliżeniu = s/(8*b)

s – rozmiar partycji w blokach

b – rozmiar bloku w bajtach

Rozmiar partycji w EXT2 – 8GB, rozmiar bloku 4KB

4KB bitmapa bloku więc 4K*8=32K bloków danych

32K bloków *4KB blok = 128MB rozmiar grupy

8*1024 rozmiar partycji / 128 = 64 grupy bloków

Superblok zawiera masę informacji, jakieś flagi, czasy sprawdzania, montowania, liczbę montowao,
rozmiar systemu plików w blokach, liczbę i-węzłów, rozmiar bloku i wiele wiele więcej.

s_log_block_size – wyraża rozmiar bloku jako potęgę 2, przy czym jednostką jest 1024 bajty

s_state – 0 jeśli zamontowany albo niewłaściwie odmontowany, 1 odmontowany, 2 zawiera błędy

i-węzeł:

Typ pliku

Rozmiar pliku w bajtach

Identyfikator usera/grupy

Czasy

Ilośd dowiązao

Lista kontroli dostępu

Liczba bloków w pliku

Adres fragmentu

Tablica opisu bloków pliku zawiera adresy bloków reprezentujących plik (i_block)

Tablica i-węzłów – składa się z ciągu sąsiadujących bloków zawierających określoną liczbę i-węzłów

background image

Każdy i-węzeł ma rozmiar 128 bajtów

Numer i-węzła jest jednoznacznie określony przez jego położenie na dysku, np. węzeł numer 13021
to 733eci wpis w tablicy trzeciej grupy bloków (reszta z dzielenia modulo przez rozmiar bloku numer
grupy to częśd całkowita z dzielenia)

Rozmiar pliku w bajtach może byd różny od rozmiaru obliczanego na podstawie zajętych bloków
(niepełne wypełnienie bloków)

W i-węzłach jest zmienna i_mode 2bajtowa, zawieraona 4 bity typu pliku, 3 bity modyfikatorów (s i t
w prawach) oraz 9 bitów praw dostępu

Dla dowiązao symbolicznych jeśli ścieżka jest krótsza niż 60 znaków to jest przechowywana w i_block

Pliki urządzeo, potoki i gniazda nie posiadają bloków danych, informacje w i-węzłach

Katalogi to pliki zawierające w blokach wiązania nazw i i-węzłów.

Dla zwiększenia wydajności większośd struktur kopiowana jest do pamięci, jeśli caching mode jest
fixed limit to ograniczona ilośd struktur może byd w pamięci, jeśli dynamic, to struktura jest
przechowywana tak długo jak jest używany obiekt.

mke2fs – program do formatowania

Formatowanie polega na:

1. Inicjalizacji superbloku i deskryptora grup
2. Dla każdej grupy bloków rezerwuje się bloki dla superbloku, deskryptora, tablicy i-węzłów i

bitmap

3. Inicjalizacja bitmap
4. Inicjalizacja tablic i-węzłów
5. Utworzenie katalogu / (głównego)
6. Utworzenie katalogu lost+found
7. Aktualizacja bitmap

background image

Obliczanie numerów bloków:

Direct – to musi byd podane (jak nie to jednak jest ich 12 :D)

b – wielkośd bloku w bajtach

a – wielkośd adresu bloków w bajtach

1-indirect: direct ÷ b/a+direct-1

2-indirect: 1-indirect ÷ (b/a)

2

+b/a+direct-1

3-indirect: 2-indirect ÷ (b/a)

3

+(b/a)

2

+b/a+direct-1

Jeśli liczymy ile danych dla poszczególnych adresowao to liczymy to co po ÷ i dodajemy 1 (bo od zera
numerowane).

ext2_new_inode()-alokacja i-węzła

ext2_free_inode() – zwolnienie i-węzła

ext2_get_block() – alokacja bloku

background image

ext2_free_blocks() – zwolnienie bloku

Jeśli tworzymy nowy i-węzeł dla katalogu to wybierane jest miejsce z największą liczbą wolnych
bloków, jeśli nie jest katalogiem to szukanie w grupie blisko danego katalogu, jeśli brak to
poszukiwanie z algorytmem quadratic hash, jeśli dalej nic to liniowo.

Mechanizm księgowania polega na tym, że dane są najpierw zapisywane w dzienniku/kronice przed
zapisem na dysk, dzięki temu zmniejsza się prawdopodobieostwo uszkodzenia systemu plików.

W EXT3 do wyboru tryb księgowania:

Journal – zapisywane metadane i zwykłe dane

Ordered – księgowane metadane (domyślny)

Writeback – księgowane metadane z możliwością modyfikacji danych do których się one
odnoszą

VFS – wirtualny system plików

System plików Linuksa wygląda jak hierarchiczne drzewo katalogów.

VFS jest warstwą abstrakcji dostarczającą jednolity interfejs dla wszystkich systemów plików
zamontowanych w systemie.

Klasy systemów obsługiwane przez VFS:

Dyskowe systemy plików (EXT,System V, BSD, VFAT,NTFS, ISO9660 i inne)

Sieciowe systemy plików (NFS, Coda, SMB, NCP)

Specjalne systemy plików, tj. systemy wirtualne np. system plików /proc do zawartości
struktur jądra

VFS oparty na obiektowości, dwie składowe:

Zbiór definicji

o Obiekt super bloku (zamontowany system plików)

background image

o Obiekt i-węzła (info o pliku)
o Obiekt pliku (powiązanie plik – proces)
o Obiekt pozycji w katalogu (pozycja w katalogu – plik)

Warstwa oprogramowania do działao na obiektach

Obiekty tego samego pliku są wiązane listami głównie dwukierunkowymi.

Każdy obiekt ma powiązania z metodami w postaci wskaźników.

W superbloku VFS:

s_list – lista zamontowanych systemów plików

s_dev – urządzenie na którym jest ten system

s_dirty – lista zmodyfikowanych i-węzłów

W systemie istnieje tablica mieszająca i-węzłów, dostęp do początku listy przez zmienną
inode_hashtable (lista kolizji łączona za pomocą pola i_hash)

Każdy i-węzeł znajduje się na jednej z trzech list:

Używane

Nieużywane

Zmodyfikowane (brudne)

Obiekt plikowy VFS znajduje się na jednej z kilku list:

Obiektów nieużywanych

Obiektów w użyciu

Obiektów do otwarcia

Wpis katalogu VFS:

Zawiera informacje o odwzorowaniach nazw w i-węzły

Umożliwia dekodowanie opisu drzewa

Ostatnio udostępniony i zwolniony zapis w katalogu jest przechowywany w pamięci podręczenj
(dentry cache).

W strukturze dentry są pola:

d_inode – wsk na i-węzeł

d_parent – katalog rodzica

d_subdirs – lista podkatalogów

d_hash, d_lru, d_child – powiązanie z innymi listami

d_op – metody zapisu (wskaźnik)

d_count, d_flags – użycia

Do szybkiego dostępu do katalogów korzysta się z tablic mieszających na podstawie nazw katalogów,
lista kolizji w d_hash, lista wolnych wpisów w d_lru, lista aliasów w d_alias

background image

W systemie są dwie listy LRU podręcznej pamięci buforowej zapisów w katalogach:

pierwszego poziomu – odczytywane z dysku dane katalogowe (np. ls)

drugiego poziomu – pozycje których używamy najczęściej (np. cat, wc)

Elementy najczęściej używane na koocach list.

background image

Proces posiada dwa pliki powiązane:

pole struct fs_struct *fs – z dowiązaniem do bieżącego katalogu oraz korzenia systemu

pole files_struct *files – tablica deskryptorów, pole fd na pierwsze 32 otwarte pliki

W jądrze systemu znajduje się lista wbudowanych lub załadowanych modułów systemów plikowych.

Struktura obsługująca informacje o systemie plikó - file_system_type:

name – nazwa

read_super – funkcja czytająca superblok

owner – moduł implementacji określonego typu systemu plików

fs_flags – flagi, m.in. czy wymaga urządzenia rzeczywistego

fs_supers – lista superbloków

next – wskaźnik na następny zamontowany system

Na pierwszy element listy zarejestrowanych plików wskazuje file_systems

Rejestrowanie modułu – odbywa się podczas dynamicznego łączenia modułu za pomocą
init_module():

wskazanie/napisanie funkcje read_super

alokacja pamięci na obiekt określający typ systemu plików

wywołanie rejestracji register_filesystem

cleanup_module – usuwanie modułu

Wszystkie zamontowane systemy plików są zawarte w liście składającej się ze struktur vfsmount:

background image

mnt_dev – numer urządzenia

mnt_devname – nazwa urządzenia

mnt_dirname – punkt montowania

mnt_flags – flagi urządzenia

mnt_sb – wskaźnik na superblok

mnt_dquot - opcje dysku

mnt_next – następny element

Dostęp za pomocą zmiennej vfsmntlist

Przykład montowania (modyfikacja również dentry):

background image


Wyszukiwarka

Podobne podstrony:
caban,systemy operacyjne II, pytania egz
caban,systemy operacyjne II, pytania egz
Laboratorium Systemy operacyjne II lista 3
12 - Sieciowe Systemy Operacyjne II, ARS
1a, UŁ Sieci komputerowe i przetwarzanie danych, Semestr II, Systemy operacyjne, Wykład, Systemy, Sy
TAM GDZIE PLUS TO ODPOWIEDŹ POPRAWNA, UŁ Sieci komputerowe i przetwarzanie danych, Semestr II, Syste
quota, !!!Uczelnia, wsti, materialy, II SEM, systemy operacyjne linux
Systemy Operacyjne Wykład 2, UŁ WMiI, Wykłady SYS OP, W 2
Systemy operacyjne - wykłady, Administracja, Administracja, Administracja i samorząd, Polityka spole
Dyski twarde-woluminy, Szkoła, Systemy Operacyjnie i sieci komputerowe, systemy, semestr II
II TI zagadnienia egzaminacyjne z systemów operacyjnych
Konsola odzyskiwania systemu, Szkoła, Systemy Operacyjnie i sieci komputerowe, systemy, semestr II
Podstawy architektury komputera, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr II
Teoria informatyki, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr II
instalacja win 2003, Szkoła, Systemy Operacyjnie i sieci komputerowe, systemy, semestr II

więcej podobnych podstron