Szálak szinkronizálása (Ro- Sincronizarea threadurilor)



Hasonló dokumentumok
Konkurens TCP Szerver

Előadás_# Az első ZH megírása

Csak felvételi vizsga: csak záróvizsga: közös vizsga: Mérnök informatikus szak BME Villamosmérnöki és Informatikai Kar január 4.

Operációs rendszerek. 3. előadás Ütemezés

Operációs rendszerek

Nyíregyházi Főiskola Matematika és Informatika Intézete. Holtpont (Deadlock) Alapfogalmak, példák, ábrázolás. Biztonságos és nem biztonságos állapot

Folyamatszálak szinkronizálása

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

SAP vállalatirányítási rendszer alapjai

UNIX folyamatok kommunikációja

IBM i. Hálózatkezelés DHCP 7.1

Objektum Orientált Szoftverfejlesztés (jegyzet)

ADATBÁZISKEZELÉS ADATBÁZIS




A SZOFTVERTECHNOLÓGIA ALAPJAI

Bánsághi Anna 1 of 67

Hálózat Dynamic Host Configuration Protocol

Számítógépvezérelt rendszerek mérnöki tervezése

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése

Adatbázisok* tulajdonságai

Operációs rendszerek MINB240

Starkné dr. Werner Ágnes

Bosch Video Client. Kezelési útmutató

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

RIA Rich Internet Application

Gate Control okostelefon-alkalmazás

Első Magyarországi Szoftvertesztelő Verseny Döntő feladatsor

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

Jogosultságkezelés felhasználói leírás

Előadás_#06. Előadás_06-1 -

1. Járóbeteg előjegyzés

Bártfai Barnabás. Office 2010

Informatika 1 Operációs rendszerek

Foglalkozási napló. Pénzügyi-számviteli ügyintéző 14. évfolyam

Felhasználói kézikönyv

Gate Control okostelefon-alkalmazás

Számítógépes hálózatok

VirtualBox, Debian telepítés

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Objektumorientált tesztelés

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely

BEVEZETÉS Az objektum fogalma

NetWare 6 technikai áttekintés 2. rész


Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

Novell GroupWise levelező rendszer alapok Kiadványunk célja, hogy a Nemzeti Közszolgálati Egyetemen használt Novell GroupWise (a továbbiakban GW)

Adatbázisok I Adatmodellek komponensei. Adatbázis modellek típusai. Adatbázisrendszer-specifikus tervezés

Készítette: Citynform Informatikai Zrt.

SmartLoop Analóg Tűzjelző Központ. Felhasználói leírás

Matematikai alapismeretek. Huszti Andrea

KIVÁ-s társaságok kezelése az NTAX-ban

A nemzetgazdasági miniszter /2012. ( ) NGM rendelete

1. BEVEZETÉS A RENDSZER ELEMEI, ARCHITEKTÚRÁJA... 5

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Operációs rendszerek. Holtpont

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Újdonságok az ArchiTECH.PC V es verziójában

I. Általános rendelkezések

Tartalom. Operációs rendszerek. Precedencia. 3.2 Szinkronizáció. 3.1 Folyamatokból álló rendszerek. Együttműködő folyamatok használatának indokai

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Processzus. Operációs rendszerek MINB240. Memória gazdálkodás. Operációs rendszer néhány célja előadás Memóriakezelés

Debreceni Egyetem Matematikai és Informatikai Intézet. 13. Védelem

Kölcsönös kizárás, atomicitás, szemafor.

Operációs rendszerek. A Windows NT felépítése

NETLOCK SIGN szolgáltatás Rendelkezésre állási Szabályzata

Programozási nyelvek Java

Szervlet-JSP együttműködés

Programozás 5. Dr. Iványi Péter

Bevezetés a C++ programozási nyelvbe

5 HOZZÁFÉRÉS-VÉDELEM. A fejezet VIDEOTON fejlesztési dokumentációk felhasználásával készült

Meghajtók Felhasználói útmutató

Dr. Pétery Kristóf: Word 2003 magyar nyelvű változat

iseries Access for Windows: Adminisztráció

Az Oracle rendszer komponensei

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

Főbb jellemzők INTELLIO VIDEO SYSTEM 2 ADATLAP

FAX Option Type FAX Option Type 2027 Felhasználói kézikönyv Faxkézikönyv <Speciális funkciók>

Komponens modellek. 3. Előadás (első fele)

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

SZÁMÍTÓGÉPES DÖNTÉS ÉS MUNKATÁMOGATÁS INTEGRÁLT RENDSZERBEN

2.1.A SZOFTVERFEJLESZTÉS STRUKTÚRÁJA

Dr. Pétery Kristóf: AutoCAD LT 2007 Fóliák, tulajdonságok

Verkehrsmeldungen am UML

Informatika szintmérő-érettségi tételek február

