21
Linux – file system

Osi04 - Linux File System

  • Upload
    -

  • View
    22

  • Download
    0

Embed Size (px)

DESCRIPTION

Linux

Citation preview

Page 1: Osi04 - Linux File System

Linux – file system

Page 2: Osi04 - Linux File System

File deskriptori su nenegativni celi brojevi koje kernel dodeljuje otvorenim file-ovima

Podaci o svakom procesu se nalaze u tabeli procesa – niz otvorenih file deskriptora (fd flags, pokazivač na tabelu file-ova)

Kernel održava tabelu file-ova u kojoj se nalazi: Statusni flag-ovi file-a (r,w,a,...) Trenutni file offset Pokazivač na v-node file-a

Page 3: Osi04 - Linux File System

v-node struktura sadrži podatke o file-u: Tipu file-a i-nodu file-a koji se nalazi na disku

i-node struktura sadrži podatke o: Vlasniku file-a Veličini file-a Pokazivačima na blokove (delove) u memoriji gde

se nalaze podaci koji čine file

Page 4: Osi04 - Linux File System

File-ovi

Page 5: Osi04 - Linux File System
Page 6: Osi04 - Linux File System

Dup

Page 7: Osi04 - Linux File System

Tipovi file-ova na UNIX sistemu:

Obični file-ovi Direktorijumi Blok specijalni file-ovi – uređaji na kojima

lseek može da radi Karakter specijalni file-ovi – lseek ne radi FIFO file – komunikacija izmedju procesa –

pipe-ovi Soketi – komunikacija među procesima na

različitim računarima, Simbolički linkovi

Page 8: Osi04 - Linux File System

Organizacija FILE sistema na UNIX-u

Disk je podeljen na particije, particije se sastoje od blokova fiksne duzine, jedan blok se zove super blok i tu se nalaze osnovni podaci o file-sistemu, zatim slede blokovi sa i-nod-ovima gde se nalaze meta – podaci o file-ovima i onda blokovi sa podacima.

Direktorijumi takođe imaju svoje i-nod-ove i blokove.

U blokovima se nalaze tabele koje čuvaju nazive i i-nod-ove file-ova direktorijuma.

Page 9: Osi04 - Linux File System
Page 10: Osi04 - Linux File System
Page 11: Osi04 - Linux File System
Page 12: Osi04 - Linux File System

struct stat {

dev_t st_dev; /* device - broj uređaja koji sadrži file */

ino_t st_ino; /* inode */

mode_t st_mode; /* protection – tip filea i prava pristupa */

nlink_t st_nlink; /* number of hard links */

uid_t st_uid; /* user ID of owner */

gid_t st_gid; /* group ID of owner */

dev_t st_rdev; /* device type (if inode device) */

off_t st_size; /* total size, in bytes */

blksize_t st_blksize; /* blocksize for filesystem I/O */

blkcnt_t st_blocks; /* number of blocks allocated */

time_t st_atime; /* time of last access */

time_t st_mtime; /* time of last modification */

time_t st_ctime; /* time of last change */

};

 

Page 13: Osi04 - Linux File System

Hard i simbolički linkovi

Hard linkovi imaju isti i-nod-e (ln file1 file2)

Broj linkova originalne datoteke uvećava se za jedan nakon linkovanja

Datoteka sa hard linkovima se ne može obrisati sa diska sve dok se ne uklone svi hard linkovi koji pokazuju na nju.

Page 14: Osi04 - Linux File System

Simbolički linkovi ln ‐s original novilink

Svaki simbolički link koristi poseban i-node i jedan blok podataka u sistemu datoteka.

Mogu se kreirati nalaziti na fizički istom ili različitom sistemu datoteka, odnosno na istoj ili drugoj particiji (disku) a mogu se linkovati datoteke sa mrežnog sistema datoteka (NFS) Može se linkovati direktorijum, kao i nepostojeća datoteka(ili obrisati).

U odnosu na original, link može imati različitog vlasnika, grupu i prava pristupa.

Page 15: Osi04 - Linux File System

Procesi

Jedan proces na sistemu ima ID = 0 (swapper). To je proces u samom kernelu a ostali se kreiraju na isti način – moraju da imaju roditeljski proces.

Proces od koga su svi nastali je INIT i ima ID = 1.

Kernel startuje sistem, aktivira hardver, odradi sve što je potrebno za startovanje sistema i pokrene INIT proces. Uloga INIT-a je inicijalizacija sistema.

Page 16: Osi04 - Linux File System

Fork – dete dobija kopiju data space-a, heapa i stacka roditelja. Text segment dele! (COW – copy on write – sve dele a onda kernel regulise pisanje).

vfork – kreira novi proces ali ne kopira podatke!

Page 17: Osi04 - Linux File System

Zombi – proces koji je završio sa izvršavanjem ali postoji u tabeli procesa da ne bi zbunio oca.

wait(status koji je vratilo dete) – roditelj čeka dok bar jedno dete ne završi

waitpid(pid, status) – roditelj čeka dok dete sa pid-om ne zaavrši.

Page 18: Osi04 - Linux File System

Signali su kratke poruke koje C šalje procesu da bi ga nešto obavestio. Desetine signala su definisane standardom.

Funkcije koje služe za slanje signala su : abort() - SIGABRT, alarm() – SIGALRM ...

Page 19: Osi04 - Linux File System

Reakcija programa na signal: Podrazumevana (default) akcija Nema reakcije Može da obradi signal – signal handler funkcijom

koja se postavlja signal funkcijom

SIGKILL i SIGSTOP su signali koji ne mogu biti ignorisani ili uhvaćeni. Ona root-u omogućava da stopira ili ubije bilo koji proces!

Page 20: Osi04 - Linux File System

Spori sistemski pozivi – mogu blokirati proces na neodređeno dugo vreme – read(),

Ideja je da se spori sistemski poziv koji dugo blokira prekine a da se u errno stavi EINTR – oznaka da je sistemski poziv prekinut signalom.

To komplikuje programiranje pa se uveo sistem automatskog restartovanja.

Page 21: Osi04 - Linux File System

Problem je sa paralelnim izvršavanjem – kod handlera i kod programa - ne zna se gde je prekinut program pa recimo ako program pukne na malloc funkciji (koja u uvezanoj listi čuva podatke o zauzetoj memoriji) a i handler poziva malloc sigurno će doći do greške!

REENTRANT funkcije – ne smeju biti pozvane u okviru handlera!

Većina funkcija je napisana pre nego što je koncept signala izmišljen!