![]() |
Implementirani so kot objekti in do njih dostopamo preko upravnika objektov |
![]() |
Imajo lahko več niti, ki se izvajajo v skupnem naslovnem prostoru |
![]() |
Tako objekti - procesi kot objekti - niti imajo vgrajeno zmožnost sinhronizacije |
![]() |
Upravnik procesov ne vzdržuje nobenih relacij oče - sin o procesih, ki jih tvori. |
Proces vsebuje naslednje:
![]() |
Izvršljivi program, ki določa začetno kodo in podatke. |
![]() |
Privatni naslovni prostor, ki je del virtualnega prostora, ki je na voljo procesu. |
![]() |
Sistemske resurse, kot so semaforji, komunikacijska vrata in datoteke. |
![]() |
Najmanj eno nit, sicer se proces ne more izvajati. |
![]() |
Vsakemu procesu Windows 2000 ustreza v izvajalniku procesni
blok (EPROCESS, executive process block).
Slika poenostavljeno prikazuje strukture, ki opisujejo proces. Izvajalnikov procesni blok (EPROCESS)
|
![]() |
ID klijenta |
![]() |
Vsebina registrov, ki predstavljajo stanje procesorja |
![]() |
Dva sklada, enega uporablja nit v uporabnišken režimu, drugega pa v sistemskem (kernel) |
![]() |
Privatno pomnilno področje, ki ga uporabljajo podsistemi, in knjižnice (vključno z dinamično povezanimi knjižnicami (DLL)) |
![]() |
Dinamična prioriteta niti (to je prioriteta v danem trenutku) |
![]() |
Osnovna (base) prioriteta (to je spodnja limita dinamične prioritete) |
![]() |
Afiniteto niti, ki pove, na katerih procesorjih večprocesorskega sistema lahko nit teče. Afiniteta niti je torej seznam, ki je podmnožica afinitete procesa. |
![]() |
Opozorilna zastavica (alert status flag), ki pove, da mora nit izvesti asinhroni klic procedure. |
![]() |
Skupni čas izvajanja niti |
![]() |
Število prekinitev (kolikokrat je bila nit prekinjena, ne da bi bil njen potek obnovljen. |
![]() |
Začasni dostopni žeton (impersonation token), ki omogoči, da nit izvede operacije (servis) za nek drug proces. To uporabljajo podsistemi. |
![]() |
Zaključna vrata (termination port), to je medprocesni komunikacijski kanal, po katerem upravnik procesov pove, da je nit končala izvajanje. |
![]() |
Izstopni status niti |
Poleg atributov ima vsak objekt niti še naslednje metode (servise)
![]() |
Tvori nit (create) |
![]() |
Odpri nit (open) |
![]() |
Vpogled v stanje niti (query) |
![]() |
Set stanje niti (set) |
![]() |
Dobi kontekst niti (get) |
![]() |
Nastavi kontekst niti (set) |
![]() |
Tekoča (current) nit |
![]() |
Zaključi (terminate) nit |
![]() |
Prekini (suspend) nit |
![]() |
Obnovi (resume) izvajanje niti |
![]() |
Opozori (alert) nit |
![]() |
Preveri opozorilno zastavico niti (test alert) |
![]() |
Registriraj zaključna vrata |
Najbolj preprosta in dokaj pogosta oblika komunikacije med nitmi je sinhronizacija, pri kateri lahko posamezna nit prekine svoje izvajanje in čaka na zaključek operacije neke druge niti.
Objekti, ki tako sinhronizacijo omogočajo, so:
![]() |
Procesi |
![]() |
Niti |
![]() |
Datoteke |
![]() |
Dogodki |
![]() |
Dogodkovni pari |
![]() |
Semaforji |
![]() |
Časovniki (timer) |
![]() |
Mutanti |
V nekaterih primerih lahko nit z opozorilom (alert) sporoči neki
drugi niti, naj prekine svoje delo. Ta način sinhronizacije se uporablja
pri asinhronem klicu procedur (APC).
Procesorska afiniteta je podatek, na katerih procesorjih lahko ta proces teče (če imamo večprocesorski sistem). Niti imajo svoje lokalne procesorske afinitete, ki so podmnožica procesorske afinitete danega procesa.
Procesorska afiniteta je pomembna pri razvrščanju niti (thread scheduling). Razvrščevalnik izbere posamezno nit glede na njeno prioriteto, nato pa pogleda, na katerem procesorju lahko teče.
Niti imajo (večinoma) spremenljivo prioriteto. Glede na trenutni prednosti nivo čakajo v ustrezni čakalni vrsti. Razvrščevalnik dvigne njen nivo, ko nit zapusti stanje čakanja na nek vir (waiting state). Vsakič, ko nit prekine, ji prednostni nivo zniža. Tako preidejo računsko intenzivne niti na najnižji (to je osnovni) prednostni nivo.
Ko je nit izbrana za izvajanje, preide končno v tekoče (running) stanje. Pri tem mora priti do preklopa konteksta (context switching). To pomeni, da se vsebina registrov uporabljenega procesorja shrani na sistemski sklad niti (kernel stack). Iz sistemskega sklada izbrane niti pa se rekonstruira nova (torej nekdaj prej shranjena) vsebina registrov. To zadošča, če pripadata prekinjena in novoizbrana nit istemu procesu )in torej delujeta v istem naslovnem prostoru). V nasprotnem primeru pa mora priti še do rekonstrukcije naslovov strani.
![]() |
Sistem Windows 2000 uporablja 32 prednostnih nivojev:
|
![]() |
Razvrščevalnik uporablja čakalno vrsto (dispatcher ready queue), ki je pravzaprav skupina čakalnih vrst, po ena za vsak nivo prednosti. |
![]() |
Sistem dvigne prednost niti pa prehodu iz stanja čakanja
(na primer po vhodno izhodni operaciji).
Po vsakem izteku časovne rezine (kvantuma) prednost niti zniža (a ne pod bazni nivo) |
Kvantum časa je časovna rezina, ki je na voljo posameznim nitim v stanju, ko so tekoče.