Operációs rendszerek Microsoft Windows 2000

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Kitöltési útmutató a MEC pályázati űrlaphoz

Szoftveripar és üzleti modellek

Bevezetés. A WebAccess használatának bemutatása előtt néhány új funkció felsorolása következik:

Bánsághi Anna

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

VISZONTELADÓNAK A TELJES FEL NEM HASZNÁLT CSOMAGOT A SZÁMLÁVAL EGYÜTT.

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Tarantella Secure Global Desktop Enterprise Edition

Adatbázis-kezelő rendszerek alkalmazása. MongoDB beadandó feladat Programtervező informatikus szak

Átírás:

Szálak szinkronizálása (Ro- Sincronizarea threadurilor) A gyakorlat célja: Megismerkedni a szálak szinkronizációs metódusaival és alkalmazásuk a Windows környezetben. Elméleti bevezető: Szálak szinkronizálása: A többszálú programozás majdnem olyan, mint a szekvenciális programozás, az egyetlen eltérés abból adódik, ha szükséges megosztott erőforrások, vagy más szál szolgáltatásainak használata amikoris szükséges szinkronizáció használata. Szemafor (Semafor - Semaphor) A szemafor a folyamatok és szálak szinkronizálására volt bevezetve Dijistra által, amely a közös erőforrások védelmét kritikus szekciók és kizárólagos hozzáféréssel biztosítja. Formálisan a szemafort egy (v(s),c(s))párossal lehet definiálni ahol a v(s) a szemafor értéke, ami egy egész érték és annak az iniciális értéke a v 0 (s) és a c(s) a várakozási listát jelöli és referenciákat tartalmaz a folyamatokra és szálakra, amelyek az s szemaforra várakoznak. Kezdetben ez a lista üres. Két atomikus (oszthatatlan művelet, amit megszakítások sem szakíthatnak meg) műveletet definiálunk a szemafor kezelésére: P(s) és V(s) (WAIT és SIGNAL). A P(s) művelettel csökkenteni tudjuk az s szemafor értékét egyel és a P(s)-t meghívó szál (A) a megkapja a hozzáférést a védett erőforráshoz. v(s)=v(s)-1; if v(s) < 0 Állapot(A) := VÁR; c(s)<==a; átadjuk a vezérlést a ÜTEMEZŐ-nek másképp átadjuk a vezérlést az A-nak Az A szál által végrehajtott V(s) művelet növeli a szemafor értékét eggyel és felszabadítja a használt erőforrást.

v(s)=v(s)+1; if v(s) <= 0 c(s)==>b; Állapot(B) := KÉSZ; átadjuk a vezérlést a ÜTEMEZŐ-nek másképp átadjuk a vezérlést az A-nak A szemafor iniciális értéke a v 0 (s) jelentős mert itt határozzuk meg, hogy hányan férhetnek hozzá egyidejűleg a kritikus szekció által védett erőforráshoz. Mutex változó (mutual exclusion) Több szál által használt osztott erőforrások védelmére alkalmas eszköz. Koncepcionálisan a mutex egy bináris szemafor. Segítségével implementálják a kritikus szekciókat és a monitorokat (későbbiekben tárgyalunk róluk). A mutexnek két lehetséges állapota van: lezárt (0) egy szál tulajdona Soha sem lehet egyszerre több szálnak a tulajdona. Ha egy szál egy lezárt mutexet szeretne megkapni akkor várnia kell amíg azt felszabadítja a foglaló szál azt felszabadítja. nyított (1) egyetlen szálnak sem a tulajdona Lehetséges műveletek egy mutexen: Inicializálás (statikus vagy dinamikus) m szemafor, v 0 (m)=1 lezárás (hozzáférés igénylése a védett erőforráshoz = mutex igénylése) P(m) nyitás (felszabadítja az erőforrást) V(m) megsemmisítése a mutex változónak megsemmisítése az m szemafornak Feltételes változók A feltételes változók szinkronizációs és kommunikációs objektumok aa egy feltétel teljesülésére várakozó szál és feltételt teljesítő szál között. A feltételes változóhoz hozzá van rendelve egy: predikátum a feltétele aminek teljesülnie kell

