Az eljárások fonalak és szálak tengelyek ablakok

1. Az eljárások fonalak és szálak OSWindows

Eljárás nevükön egy példánya már futó programot. Bár első pillantásra úgy tűnik, hogy a koncepció a program és a folyamat szinte azonos, akkor alapvetően különböznek egymástól. A program egy statikus sor utasítást, és a folyamat egy sor források és a felhasznált adatok a program végrehajtása során. Folyamatot Windows az alábbi összetevőkből áll:







- adatstruktúra, amely tartalmazza az összes információt a folyamat, beleértve egy listát a nyitott kezeli a különböző rendszer erőforrásait, egyedi folyamat azonosítója, a különböző statisztikai adatok, stb.;

- egy egyedi azonosítót a menet;

- a tartalmát a CPU regiszterek egy sor tükrözi az állam a processzor;

- két köteg, amelyek közül az egyik használni, amikor a menet kernel módban és egy másik - a felhasználói módban;

- fedett terület memória nevezett szál helyi tárolási (cérna helyi tároló, TLS) és alrendszerek használt, futásidejű könyvtárak és DLL.

Ahhoz, hogy minden szál a munka, az operációs rendszer hozzárendel mindegyikük egy bizonyos CPU. Így illúzióját keltik egyidejű végrehajtása szálak (persze igaz párhuzamosság lehetséges többprocesszoros számítógépek). A Windows rendszer végre megelőző menetrendi alapuló prioritásokat, amelyek mindig végrehajtásra a legmagasabb prioritású szál futásra kész. Válogatott végrehajtani a szál fut egy bizonyos ideig, az úgynevezett kvantum. Quantum meghatározza, hogy meddig egy szál fut, amíg az operációs rendszer nem fogja megszakítani vele. Végén a kvantum az operációs rendszer ellenőrzi, hogy a végrehajtásra kész egy másik szál azonos (vagy nagyobb) prioritási szintet. Ha az ilyen szálak nem rendelkezik, az aktuális szál van rendelve egy másik kvantum. Azonban a szál nem tud teljes mértékben kihasználja a kvantum. Amint a másik szál nagyobb prioritású futásra kész, az aktuális szál elmozdul, akkor is, ha a kvantum még nem járt le.

Amikor van egy időzítő megszakítás a kvantum a menet kivonjuk 3, és így tovább, amíg el nem éri a nullát. Frekvencia váiaszidözitő függ a hardver platform. Például, a legtöbb x86 egyprocesszoros rendszerben ez 10 ms és legfeljebb többprocesszoros rendszerek x86 - 15 ms.

Windows tervezés végzik a szálszinten és nem folyamatokat. Egyértelműnek tűnik, mivel a folyamatok önmagukban nem teljesül, de csak források és a kontextust a végrehajtási szál. Ezért, amikor tervez menet, a rendszer nem figyel arra, amit tartoznak, milyen folyamat. Például, ha folyamat A 10 futtatható szálak, és az eljárás B - két 12 izzószál és az összes azonos prioritással, mindegyikük megkapja 1/12 CPU idő.

A Windows van egy 32 prioritási szinten, 0 31. Ezek a következőképpen csoportosíthatók: 31-16 - valós idejű szinten; 15-1 - a dinamikus szinten; 0 - rendszer szintű, fenntartott oldal nullázást folyamat (nulla-oldal menet).

A prioritás minden szál (menet bázis prioritás) összege a prioritása a folyamatba, és a relatív prioritása a menet is. Hét relatív prioritása szálak:

Normál: ugyanaz, mint a folyamatban;

Fent normál: 1 a kiemelt folyamatot;

Timecritical: beállítja az alap prioritását egy szál Realtime class 31,

más osztályok számára - 15;

Idle: beállítja az alap prioritását egy szál Realtime 16. osztályba

más osztályok számára - 1.

Ha az operációs rendszer fut a gépen, amely több mint egy processzor, akkor alapértelmezés szerint a menet fut a rendelkezésre álló processzor. Ugyanakkor bizonyos esetekben egy sor processzorok, amelyen egy szál futhat, lehet korlátozni. Ez a jelenség a processzor affinitás (processoraffinity). Meg lehet változtatni a processzor affinitás programot át Win32 # 8209; a tervezési funkciót.







2. létrehozásának folyamata

- Megnyitja egy képfájlt (EXE), amely kerül sor a folyamatban. Ha a végrehajtható fájl nem Win32 alkalmazás, a kép támogatását kérik (támogatás image) futtatni ezt a programot. Például, ha a fájl kerül végrehajtásra rasshireniem.bat, fuss cmd.exe, stb

- Létrehoz egy Win32 tárgy „folyamat”.

- hozzon létre egy primer menetes (verem, összefüggésben, és a „menet” objektum).

- Win32 alrendszer bejelentett egy új folyamat és cérna.

- Úgy kezdődik a végrehajtása az elsődleges téma.

3. A folyamat végrehajtásáról

A folyamat megszakad, amikor:

