1 / 19

Süsteemprogrammeerimine keeles C ja C#

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)

may-mason
Download Presentation

Süsteemprogrammeerimine keeles C ja C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Süsteemprogrammeerimine keeles C ja C# Üheteistkümnes loeng

  2. Protsessid ja threadid • Mõisteid • Mälumudel • Protsessimudel • Threadimudel • Sünkroniseerimine

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

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

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

  6. Win32 (NT) mälumudel P1 P2 P3 P4 2G+2G Tuum

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

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

  9. Protsessid • Protsessi loob opsüsteem • Kasutaja korraldusel • Mõne programmi korraldusel • CreateProcess(“moodulinimi”,“käsurida”,...)

  10. Threadid • Protsessi sees paraleelselt täidetavad koodid • CreateThread(..., ..., funktsiooniaadress, parameeter, ...) • NÄIDE!

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

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

  13. Sünkroniseerimine • Vajadus? • Sünkroniseerimisvahendid • Critical Section • Mutex • Semaforid • Ootefunktsioonid • Eventid ja CallBack funktsioonid

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

  15. Mutex • CS on protsessisisene, Mx on protsesside vaheline • “justku mälus paiknev lukustatav fail” • Kasutamiseks • CreateMutex(..., ..., “nimi”); • OpenMutex( ...); • ReleaseMutex(...); • Ootefunkstioonid

  16. Semaphore • Loenduriga “mutex” • Mutexil on 0 kooskasutajat • Semaforil n kooskasutajat • Kasutamiseks • CreateSemaphore(..., ..., mitu, nimi) • Ootefunktsioonid //suurendavad loendurit • ReleaseSemafore(...); // vähendab loendurit

  17. Timer • SleepEx funktsioon • CreateWaitableTimer või OpenWaitableTimer • SetWaitableTimer – käivitab • CancelWaitableTimer – peatab

  18. Thread • Thread ise on samuti oodatav (sünkroniseeritab objekt)

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

More Related