Вы находитесь на странице: 1из 21

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 odrava tabelu file-ova u kojoj se nalazi:

Statusni flag-ovi file-a (r,w,a,...)


Trenutni file offset
Pokaziva na v-node file-a

v-node struktura sadri podatke o file-u:

Tipu file-a
i-nodu file-a koji se nalazi na disku

i-node struktura sadri podatke o:

Vlasniku file-a
Veliini file-a
Pokazivaima na blokove (delove) u memoriji gde
se nalaze podaci koji ine file

File-ovi

Dup

TipovifileovanaUNIXsistemu:
Obini file-ovi
Direktorijumi
Blok specijalni file-ovi ureaji na kojima
lseek moe da radi
Karakter specijalni file-ovi lseek ne radi
FIFO file komunikacija izmedju procesa
pipe-ovi
Soketi komunikacija meu procesima na
razliitim raunarima,
Simboliki linkovi

OrganizacijaFILEsistemanaUNIXu

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 takoe imaju svoje i-nod-ove i blokove.

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

struct stat {
dev_t

};

st_dev;

/* device - broj ureaja koji sadri file */

ino_t

st_ino;

/* inode */

mode_t

st_mode;

nlink_t

st_nlink;

uid_t

st_uid;

/* user ID of owner */

gid_t

st_gid;

/* group ID of owner */

dev_t

st_rdev;

off_t

st_size;

/* protection tip filea i prava pristupa */


/* number of hard links */

/* device type (if inode device) */


/* 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_t

st_mtime;

time_t

st_ctime;

/* time of last access */


/* time of last modification */
/* time of last change */

Hard i simbolikilinkovi

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

Broj linkova originalne datoteke uveava se za


jedan nakon linkovanja

Datoteka sa hard linkovima se ne moe


obrisati sa diska sve dok se ne uklone svi hard
linkovi koji pokazuju na nju.

Simbolikilinkovi

ln s original novilink

Svaki simboliki link koristi poseban i-node i jedan blok


podataka u sistemu datoteka.

Mogu se kreirati nalaziti na fiziki istom ili razliitom


sistemu datoteka, odnosno na istoj ili drugoj particiji
(disku) a mogu se linkovati datoteke sa mrenog
sistema datoteka (NFS) Moe se linkovati direktorijum,
kao i nepostojea datoteka(ili obrisati).

U odnosu na original, link moe imati razliitog


vlasnika, grupu i prava pristupa.

Procesi

Jedan proces na sistemu ima ID = 0 (swapper).


To je proces u samom kernelu a ostali se kreiraju
na isti nain 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.

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!

Zombi proces koji je zavrio sa izvravanjem


ali postoji u tabeli procesa da ne bi zbunio
oca.

wait(status koji je vratilo dete) roditelj eka


dok bar jedno dete ne zavri

waitpid(pid, status) roditelj eka dok dete


sa pid-om ne zaavri.

Signali su kratke poruke koje C alje procesu


da bi ga neto obavestio. Desetine signala su
definisane standardom.

Funkcije koje slue za slanje signala su :

abort() - SIGABRT,
alarm() SIGALRM
...

Reakcija programa na signal:

Podrazumevana (default) akcija


Nema reakcije
Moe da obradi signal signal handler funkcijom
koja se postavlja signal funkcijom

SIGKILL i SIGSTOP su signali koji ne mogu biti


ignorisani ili uhvaeni. Ona root-u omoguava
da stopira ili ubije bilo koji proces!

Spori sistemski pozivi mogu blokirati proces


na neodreeno 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.

Problem je sa paralelnim izvravanjem 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 doi
do greke!

REENTRANT funkcije ne smeju biti pozvane u


okviru handlera!

Veina funkcija je napisana pre nego to je koncept


signala izmiljen!

Вам также может понравиться