Nazad | Maturski rad | Dalje |
|
- Procesi -
Proces je program koji je trenutno u izvršavanju.
Svaki proces zauzima određene sistemske resurse, kao što su memorija i procesorsko
vreme. Kernel pruža korisnicima iluziju konkurentnog izvršavanja više
procesa u isto vreme raspoređivanjem tih resursa među procesima koji su spremni
za izvršavanje.
Proces se izvršava ili u korisničkom, ili u
kernel-modu. U korisničkom modu instrukcije se izvršavaju u neprivilegovanom
modu hardvera. Kada proces zatraži od kernela da izvrši neki sistemski poziv,
instrukcije se vrše u privilegovanom, ali kernelom ograničenom i kontrolisanom
modu. Ovako su aplikacije odvojene od hardvera.
Kernel razlikuje procese prema njihovom
proces identifier (PID) broju. Korisnici mogu kreirati procese, kontrolisati
izvršavanje procesa i primiti obaveštenje kada se status izvršavanja procesa promeni.
Procesi mogu stvoriti nove pozivanjem sistemskog poziva
fork. Njime se stvara istovetna kopija procesa; dobiju se dva ista programa
i sa istim promenljivama i istim vrednostima. Oba procesa (roditelj i dete)
nastavljaju sa izvršavanjem instrukcije koja sledi posle pozivanja fork-a, s tim
što postoji jedna razlika: detetu fork vraća vrednost nula, a roditelju vraća
vrednost PID-a deteta (koja je različita od nule).
Obično posle pozivanja fork-a jedan od ova dva
procesa poziva sistemski poziv execve, kojim se vrši prepisivanje postojeće
memorijske slike procesa novom, koja se čita iz binarnog fajla, posle čega počinje
izvršavanje novog programa.
Proces može da završi svoje izvršavanje pozivanjem sistemskog poziva
exit. Ako je njegov roditelj pozvao sistemski poziv wait,
PID deteta se signalom šalje roditelju tako da on može da zna koje dete je
završilo sa izvršavanjem. Ako se dete-proces sruši, sistem simulira exit
sistemski poziv i obaveštava roditelja. Prilikom izlaženja, dete-proces postaje
zombi proces, koji se ne izvšava, ali postoji u memoriji, kako bi
roditelj mogao, koristeći wait4 sistemski poziv, da dobije više
informacija o detetovom izvršavanju.
Multiprogramiranje
predstavlja iluziju paralelnog izvršavanja više procesa ili programa. Kernel to
omogućava pomoću smenjivanja konteksa procesa (context switching).
Kontekst procesa obuhvata sve informacije koje kernel koristi za izvršavanje
procesa (PID, prioritet, stanje izvršavanja, data, stack i text segmente, stanje signala,
akcije na signale, tajmere, deskriptore...). Kernel odlučuje koji će proces
sledeći da izvršava - ovo se naziva scheduling - vremensko planiranje.
Scheduling -
Zadatak kernela je da isplanira i zakaže izvršavanje procesa tako da svi procesi
mogu da zauzmu podjednako resursa. Programi se ocenjuju prema količini
računanja i količini I/O koje izvršavaju i na osnovu toga im se određuje
prioritet. On se u FreeBSD-u izračunava svake sekunde, na osnovu
količine računanja u prethodnom periodu, količine memorije koju zauzima, ukupne
zauzetosti resursa sistema i vrednosti nice koju ima svaki proces i koja
označava poželjni prioritet. Svi procesi naizmenično dobijaju određen vremenski
period izvršavanja. U FreeBSD-u ovaj period je 0,1 sekunda, posle čega kernel
prelazi na izvršavanje procesa sa najvišim prioritetom.
Procesi koji čekaju da se I/O operacija završi imaju veći
prioritet izvršavanja, jer se izvršavaju u kernel-modu. Nasuprot tome, procesima
koji zahtevaju dosta računanja (procesorskog vremena) prioritet se smanjuje,
kako ne bi zauzeli kompletan procesor i zaustavili izvršavanje ostalih procesa.
Na ovaj način 4.4BSD kernel daje prednost interaktivnim programima (kakvi
su npr. tekst editori) nad dugotrajnim batch-type procesima koji
zahtevaju dosta procesorskog vremena i koji zagušuju sistem.
Ograničavanje resursa
- Kernel podržava ograničavanje količine resursa koji su dostupni pojedinačnim
procesima. Ova ograničenja mogu biti: maksimalno CPU vreme koje proces može
da zauzme, količina memorije koju može da alocira, veličina i broj fajlova koje
proces može da kreira, broj simultanih procesa koje korisnik može da pokrene i dr.
Za svako ograničenje postoje soft (mekani) i
hard (čvrsti) limit. Kada proces pređe soft limit, stiže mu signal koji obično
rezultira prekidanjem izvršavanja procesa, ali proces može i da ignoriše ovaj
signal i pokuša da oslobodi resurse. Ukoliko to ne uradi sledeći pokušaj
alociranja još resursa neće uspeti.
Hard limit se ne može prekoračiti. Svi korisnici mogu
svojim procesima da smanje hard limit, a jedino superuser može da ga poveća.
Sistemski procesi -
Svi procesi u 4.4BSD-u (i naravno FreeBSD-u) potiču od jednog procesa kojeg
startuje kernel. Prilikom startovanja sistema kreiraju se tri procesa i oni uvek
postoje i izvršavaju se. Procesi swapper i pagedaemon su procesi koji se izvršavaju u
kernel modu. Swapper (PID 0) je odgovoran za vremensko planiranje
premeštanja procesa iz RAM memorije u sekundarni memorijski prostor (swap)
ukoliko sistem ima manjak memorije. Pagedaemon (PID 2) je odgovoran za
ispisivanje delova adresnog prostora procesa na swap. Init (PID 1) je
proces koji se izvršava u korisničkom modu, van kernela i koji je odgovoran za
administrativne zadatke, kao što je pokretanje drugih procesa (po jedan getty
proces za svaki terminal mašine) zatvaranje procesa prilikom gašenja sistema
(ulaskom u beskonačnu petlju ili restartovanjem sistema).
Identifikatori korisnika -
Važna odgovornost operativnog sistema je da pruži mehanizam za kontrolu i
ograničenje pristupa privilegovanim operacijama kernela (npr. gašenje sistema ili
slanje mail-a). U FreeBSD-u ovaj mehanizam se zasniva na razlikovanju korisnika
i grupa korisnika sistema. Svaki korisnik ima jedinstveni user identifier (UID),
32-bitni broj koji mu je pripisao sistemski administrator. Korisnici su svrstani
u grupe, koje se označavaju GID (group identifier) brojem. Jednom
korisniku koji se naziva superuser dostupne su sve operacije kernela, dok
su mnoge od njih nedostupne običnim korisnicima.
Svakom procesu su pripisani UID i GID korisnika koji ga
je pokrenuo, tako da obični korisnici mogu samo svojim procesima da šalju signale.
Svaki fajl ima pristupne dozvole (access permissions) za vlasnika fajla,
grupu korisnika kojoj pripada vlasnik i ostale korisnike. Ove dozvole uključuju
čitanje (read), prepravljanje (write) i izvršavanje fajla (execute).
Ovako se obezbeđuje kontrola pristupa fajlovima.
U UNIX sistemima postoje setuid i setgid
programi koji omogućavaju da korisnik kontrolisano izvši neke operacije koje mu
nisu dozvoljene. Ovakvi programi moraju biti veoma pažljivo napisni kako ne bi
došlo do zloupotreba privilegija.
Nazad | Početak | Dalje | |
KERNEL | MEMORY MANAGEMENT |