190 likes | 389 Views
Süsteemprogrammeerimine keeles C ja C#. Üheteistkümnes loeng. Protsessid ja threadid. Mõisteid Mälumudel Protsessimudel Threadimudel Sünkroniseerimine. Mõisteid. Programm – kood, täidetav käskude jada Protsess – OP-süsteemi mõiste, koodi täitmine (hiljem täpsemalt)
E N D
Süsteemprogrammeerimine keeles C ja C# Üheteistkümnes loeng
Protsessid ja threadid • Mõisteid • Mälumudel • Protsessimudel • Threadimudel • Sünkroniseerimine
Mõisteid • Programm – kood, täidetav käskude jada • Protsess – OP-süsteemi mõiste, koodi täitmine (hiljem täpsemalt) • OP-süsteemi ülesanne – protsesside juhtimine • SP – MP süsteemid • Vabatahtlik (Cooperative) • Sunniviisiline (Preemptive)
Veel mõisteid • Protsess – OP-süsteemi objekt • Õigused • Täidetav(ad) kood(id) • Mälu jm ressursid • Thread – lõim, tegum, täitmisvalmis kood • Õigused (optional) • Kood, täitmiskoht • Registrid • Iga protsess sisaldab 1 või mitu threadi
MP mälumudelid • Lamemälu – operatsioonisüsteemil on üks suur mälupiirkond, igal protsessil on oma osa sellest • Virtuaalmälu – igal protsessil on näiliselt oma suur mälupiirkond
Win32 (NT) mälumudel P1 P2 P3 P4 2G+2G Tuum
Mälu kasutamine • GlobalAlloc – eraldab “ujuva” mälutüki • GlobalHandle – kinnistab selle • GlobalUnlock – laseb selle lahti • HeapAlloc – võtab kohe kinnistatud mälu • VirtualAlloc – eraldab VM piirkonna
Erinevate mälutehnikate otstarve • Võimaldada eri protsessidel ja protsessi threadidel mälu sujuvalt kasutada • Vähendada programmide mälutarvet • Keerulisem mäluhaldus muudab programmi keerukamaks (ja aeglasemaks) kuid suurendab skaleeritavust
Protsessid • Protsessi loob opsüsteem • Kasutaja korraldusel • Mõne programmi korraldusel • CreateProcess(“moodulinimi”,“käsurida”,...)
Threadid • Protsessi sees paraleelselt täidetavad koodid • CreateThread(..., ..., funktsiooniaadress, parameeter, ...) • NÄIDE!
Appartmendid • Maja (protsess) on jaotatud korteriteks (appartmentideks) milles elavad threadid • Majas on kolme tüüpi kortereid • Üks mitme inimese korter • Kuitahes mitu üheinimese korterit • Uuemates majades suvakorterid • Thread “teab” millist tüüpi korteris ta elab
Appartmendid • STA – Single Thread Appartment • Võib olla protsessis kuitahes palju • Igas STA-s üks thread • MTA – Multi thread Appartment • Ühes protsessis üks • Ühes MTA-s mitu threadi • FTA – Free Thread Appartment • Appartmentide vahel parameetrid marshallitakse • Thread peab olema kirjutatud arvestusega, millises appartmendis ta paikneda võib.
Sünkroniseerimine • Vajadus? • Sünkroniseerimisvahendid • Critical Section • Mutex • Semaforid • Ootefunktsioonid • Eventid ja CallBack funktsioonid
Crical Section • Kõigile kättesaadav muutuja • CRITICAL_SECTION xCS; • Initsialiseerimine (tavaliselt main) • InitializeCriticalSection(&xCS); • Kasutuselevõtt ja vabastamine • EnterCriticalSection(&xCS); • LeaveCriticalSection(&xCS); • Kaks threadi korraga ei saa “kriitilises piirkonnas” olla, üks jäetakse ootama
Mutex • CS on protsessisisene, Mx on protsesside vaheline • “justku mälus paiknev lukustatav fail” • Kasutamiseks • CreateMutex(..., ..., “nimi”); • OpenMutex( ...); • ReleaseMutex(...); • Ootefunkstioonid
Semaphore • Loenduriga “mutex” • Mutexil on 0 kooskasutajat • Semaforil n kooskasutajat • Kasutamiseks • CreateSemaphore(..., ..., mitu, nimi) • Ootefunktsioonid //suurendavad loendurit • ReleaseSemafore(...); // vähendab loendurit
Timer • SleepEx funktsioon • CreateWaitableTimer või OpenWaitableTimer • SetWaitableTimer – käivitab • CancelWaitableTimer – peatab
Thread • Thread ise on samuti oodatav (sünkroniseeritab objekt)
Ootefunkstioonid • WaitForSingleObject(...) • Ootab ühte Mutexit või Semafori, Timerit või Threadi • WaitForMultipleObjects(...) • Ootab mitut (kas üks või kõik) • Ootefunkstioonide parameetrid • Handler (CreateThread, CreateMutex, CreateSemaphore, CreateWaitableTimer) • Ootefunkstioonil timeout