windows utemezo ismet...

HWSW Famulus hwsw at famulus.hu
Tue Nov 4 22:51:12 CET 2003


Nos, megtalaltam Balla kolleganak magyarul tisztan ertelmesen leirva a win
utemezo mukodeset a TechNet magazinban......

A lenyeget kiemeltem, es jelzem szerintem nekem volt igazam!

Teljes cikk:
http://inetcom.hu/mick/publikaciok/szalak.htm
http://inetcom.hu/mick/publikaciok/szalak2.htm


KJ

----------------------------------------------------
A dispatcher várakozási sor-adatbázisa

A végrehajtási szálak időzítését végző komponens, a dipatcher (ami a maga
valójában nem is létezik, feladatát kernelszerte elszórtan található
összetevők végzik)
MINDEN PRIORITASÉRTÉKHEZ EGY-EGY VÁRAKOZASI SORT TART FENN !!!!

Ezekben a várakozási sorokban találhatók a futásra kész (Ready állapotú)
végrehajtási szálak.

A Dispatcher várakozási sor-adatbázisa

Az ábra bal oldalán láthatók a különböző prioritásértékhez rendelt
várakozási sorok (Dispatcher ready queue).

A legfontosabbak mégiscsak a várakozási sorok: amikor a Windows a következő
nyertes végrehajtási szálat keresi, ezeket a várakozási sorokat ellenőrzi, a
legmagasabb prioritásútól a legalacsonyabbig. Ha egy várakozási sorban
találunk futásra kész végrehajtási szálat, ő léphet futó státuszba.

Ha egy várakozási sorban egynél több furásra kész végrehajtási szál
található, a
dispatcher igazságos módon körbe-körbe adja majd a futási jogot
(round-robin).  !!!!!!!!!!
Ne feledjük, ez az igazságosság csakis azonos prioritású
végrehajtási szálak között érvényes, az alacsonyabb prioritással
rendelkezőkkel szemben sokkal keményebben viselkedik a Windows: amíg
magasabb prioritású szál futásra kész, bizony az alsó házakban semmi sem
történik.

Ennek demonstrálására készítettünk egy kis példaprogramot (a [4] címről
letölthető):

http://technet.netacademia.net/download/threading

Harcban a processzorért: a két processz nagyjából egyszerre indult,
különbség csak a prioritásukban van

Az ábrán látható tesztalkalmazás egy valamire képes: számol. Teszi ezt
addig, amíg a CTRL+C billentyűkombináció lenyomásával meg nem állítjuk. Az
st.bat a start parancs segítségével gyors egymásutánban kétszer elindítja
ugyanazt az alkalmazást, először egy alacsonyabb, majd egy magasabb
prioritással. Az eredmény önmagáért beszél. Ha kipróbáljuk, érdemes
megfigyelni, hogy a futásidő eloszlása korántsem sima: amikor néha végre az
alacsonyabb prioritású végrehajtási szál is szóhoz jut, gyors egymásutánban
15-20 sort ír a képernyőre, majd újabb hosszú szünet következik.

Látható, hogy a magasabb prioritású processz (és az ő egyetlen végrehajtási
szála) több nagyságrenddel többet futhat, mint az alacsonyabb prioritású
változat. Az érdekes az, hogy ez utóbbi is szóhoz jut néha. nem mond ez
ellent a pár sorral ezelőtt említetteknek? Nos, nem: az alacsonyabb
prioritású  processz nyilván akkor futhatott, amikor a magasabb prioritású
éppen nem volt futásra kész állapotban (például mert I/O műveletre várt), de
az is lehet hogy az operációs rendszer mentette meg az "éhhaláltól" - lást
később.

A működő rendszer egyik kulcsa a várakozás
A végrehajtási szálak leggyakoribb állapota a várakozás (wait state). Egy
szál sok mindenre várhat: I/O művelet befejezésére, másik végrehajtási szál
lefutására, különféle rendszereseményekre, sült galambra (ami tíz másodperc
múlva érkezik) - ezek mindegyike annyiban hasonló, hogy a várakozás során a
végrehajtási szál várakozó státuszba lép (onnan majd az adott esemény
bekövetkeztekor maga a Windows lépteti vissza). A várakozó státusz pedig nem
futásra kész státusz, ezért ilyenkor végre feljöhetnek a felszínre az addig
fuldokló, alacsonyabb prioritású végrehajtási szálak is.

Van még más eset is, amikor a Windows (a Dispatcher) újra kiértékeli, ki
lehet a következő futó szál - jusson eszünkbe a felsorolás az előző számból:

§          Új végrehajtási szál futásra kész - mert új szál jött létre, vagy
tért vissza várakozó státuszból

§          Az éppen futó végrehajtási szál elhagyja a futó státuszt - mert
lejárt a számára kijelölt időszelet; mert várakozó állapotba lépett, vagy
mert végleg befejezte a működését

§          Valamelyik végrehajtási szál prioritása megváltozik - ha önmaga,
vagy akár az operációs rendszer módosítja a szál prioritását

§          Ha a futó végrehajtási szál Processor Affinity értéke megváltozik

------------------------





More information about the Elektro mailing list