Procesi in niti


Procesi

Procesi NT/2000 se deloma razlikujejo od procesov pri drugih operacijskih sistemih:
 
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)
Procesni blok jedra
Blok okolja procesa
Izvajalnikov blok niti  (ETHREAD)
Blok niti v jedru   (KTHREAD)
Blok okolja niti
 


Kako tvorimo proces


 

Niti

Niti pri Windows NT so objekti, ki imajo naslednje osnovne komponente oziroma atribute :
 
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
Registrom, skladoma in privatnemu pomnilnemu podro�ju pravimo kontekst 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
Prvi trije objekti imajo seveda druge osnovne naloge, ostali pa slu�ijo le za sinhronizacijo. V vsakem trenutku je sinhronizacijski objekt v signaliziranem ali nesignaliziranem stanju. Pomen tega stanja se od tipa objekta razlikuje. Tako preide nit v signalizirano stanje, ko se izte�e, Proces preide v signalizirano stanje, ko kon�a tudi zadnja od njegovih niti, �asovnik preide v tako stanje po preteku dolo�enega �asa. Sinhronizacija poteka tako, da neka nit �aka na signalizirano stanje enega ali ve� drugih objektov.
 

Stanja niti

Initialized 
Nit je bila pravkar vzpostavljena.

Ready
Nit �aka, da jo razvr��evalnik izbere.

Standby
Nit je bila izbrana za izvajanje na danem procesorju.

Running
Izveden je bil preklop konteksta na to nit. Tekla bo do prekinitve ali do konca.

Waiting 
Nit je pre�la v stanje �akanja, ker �aka na sinhronizacijo z nekim objektom, 

Transition 
Nit je sicer pripravljena na izvajanje, vendar je njen sklad umaknjen iz pomnilnika. Nit �aka na pomnilnik. 

Terminated
Nit se je pravkar zaklju�ila. Njen objekt �e obstaja. Izvajalnik bi jo �e lahko ponovno inicializiral.


 

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).


Proces jedra in objekti niti

Implementaciji objekta proces ustreza v jedru minimiziran objekt, ki mu pravimo proces jedra (kernel process). Jedro ne pozna tabele objektov, ki jo sre�amo pri procesu. Zato direktno dostopa do niti, ki pripadajo procesu jedra. Poleg tega vsebuje ta objekt tudi direktne kazalce na procesovo tabelo strani, na podatke o privzeti prioriteti procesa, na njegovo procesorsko afiniteto in na podatek o trajanju procesa.
 


 
 

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.


Razvr��anje niti in procesov

 
Sistem Windows 2000 uporablja  32 prednostnih nivojev:
  • �estnajst nivojev realnega �asa (16-31)
  • Petnajst spremenljivih nivojev (1-15)
  • En sistemski nivo (0), rezerviran za  nit ni�elne strani (the zero page thread)
Niti podedujejo osnovno prednost procesa (base priority). Teko�a prednost procesa je dinami�no spremenljiva v obmo�ju 1-15. 

 
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.


�e nekaj o scenarijih razvr��anja

 
Nit sama preide v stanje �akanja (ker morda �aka na nek objekt) Nit nadomesti nit z vi�jo prednostjo, �e preden porabi kvantum �asa. (zato kasneje nadaljuje s preostankom kvantuma). Niti je kvantum �asa po�el (zato se uvrsti na konec �akalne vrste z novim kvantumom)


Struktura procesov

NT  omogo�a so�asno izvajanje aplikacij, pripravljenih za razli�na okolja (Win32, MS-DOS, OS/2, POSIX). Pri tem si pomaga s takoimenovanimi okoljskimi podsistemi (environment subsystems), ki kot nekak�en vmesnik (API) emulirajo okolje, ki ga nek aplikacijski program pri�akuje. Koncept si lahko ogledamo na primeru sistemskega klica za tvorbo novega procesa: