Ne znam u kom smislu da to uradis...
Znas da svaki proces moze imati slijedece prioritete:
Realtime
High
AboveNormal
Normal
LowNormal
Low
I vidis da su svi MS na High, dok vecina korisnickih progama na Normal.. mada se to lako moze mijenjat..
Zatim to znaci kolko ce kojem procesu biti udijeljeno procesorskog vremena, CPU sheduling (googlaj)...a to sve zbog visezadacnosti, jer se samo jedan thread moze izvrsavat i on ima Running stanje, dok ostali cekaju u redu i tako se postize privid visezadacnosti (takvi sustavi su Windows, Linux...) dok primjer jednozadacnosti moze biti MS-DOS!
Stanja procesa mogu biti:
New-novokreiran proces
Ready-proces ceka na izvrsavanje kad procesor postane slobodan jer se trenutno neki drugi proces izvrsava
Running-proces kojeg CPU trenutno izvrsava, i takav moze biti samo jedan na jednoprocesorskom sistemu
Blocked/Waiting-proces ceka na neki eksterni dogadjaj (ne moze se izvrsavati dok se dogadjaj ne izvrsi).. recimo da imas proces koji cita neki ogroman fajl, on preko nekog API-ja, recimo ReadFile cita taj fajl... prelazi se u ring 0 procesorski mod i dispatcher zamjenjuje kontekst threadova (minimalni) i zatim se izvrsava neki drugi proces dok ovaj ceka hardwareski interrupt od I/O uredjaja koji cita onaj fajl
Terminated-proces je izvrsio sa izvodjenjem i mice se sa liste
Svaki proces je opisan sa procesnim kontrolnim blokom (PCB-Process Control Block), dok je svaki thread odredjen sa TCB-em (Thread Control Block)... oni sadrze sve potrebne informacije o procesu/threadu kao sto su:
lokacija u memoriji gdje se nalazi proces, stanje procesa, PC (program conuter ili ti fensi EIP-Extended Instruction Pointer, registar koji sadrzi adresu koja ce se slijedeca izvrsit), stanje ostalih registara, PID (jedinstveni identifikacijski broj procesa), prioritet procesa (gore sam ti nabrojao koji mogu bit), neke opcenite podatke koji su pridruzeni procesu (npr. lista otvornih datoteka, tablica stranica, TLB)...
Ako ne razlikujes proces od niti
.. proces je program ucitan u glavnu memoriju koji se izvrsava i dinamicki mijenja, i svaki proces mora sadrzavat barem jedan thread... proces se dakle sastoji od thredova i oni se "paralelno" izvrsvaju u tom procesu! Primjer je tekst procesor, recimo MS Word.. on ako pise recimo neki ogroman fajl i ako ima jedan thread korisnik nece nista moci upisivat u Word jer ce bit "smrznut"... pa zato se koriste thredovi (niti, dretve
).. i onda jedna nit sluzi ta upisivanje tog nekog ogromnog fajla, a druga nit radi sa korisnikom i cita i obradjuje sta on trazi (operacije nad tekstom i slicno)
E sad.. sta je dispatcher?
Dispatcher ti je modul unutar jezgre OS-a koji implementira zamjenu konteksta (sprema/ucitava stanja thredova) i zasluzan je za pokretanje novog threada i jos ponesto sto mi se neda sad objasnjavat...
Kada dispatcher da CPU nekom threadu postavlja se pitanje kako on dobije nazad CPU, tj. kako dobije kontrolu, postoje 2 nacina:
1.)thread sam izaziva dogadjaje kojima predaje kontrolu dispatcheru (tu ti spadaju recimo kada thread ide u waiting stanje radi cekanja obavljanja neke I/O operacije, zatim ako se thread blokira pozivajuci WaitForSingleObject radi nekog dogadjaja ili pak ako dobrovoljno da CPU vrijeme izvrsavanja nekom drugom threadu pozivanjem Sleep() funkcije)
2.)dogadjaji izazvani bez utjecaja threada (tu ti spadaju prekidi, tipa pritisak tipke na tipkovnici, disk I/O je zavrsen ili nesto deseto)
Za to moze posluzit i tajmer.... i zato postoje 2 vrste visezadacnosti:
1.)Preemptive (iznudjena)
-to znaci da thread koji se trenutno izvrsava moze biti prekinut u izvrsavanju (prelazak iz running stanja u ready) i tu imas primjer Round Robin (RR)..veca pravednost jer se radi preko tajmera i svaki thread ima isto CPU vrijeme (osim onih koji imaju veci prioritet)...................npr. tipicni vremenski interval je 10-100 milisekundi, dok je tipicno vrijeme za zamjenu konteksta 100-1000 instrukcija :P
Windows XP koristi internal od 20ms, dok Windows 2003 server koristi tajmer interval od 100 ms
2.)Non-preemptive (neizudjena)
-to znaci da kad neki thread zapocne izvrsvanja nista ga ne moze prekinut vec on dobrovoljno daje nekom drugom vrijeme preko wait() i yield() funkcija... primjer FIFO:
TCB1->TCB2->TCB3->|CPU|->TCB4->TCB5->i sad ide opet tu TCB1 i tako u krug
I sad ima tu na tone jos toga, od mutexa, semafora, primjera, zaebavanja i sl.. al mi se fakat neda vise pisat, jedva sam se natjero da ti ovo napisem!!
Ako mi nabavis mail, broj telefona ili nesto deseto od Angeline Jolie i da je preko toga dobijem napisem ti cijeli seminarski sa svime
)) Dobijes 5+ ;P
poz i nadam se da sam ti pomogo :P