mutex változó - mutex változó biztosítja hogy a feltétel ellenőrzése és a várakozás vagy a feltétele ellenőrzése és teljesülésének jelzése atomi műveletként legyen végrehajtva. Lehetséges műveletek egy feltételes változón: Inicializálás - statikus vagy dinamikus Várakozás (WAIT) a szál várakozik amíg kívülről jelzik a feltétel teljesülését Jelzés (NOTYFY) Az aktuális szál jelez az összes szálnak akik várják feltétel megvalósulását Megsemmisítés Ellenőrzési koncepció (Conceptul de monitor - Monitor concept): A monitor objektum egy több szál által használt eljárás nem párhuzamos végrehajtását teszi lehetővé. Ötvözi az objektum orientált programozást a szinkronizációs metódusokkal. A monitor objektum áll: 1. osztott adat 2. ezeket az adatokat feldolgozó eljárások 3. monitort inicializáló metódusokat Másképp: mindegyik eljárás halmazt egy monitor kontrolál. A többszálas alkalmazás futásakor, a monitor egyetlen szálnak engedélyezi egy adott időpontban az eljárás végrehajtását. Ha egy szál éppen egy monitor által kontrolált eljárást akar futtatni akkor az lefoglalja a monitort. Abban az esetben ha a monitor már foglalt akkor várakozik amíg a monitort lefoglaló szál befejezi a adott eljárás végrehajtását és felszabadítja a monitort. Kritikus rész és erőforrás, kölcsönös kizárás (Sectiune si resursa critica Critical resurses and section, mutual exclusion): Két szál kölcsönös kizárása kifejezi hogy egy időben csak az egyik szál futhat Kritikus szekció azt jelenti, hogy egy időben csak egyetlen szál hajthatja végre Kritikus erőforrás jelzi, hogy egy adott erőforráshoz egy időben csak egy szál vagy folyamat férhet hozza. Egy jól definiált kritikus szekció a következő tulajdonságokkal rendelkezik: Egy adott időpontban egyetlen szál található a kritikus szekcióban, bármely más szál ami hozzá akar férni a kritikus részhez, csak azután tud ami után a szekciót lefoglaló szál befejezi annak futtatását. A szálak relativ sebességei nem ismertek Bármely szál leállítása csak a kritikus szekción kívül történhet Egyetlen szál sem fog végtelen időt várni a kritikus részben Legegyszerűbb megvalósítása egy kritikus szekciónak egy bináris szemafor segítségével lehetséges.

Szinkronizáció megvalósítása Windows környezetben A szinkronizációs és kommunikációs mechanizmusokat a Win32API- keresztül lehet elérni. Ilyen szinkronizációs objektumok szemafor, események, mutex változók, kritikus szekciók. Ezeknek az objektumoknak két állapotuk van: jelzet feltételezi bizonyos feltételek teljesülését és jelzi a várakozó szálaknak ennek a teljesülését; nem jelzett. Várakozásos függvények A legegyszerűbb kommunikálás a szálak között a szinkronizációs objektumok segítségével történő jelzések. Ilyen objektumok a szemaforok, események és mutex változók. Ezek az objektumok úgy vannak tekintve az Windowsban mint amelyek jelzett állapotba fognak kerülni. A várakozásos függvények a következő képpen modósítják a szinkronizációs objektumok állapotát: ha szemafor akkor ennek az értéke egyel csökken és nem jelzett állapotba kerül. Ha mutex akkor nem jelzett állapotba kerül. Win32API várakozós függvényei: WaitForSingleObject és WaitForSingleObjectEx a bemenő paraméterei egy szinkronizációs objektum kezelő (Handle). Felfüggeszti a szál futását amíg az objektum jelzet állapotba nem kerül. Lehetséges a várakozási idő beállítása is ha az adott paramétere különbözik INFINITE -től. SignalObjectAndWait Egy objektumnak jelzettre modósítja állapotát és várakozik hogy egy másik objektum állapota jelzett legyen. WaitForMultipleObject és WaitForMultipleObjectEx Egy szinkronizációs objektum mező a bemenő paramétere. És a visszatérítési értéke az objektumok állapota ha legalább egy jelzett objektumunk van vagy a várakozási idő lejárta. Szemfor CreateSemaphore ReleaseSemaphore Mutex változó inicializásás

HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpmutexattributes, // mutató a biztonsági tulajdonságokra BOOL binitialowner, //Mutatja hogy a mutex változó a szál tulajdona vagy sem LPCTSTR lpname //mutató a mutex változó nevére ); Hiba esetén a függvény NULL-t térít vissza másképp a mutex kezelőjét. lezárás WaitForSingleObject(hMutex, INFINITE); nyitás ReleaseMutex(HANDLE hmutex); megsemmisítése a mutex változónak CloseHandle(hMutex); Kritikus rész: Kritikus rész típusú változó deklarálása: CRITICAL_SECTION CritikusRészVáltozóNeve; InitializeCriticalSection((& CritikusRészVáltozóNeve); Használata: EnterCriticalSection(& CritikusRészVáltozóNeve); Kritikus rész törzse LeaveCriticalSection(& CritikusRészVáltozóNeve);

Feladat: 1. Hozzunk létre egy szervert amely, egy adatszórást valósít meg a kapcsolódott kliensek felé. Kérdések: 1. Szükséges-e a klienseknél több szál, ha megakarom valósítani az egyidejű írást és olvasást? Könyvészet: [1]. Florian Mircea Boian : Programare concurenta pe platforme Unix, Windows, Java Albastra kiadó 2002