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!