- A bemeneti funkció elsődleges menet visszanyerje ellenőrzés.

- Az egyik a szálak a folyamat okozta a funkciót ExitProcess.

- A menet a másik folyamat hívott függvény TerminateProcess.

Példa: A program létrehoz egy folyamat „számológép”.

int main (int argc, char * argv [])

ZeroMemory (si, sizeof (SI));

ZeroMemory (pi, sizeof (pi));

if (CreateProcess (NULL, «C: \\ Windows \\ calc.exe» !, NULL, NULL, HAMIS,

0, NULL, NULL, si, pi))

// bezárása folyamatban, és menet kezeli.

4. Hozzon létre egy szál

5. lezárása szálak

Ha a szál végét

- a szál a függvény.

- A szál magától destructs, okozva ExitThread.

- Más izzólámpa, vagy egy harmadik eljárás okozó TerminateThread.

- a folyamat tartalmazó szál.

6. létrehozása szálak

A szál lehet létrehozni egy olyan rendszer segítségével hívást CreateFiber láncfonal eljárással vagy megkaphatjuk a aktuális szál keresztül ConvertThreadToFiber funkciót. A váltás a szálak lehet elhelyezni keresztül SwitchToFiber funkciót. de a hívás lehet csak a rost.

Példa: A program létrehozza a négy szál, amelyek mindegyike végez váltás a következő szál, ha a kapcsolók számát 10-nél nagyobb, a munka befejeződött.

#define _WIN32_WINNT 0x0400

érvényteleníti WinAPI Func (void *)

printf ( «Fiber száma% d \ n», Counter% 4);

SwitchToFiber (rost [Counter% 4]);

int main (int argc, char * argv [])

rost [0] = CreateFiber (0, Func, NULL);

rost [1] = CreateFiber (0, Func, NULL);

rost [2] = CreateFiber (0, Func, NULL);

rost [3] = CreateFiber (0, Func, NULL);

// váltani az első szál szükséges átalakítani az aktuális téma a szál

7. Destruction szálak

Kényszeríteni a pusztítás a szálak használt DeleteFiber funkciót. Szintén a megsemmisítése szál használható minden funkciót elpusztítására szálak.

Függessze fel az a munka szálak is használhatók a különböző módokon.

Sleep () függvény felfüggeszti a menet a megadott számú milliszekundum. Ha az argumentum megad 0 ms, akkor történik a következő pillanatban. Menet feladni kvantum CPU idő, hanem azonnal megjelenik a témák listája indításra kész. Más szóval lesz a szándékos kapcsolási szálak (vagy inkább egy kísérlet, hogy megváltoztassák -, mert a következő szál elvégzésére lehet, ugyanaz).

Példa. A program létrehozza a folyamat „számológép”, és 15 másodperc múlva megöli.

int main (int argc, char * argv [])

memset (StartUpInfo, 0, sizeof (STARTUPINFO));

Ha (CreateProcess (NULL, «C: \\ Windows \\ calc.exe», NULL, NULL, HAMIS,

NORMAL_PRIORITY_CLASS, NULL, NULL, StartUpInfo, ProcessInfo))

TerminateProcess (ProcessInfo.hProcess, 0);

WaitForSingleObject () függvény felfüggeszti a szálat, amíg, amíg az egyik két esemény:

- lejár timeout;

- a várható tárgy kerül a riasztás (jelez) állapotban van.

By visszatérési érték is lehet érteni, hogy a két esemény történik. Várják a várakozás # 8209; a legtöbb funkció lehet kernel objektumok, például objektum „eljárás” vagy „szál”, hogy meghatározza, mikor teljes munkájukat.

WaitForMultipleObjects funkciót vezetünk objektumtömbbe egyszerre. Számolni lehet a műveletet még egyszer az összes objektum, vagy az egyik közülük.

Példa. A program létrehozza két azonos szálak és vár befejezését. Menet egyszerűen írni egy szöveges üzenetet, amelyet a nekik szállított inicializálása során.

előjel nélküli ThreadFunc (void * arg)

char ** str = (char **) arg;

MessageBox (0, str [0], str [1], 0);

int main (int argc, char * argv [])

char * InitStr1 [2] =; // karakterláncot az első menet

char * InitStr2 [2] =; // karakterláncot a második menet

előjel nélküli hosszú hiba uThreadIDs [2];

hThreads [0] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

hThreads [1] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

// Várja meg, amíg a szálak befejezni munkájukat

WaitForMultipleObjects (2, hThreads, IGAZ, INFINITE);

Az előadás tárgyalja a különböző WIN API funkciók és lépéssorozatot létrehozására és dolgozik a folyamat, cérna és foloknami vmindouz létrehozásakor alkalmazásokat, azok használatát és tulajdonságait. A teljes tájékoztatás céljából, felhasználása és szintaktikai összes Win32 API funkciók használatához a rendszer segítségével MSSDK, amely része a BorlandDelphi CBuilder vagy programozási környezetek, valamint az MSDN, szállított részeként VisualC programozási rendszer.




Kapcsolódó cikkek