A vizsga szóbeli, a tételsr 2009-ben az alábbi: 1. Technlógia, kmplex szftverrendszerek alapprblémái, szftverminőség, fejlesztési flyamat és kézbentartása. Diszkrét rendszerek leírásának nehézségei, hibakezelés, tesztelés prblémái. Atechnlógia:műveleteksrzata,amelyegyadttkezdetiállaptbóladtterőfrrásk felhasználásávalmegismételhetőmódnegykívántvégállapteléréséhezvezet. Erőfrrásk:infrmáció,anyagk,idő,munkaerő,szakértelem,eszközök pénz(többékevésbélehet knvertálni) Beágyazttszftver(firmware):skszempntbóleltératöbbiSWterülettől: Szrsinfrmációskapcslatbanállakülvilággal Humáninterfész:beágyazttSW rendszerekbenskkalváltzatsabb Kmmunikációsinterfész(hálózat) Érzékelésésbeavatkzásafizikaikörnyezetbe Biztnságkitikuskörnyezet(járműipar,energetikastb) Alacsnyfelhasználóihibatlerancia Kívülrőllátszólagegyszerűműködésjellemzőrájuk Szftverésannakkörnyezetestabil Árérzékeny:magaazeszközlcsó,ahibajavításadrága(visszahívás) Eltérőfejlesztésimódszerek HgyanállunktechnlógiávalSW esterületen? ASWterületvisznylagúj Nagynskszínű Nagynflexibilis látszólagahibásdöntéskisebbkártkzvnemkzkárt SWegyrefntsabb(kellatechnlógia) EgyretöbbéskritikusabbfeladattbízunkSW re Anépességegyrenagybbrészeleszprgramzó,deaképességekadttak anyiditcanwritecde Képességésmtiváció:kb.6hónapalattegyadttterületenprfilehet Kmplex szftverrendszerek alapprblémái, szftverminőség: Kmplexrendszerek,melyektöbbnyirehierarchikusfelépítésűek Rendszer alrendszer..alrdsz elemikmpnens errekellfelbntaniaprblémát Avilághierarchikusviselkedésetermészetesemberiviselkedés Azelemikmpnensekhalmazaabsztrakciófüggő:nézőpntéscélkérdéseazelemikmpnens pl.:adatbázisnál:ahasználórekrdkat,aprgramzói/oműveletetlát
Akmpnensen(alrendszeren)belülikapcslatkerősebbek,mintazaznsszintenlevő kmpnensekköztikapcslat.pl.:tanszékéstanszékközöttkisebb,minttanszékenbelül az alrendszerekfelismerésétsegíti,akapcslatkerőssége Akmplexrendszerektöbbnyirenéhányalapvetőkmpnensváltzatskapcslatábólépülfel ezértkmplexpl.:számítógépeshálózat,internet(3kmpnens:végeszköz,hálózati eszközök/ruter/,hálózatikapcslatk) Akmplexrendszerektöbbnyirenemelőzményeknélküljelennekmeg,hanemegyrenövekvő kmplexitásúelődökönkeresztülfejlődik/evlúció/ 0 rólfejlesztettkmplexrendszerektöbbnyireműködésképtelenek (evlutinnt revlutin) bekelljárniafejlődésifkkat inkrementálisfejlesztés:képességben,méretben, teljesítményben,időben KmplexSWrendszerekkelkapcslatsprblémáktöbbnyire Okk: A,Amegldandóprblémabnylultsága B,Afejlesztésiflyamat(prcess)kézbentartásánaknehézségei C,ASWeszközökrugalmassága D,adiszkrétidejűrendszerekviselkedésénekleírásinehézségei A,Amegldandóprblémabnylultsága felhasználó/megrendelőmegadegykövetelményt(requirements) nagyszámú bnylult ellentmndóak inknzisztencia:követelményekkövetkezményeiparadxntkznak nehezenszámszerüsíthetőésmérhető megrendelőésmegvalósítóköztiellentét megrendelősajátszakterületéneknyelvénfgalmazzamegkövetelményeket amegrendelőmagasemtudjamitszeretne,menetközbeniterálnak amegvalósítóprgrambangndlkdik,aszámítógépekvilágábanél beflyásljákkrábbitapasztalatai azajó,haamegrendelőésmegvalósítóegyüttválasztjákkiaspecifikációt
Specifikációhasználatakészprgramesetén: javítás/karbantartás:hiba(bug)specifikációtóleltérőműködés ingyenjavítás fejlesztés(featureupdate):új,spec bennemmegadttfunkció pénzértcsináljuk knzerválás:swkörnyezeteváltzikmeg,amiaváltzatlanswmelletthibákatkz(win XP nismenjen) pénztkérünkérte B,Afejlesztésiflyamat(prcess)kézbentartásánaknehézségei hsszú,bnylultprgramkírásacsakakezdőketvillanyzzafel akmplexitásésafejlesztésiflyamathierarchikusfelépítésekézbentartható csakafeltétlenülszükségesrészleteketkellmegismerni alrendszerekköztiinterfészekfntsak egyszerűségre,rövidségretörekvés(kiss:keepitsimplestupid) előregyártttelemekhasználata/elemikmpnens/ SWkmpnensek,példaprgik,minta(pattern):tervezésiv.architektúrálisminta mdularizált,újrafeldlgzhatóelemekbőlvalóépítkezés:feladatkszétsztásafejlesztőkközött inkrementálisfejlesztés kritikusrészekkelvalóismerkedés funkcióibaninkrementálisfejlesztéséstesztelés:unitteszt aspektusrientáltprgramzás:funkcináliséssecurity:emberihibákcsökkentése C.Szftvereszközökrugalmassága Amegfelelőabsztrakciósszintmegtalálása feladattamegfelelőeszközökkel Alegalacsnyabbabsztrakciósszintagépiutasítás Prgramzásinyelv,környezeteltérőabsztrakciósszintetteszlehetővé Magasabbabsztrakciósszintektöbbnyiremagasabbfutásiidejűerőfrrásigénnyeljárnak Nemcsakafutásiidejűerőfrrás felhasználásazérdekes/labview C/ FejlesztésierőfrráskésaSWminőségiselőtérbekerülhet D.Diszkrétidejűrendszerekleírásánaknehézségei SW: Állapttere: Adatelemek+inputk Nbit Műveletek/állaptátmenetek/:azállapttérbenmilyenműveleteklehetnek Pl.:1.fkúszűrő,32bitbelsőáll,16bitbemenet 2^16*2^32állapt 2.fkúszűrő 2^16*(2^32)^2lehetségesállapt azállapttéróriásiésarajtavégezhetőműveletekbnylultak
Tesztelés,Hibakezelés: állaptszámnő műveletekszámaexpnenciálisannő Aprgramkműködésénekmegértéseéstesztelésenagynnehéz Azösszeslehetségesállaptraazösszeslehetségesállaptátmenetettesztelnikell Akérdésatesztlefedettség Beágyazttrendszerek: Abeágyazókörnyezetmdelljenehezenelőállítható:nemcsakajóműködés,hanema rsszműködésmdelljévelisrendelkeznünkkell Akódnagynnagyrészehibakezelés/70 90%/:hibakezelőkódtesztelésenehéz,merta hibákelőállításanehéz,vagylehetetlen/cpujó e,mjó e/ E.W.Dijkstra/E.W.D/: Onthecruentlyfreallyteachingcmputerscience nehézasw sdlgkktatása SW sfejlesztés:swéletciklusmdell/vízesésmdell/: Elemzés/MIT?/ Tervezés/HOGYAN?/ Implementálás Üzemeltetés Intuíció(mikrazinfrmaciszerzesnemagndlkdaseskvetkeztetesutjantrtenik)elkerülésea flyamatban/perszeelemzéstervezéssránkell/ Asrrendfejlesztéskr:Üzemeltetés implementáció tervezés elemzés???? Azimplementációabsztrakciósszintjénekkiválasztása:
2. Prgramzási paradigmák, prcedurális és deklaratív megközelítés, prcedurális nyelvek fejlődése, strukturáltság megjelenése. Azimplementációabsztrakciósszintjénekkiválasztása: Prgramzásiparadigmák: Aprgramzásalapvetőmódja,stílusa,prgrambelsejénekdefiniálása Egyidőben,egyprgramzásifelületbenakártöbbparadigmáthasználhatnak/ugyanazt anyelvethasználva/ Paradigma: Prcedurálisprgramzás/imperatívprgramzás/: HOW? nagybbprblémátrészfeladatkrabntunk elemiutasításk:függvénvek függvényekethívnak Matematikaifüggvény Aprblémamegldásáhzszükségeslépésekmegadásaafeladat Gtszáműzése Mdularitás,strukturáltság,kódújrafelhasználás:/skalár,vektr,mátrix/ CPUnagynmélyenisezttámgatja/imperatív/:megmndjukaCPU nakalépéseket Objektumrientáltprgramzásisennekakiterjesztése Deklaratívprgramzás:nemkellmegadnunkhgyancsakazthgymit WHAT? Frmálislgikátésakövetkeztetésekethasználja Afeladatmegldásánaklgikájátadjukmeg,amegldásrészletei(vezérlésiszerkezetek cntrlflw)nélkül Pl.:bíróeldöntiegylépésszabálytalan e,c cmpiler,adatbáziskezelőkmtrja Szabálykatértelmeziésvégrehajtjaőketaprcedurálisanmegírtmtr Kiegészítőparadigmák: 1. párhuzamsprgramzás 2. eseményvezéreltprgramzás Prcedurális/imperatívprgramzásinyelvekfejlődése: 0.generáció:bináriskód:gépiutasításkbinárisbevitele 1. generáció/54 58/:matematikaikifejezésekkezeléseFrtranI,Algl58,gépitípusk használhatók 2. generáció/59 61/:adattípuseljárásfvfgalma:FrtranII,Algl60 3. generáció/62 70/:2.generációsnyelvekfinmítása,összetettadattípusk:Algl68,Pascal
Generációsrés:PDP 11:könnyebbszámítógéphzzáférés,evlúciósskszínüség,Cnyelv, UNIXOS 4. generáció:bjektumrientáltnyelvek:smalltalk,c++,java,c#,deklaratívnyelvek:sql, Prlg 0:nincsstrktúra 1 2:adattípus+műveletek 3:mdularitás 4:adatésrajtavégezhetőműveletekszrsegymásbakapcslása
3. Objektumrientált prgramzás, sztály és bjektum visznya, bjektum típusa, az infrmáció rejtés megvalósulása bjektumrientált prgramzás srán, az bjektumrientáltság ismérvei. Java példák. OOP:ObjectOrientedPrgramming A prgramzási feladat megldása lyan módn, hgy a létrejövő OOP együttműködő bjektumk összessége. (magaisegybjektum) Tipikusemberigndlkdás,avilágrólalktttképünkbjektumrientált. - Objektum = tulajdnságai + rajta végezhető műveletek - bjektumk tartalmazhatnak bjektumkat (tulajdnság is lehet bjektum) - bjektumk hivatkzhatnak egymásra, és azk is másra referencia pinter memóriaterületremutatóhivatkzás Egyesprgramzásinyelvekbenapinterareferenciaalkalmazhatómegvalósítása. (C/C++,ésközösmemória) JAVA:referenciáhznemcsatlhatómemóriaterület pl.:javareferencia,url - Az bjektumk lehetnek hasnlóak általánsításésspecializációfgalmaazbjektumkközött (emberek/fglalkzásk) absztraktésknkrét ideszeretnénkeljutni AzbjektumSWszempntból: - a prgram alapköve független összetevők (lehetőleg) rejtett belső állapta van (tulajdnság) saját viselkedésük, működésük van külső bjektumk hatnak rájuk (belső állapt + váltzók) - Az bjektumkat egy vagy több sztályba tartzónak tekintjük sztály (class): absztrakt adattípus, melynek példánya (egyede, instance) az bjektum tervezési idejű fgalm futási idejű fgalm Az bjektumnak lesz élettartama is! Definiáljuk az sztályt: - megadjuk az bjektum állaptát leíró adatszerkezetet tulajdnságk listája - megadjuk az bjektumn végezhető alapműveleteket metódusk
Az bjektumrientáltság 3 fő vnása (ismérvei): - (1) infrmáció rejtés / összefglalás encapsulatin vagy infrmatin hiding - (2) öröklődés (inheritace) az sztályból létrehzunk újabb, speciálisabb sztálykat - (3) plifrmizmus (plifrmism) rajzelemek mzgatása rajzelem pnt vnal stb. rajzelemekből álló listán mindegyik mve(x,y) metódusa, megldható. pl. 2D rajzelemek sztály - mve (dx, dy) metódus - származtatva: pnt, vnal, kör : ugyanez a metódus (mve) meglesz ezekkel a paraméterekkel - legyen egy lista: rajzelem bjektumkat tartalmazó lista (illetve az ezekre mutató pintereket): pnt, pnt, vessző, kör - ha egy iterációval végigmegyünk ez a listán, akkr mindig az bjektumnak meghívódik a mve metódusa - a beágyaztt C++ nyelvekben nincs plimrfizmus, mert futásidejű következményei lehetnek - a C egy nagyn veszélyes nyelv :) (1) infrmáció rejtés: - KIEGÉSZÍTENI A TIPUSOS NYELVEKKEL. - a másik az bjektumt használó prgramzó elől - a kmplexitás csökkentése - interfészt definiálk public, prtected, private senki a metódusra a hzzáférés megadható (snpe), friend módsító: a prtectedet teszi elérhetővé - a mdern prgramzási nyelvek kivétel nélkül típussak adattípus: - értékkészlet lehetséges értékek - jelölés hivatkzás szintaxisa - műveletek típusn belül, v. más típuskba vezető knverzió - frdítóprgram: tárterület fglalás: - explicit típusdeklaráció (C/C++, JAVA) - dinamikus típus knverzió PHP ellenőrzés szigrúan típuss nyelvek TP? gyenge ellenőrzés PHP C/C++/JAVA autmatikus knverzió Az bjektum típusa az sztály + minden felette álló!!! többféle típusunk van - A prgramzó szempntjából is fnts az sztály és a típus magyar ntáció a váltzó nevében a típus legyen benne JAVA PÉLDÁK
4.Objektum állapta, viselkedése, aznsság, értékadás, élettartam, interfész, bjektumk közötti kapcslatk, láthatóság, az bjektumk közötti kmmunikáció. Sablnk. Java példák. (élettartam után bjektum tárlási módk) Azbjektumrendelkezik: Belsőállapt/tulajdnságk,attributumk/ Viselkedés/metódus,tagfüggvény/ Élettertam Interfész 1. Belsőállapt: Típusssztály ésegyedváltzók Osztályváltzó:azadttsztályhztartzóösszesegyedbenugyanazamemóriaterületvan jelen staticajava ban:nemegybjektumhztartznak,hanemazegészsztályra közösek(pl.:dlgzóksztályábananyugdíjkrhatár) sztályglbálisváltzó:pl.:adttsztálybatartzóelemekmegszámlálása knstans,amiidőközbenváltzik Egyedváltzó: mindenegyedbenkülönmemóriaterületvanjelen(egyedspecifikus) jellegzetesenezthasználjuk aznsságvizsgálat: névszerinti(ahgyhívm):ritkántámgattt referenciaszerint == perátr:ugyandamutatnak e értékszerintiaznsságvizsgálat === perátrvalahl:akétbjektum tulajdnságaiaznsak e Mivanha: Atulajdnságmagaisbjektum Atulajdnságmagaisreferencia nemegyértelműaművelet (kereszthivatkzásk),láncltlistánálaprgramzódöntiel,milyen mélységigvizsgálunk plimrfizmuskell Cmpare(bj)plimrfizmus Azértékszerintiaznsságműveletnemegyértelmű 2.Viselkedés: Típusssztályésegyedmetódusk/módszer,tagfüggvények/ Osztálymódszer: Static ajava ban Csaksztályváltzókatésmássztálymetóduskathasználhat(nemhasználjukgyakran) Egyedmódszer:egyed éssztályváltzókathasznál.megvanhatárzva,hgyametódusmelyik adatterületenfutle. verlading:többértelműség(ugyanlyannevűmetódus) amódszereketa nyma aznsítja ametódusnyma=avisszatérésiértéktípusa+metódusneve+paramétertípusa
3. Élettartam: azbjektumkategyspeciális knstruktr nevűmetódussalhzzuklétre.fajtái: defaultknstruktr:nincsparamétere cpyknstruktr:paraméterénektípusaaznsalétrehzandóadatktípusával(deep cpy) egyébparaméterezettknstruktrk fntskérdés,hgymitörténikaszülősztálykknstruktraival,lefutnak emaguktól,megkell hívniőket,mitörténiktöbbszörösöröklődésesetén bjektumkmegszüntetése: explicitfelszabadítás:c++ destruktr freeutasításhatásárakerülmeghívásra hatékny,egyszerű nagynveszélyes,skhibalehetőségvan túlkrán,vagynemjóbjektumtszabadítunkfel elfelejtettünkfelszabadítanivalamit(memryleak) autmatikusszemétgyűjtés:java amemóriaautmatikusfelszabadításaanemhasználtbjektumkesetén az összesrátörténőhivatkzásmegszűnik referencecuntnyilvántartása erőfrrásigényes,valósidejűkörnyezetbenazalkalmazásamegkérdőjelezhető finalize()metódus(java):lelehetzárnidlgkat,mielőttazbjektum megszűnne megszüntetésbeágyazttésbiztnságkritikusrendszerekben: halehet,egyiketsehasználjuk(tervezésiidőbenmegadhatóamemóriafelhasználás) explicitmegldáskimerítőtechnikátigényel autmatikusszemétgyűjtésmégnyitttkutatásiterület Azbjektumkskesetbenelválhatnakazőketlétrehzóprgramktól: bjektumkperzisztenstárlása:mentés/visszaállítás/adatbázis bjektumtvábbítása:cpy/paste,hálózatimáslás,elérés(architektúráliskülönbségek) Tranziensbjektum:aprgramelindulásátólamegszűnéséigél Perzisztensbjektum:túlélhetiazőtlétrehzóprgramtvagyátkerülhetmásprgramba. verziókövetés,platfrm függetlenség,típushelyeshelyreállítás(újwrd,régiwrd)
ObjektumTárlásimódk: bjektum rientáltadatbáziskezelő relációsadatbáziskezelő tábla=sztály(adttverziószámú) szlp=tulajdnság(típuss) sr(rekrd)=egyed referencia=idegenkulcs/másiktáblábanlévőkulcs/(másiktáblábanadttsrravaló hivatkzás) XML lásdszftvertervezésvagyweb:definiálunkegynyelvet,amibeneltudjukmenteniaz bjektumt(xml,xslt,xpath) bináriskódlás:binaryencdyrube(ber) Felhasználás: serialize,deserializeinterfész:srsbyte streammélehetalakítanimegvisszaazbjektumt JAVA:implementsserializable C++:többszörösöröklésselérikel,serializableabsztraktsztálybólörökléssel cnvertt/frmxml()interfész(sajátmagamnakkellmegírni) 4.Interfész:bjektumrendelkezzenmetódussalésműködéssel rákényszerítemaprgramzótezen interfészmegvalósítására.pl.:bjektumtfájlbanelakarkmenteni serializerendesenletárlja. azbjektumbóllétrehzttegyedegyvagytöbbjóldefiniáltinterfésztnyújtazőthasználni kívánóbjektumkfelé hzzáféréstbeállíthatjuk:public,prtected,private kérdés:egysztályrahgyantudunk rákényszeríteni egyinterfészt?pl.: C++:többszörösöröklődés,azinterfészmegadásaabsztraktsztályként(direktbenem lehetpéldánysítani) JAVA(csakegyszeresöröklődésvan):interfészekdefiniálása:impements interface jbbanszétvanválasztvaazinterfészésazsztály,azezutánírtinterfésztazsztálynak megkellvalósítani csakpublikusabsztraktfv ekettartalmaz nemlehetpéldánysítani Objektumk/sztálykközöttikapcslatk: kmplexprblémahierarchikusdekmpzíciója együttműködőbjektumkéntképzeljükelamegldást Kapcslatk: 1.tartalmazás(aggregatin): részegész(kutya lába)
2.társítás(assciatin): lazakapcslat(kutya harap pstás) 3.öröklés(inheritance): általánsítás/specializáció 3.Öröklés: általánsítás/specializáció sztálykközöttértelmezhetőkapcslatkövetkezményekkelazegyedre AörökölB től: AalsztályaB nek(descendant) leszármaztt BszülősztályaA nak(superclass) hierarchiatetejénabaseül(szűznemzésseljönlétre) öröklésihierarchia:többnyiregráfvagyfa,haegyszeresöröklésvan többnyireazalsólegspeciálisabbsztálybólhzunklétreegyedeket,vagyezeket specializáljuktvább(ezekbőlszármaztatunkleújsztálykat) absztraktsztály:nemtudunkegyedeketlétrehzni:haebbőlleszármaztatksztályt, csakakkrtudkegyedeketlétrehzni alsztályörökliaszülősztálytulajdnságaitésviselkedését azalsztályelfedheti(felüldefiniálhatja)aszülősztálytulajdnságaitésviselkedését többnyirevanlehetőségaszülőtulajdnságainakésviselkedésénekelérésére egyadttsztálynaktöbbaznsnevűmetódusalehet(verlading) metódusnymánakkellkülönböznie perátrverlading:értlemezhetőségpl.:vektr mátrix,deember?? egyszeresvagytöbbszörösöröklődés:egyszeres(c++:rszlánmacskaféleésragadzóis), többszörös(java:öröklődésihierarchiafa) Sablnk: tipikusprbléma:hasnlóviselkedés(pl.:fifo),különbözőtípusúsztálykra.pl.:int etkezelő FIFOésadtt(detetszőleges)sztálytkezelőFIFO sabln Osztály1,cmpiler Osztály2:Osztály1kezelésére egyed/sztály2ből/ pl.:fifosabln int FIFOsztályintkezelésére FIFObjektuminttárlására pl.:tárlásisztályk(cntainerclass) C++:standardtemplatelibrary JAVA:Generics 1.Összetétel,tartalmazás(aggregatin): irányítttreláció,azegésztartalmazzaarészt értékvagyreferenciaszerintlehetcsprtsítani: érték:fizikailagegymásbaágyaztttárterület(memória) együttjönneklétreésszűnnekmeg referenciaszerint:egészegyreferenciáttartalmazarészre
különéletetélarészésazegész,deazegészkezeliarészt 2.Társítás(assciatin):kutyaésapstás 2irányúösszeköttetés:milyenpstás szigrúannemtartalmazás:azbjektumkkülönéletetélnek tipikusanreferenciákkalvalósítjukmeg számsság:jellegzetes: egy egy:férj feleség egy több:szultán több több:rgia
5.Párhuzams eseményvezérelt rendszerek, alapfgalmak, ütemező és feladatai, ütemezési algritmusk. Ütemezés hardware és sftware megvalósítása. Java példák. 04.01.text fajl Klasszikusprgramzás(szekvenciálisprgram): szekvenciálisan (egymás után végrehajttt) utasításk srzata. a prgram utasításainak végrehajtási srrendjét a vezérlési szerkezetek önmagukban definiálják a prgram nem mindig csinálja ugyanazt, az adatktól is függ a működése sk prbléma nehezen ldható meg így az erőfrráskn sztzni kell, az erőfrráskkal gazdálkdni kell nagyn gyakran valójában párhuzamsan végrehajtandó feladataink vannak A világ párhuzams eleve sk feladat párhuzams. Ez részfeladatk frmájában kerül megfgalmazásra,ésnehezenfgalmazhatómegszekvenciálismódn. Alapfgalmak: szekvenciális prgram / rendszer tudjuk mi ez párhuzams / knkurens prgram / rendszer: lyan rendszer vagy prgram, amelyben több, egymással együttműködő részfeladat egészeként valósítjuk meg a teljes feladatt. Feladat/részfeladat:Task/subtask: A párhuzams rendszerben egymással párhuzamsan futó, önmagában szekvenciális prgramrészleteket, amelyek egymás nélkül többnyire értelmes működésre nem képesek, részfeladatknaknevezzük. Arészfeladatkhzvégrehajtóegységetkellrendelnünk: Nrészfeladat 1végrehajtóegység Nrészfeladat Mvégrehajtóegység(DualCre ) Vagyis a szekvenciális részfeladatk együtt ldják meg a teljes feladatt, eközben kmmunikálnak egymássalésbeflyásljákegymásműködését,azazegyüttműködnek. eseményvezéreltség (event driven): A prgram lefutása függ a prgram működése srán lezajló történésektől (event).
esemény / jelzés, event / signal: ezekre az eseményekre reagál a rendszer megváltzik a működés azns infrmációs kapcslat. (fntsaválaszidő!(rtrendszerek)) Külső esemény: pl. user input, (A/D) vagy kmmunikációs interfészen küldés / fgadás Belső esemény: A prgram belső állaptában lezajló váltzásk, explicit eseményküldés ( send_event() ) Az esemény többnyire egy összetett adattípusként jelentkezik a SW-en belül (struct / bject) Erőfrrás:mindenlyaneszköz,amirearészfeladatnakfutásközbenszükségevan.Alegfntsabb:CPU. Kellmég:memóriaésannaktartalma,illetvekülönbözőperifériák. Közöserőfrrás(sharedresurce):Egyidőbentöbbpárhuzamsanfutórészfeladatnakisszükségevan rá. Az ilyen erőfrrásn sztznak. Többnyire egy, vagy maximum megadtt számú részfeladat tudja helyesenhasználni. Egyfelhasználó:printer,srsprt,bus,MEMírása Többfelhasználó:SCSI,SATA,HDD nélncq A rendszertervezőnek és a prgramzónak a legfntsabb feladata, hgy felismerje a közös erőfrráskat,ésbiztsítsaazknakahelyeshasználatát. Inknzisztens állapt lesz, mert a memóriát csak félig írtuk tele. Subtask2 rsszat lvas, rsszul fg működni.
Kölcsönös kizárás (mutual exclusin, MUTEX): annak a biztsítása, hgy a közös erőfrrást egy időben CSAK annyi részfeladat használja, amennyi mellett a helyes működés garantálható. többnyire a használt erőfrrást valamilyen módn lck-ljuk, lezárjuk. nem engedjük hzzáférni a többi részfeladatt Hgyan tudjuk megldani és milyen részletességgel ldjuk meg? mindenhl máshgy van (de csak kicsit ) Kritikus szakasz (critical sectin): a részfeladat azn kódrészletei, ahl biztsítjuk a kölcsönös kizárást egy biznys közös erőfrrásra a kritikus szakasz a közös erőfrráshz tartzik. Atmi művelet (atmic peratin): nem megszakítható művelet, amelyet a prcesszr egyetlen utasítással hajt végre. egyprcesszrs rendszerekben bármilyen műveletsrzat atminak tekinthető a műveletsr elején az IT tiltásával, majd a végén engedélyezéssel. Test and Set vagy Read Mdify Write mdern prcesszrkban utasítás prefixek alkalmazásával érhetünk el hasnló eredményt. a közös erőfrráskhz való hzzáférést (lck) atmi műveletekre fgjuk visszavezetni. Kmmunikáció:részfeladatkegymássalinfrmációtcserélnek(együttműködveldanakmegegyközös feladatt) ezelengedhetetlenfeltételeazegységbefglalásuknak közöserőfrrásknkeresztültörténik többnyirememóriaterületenkeresztültörténik,haazarchitektúralehetővéteszi denagynskfélemegldásvan Részfeladatkállaptai(taszktértalatta,tehátnemjb): FUT:Maxannyilehetahányvégrehajtóegységvan FUTÁSRAKÉSZ:csupánavégrehajtóegységhiányzikafutáshz,mindenmáserőfrrás rendelkezésreáll
ESEMÉNYREVÁR:CPU nkívülmáserőfrrásishiányzikafutáshz(pl.:másrészfeladatáltal használtközöserőfrrás) Azállaptátmenetiábrajellegzetes,szintemindenOS benmegtalálhatóbiznyskiegészítésekkel (extraállaptk,állaptátmenetek)(preemptívos ekesetén:fut Futásrakészátmenet) Végrehajtóegységekszáma? 2szélsőség sk végrehajtóegység és egy többnyire nehezen párhuzamsítható feladat (a feladatbólarészfeladatknemtriviálisanhatárzhatókmeg) Példa: High Perfrmance Cmputing: szuperszámítógépek, grid rendszerek,skmagscpu k,gpgpu(cudaopencl) Egy vagy több végrehajtó egység: egy párhuzams,vagy többé kevésbé jól aznsíthatórészfeladatk beágyazttrendszerek erőfrráskmegsztása A kihívás a párhuzams részfeladatk és az egész prbléma hatéknyéshelyesmegvalósítása Preemptívütemezés:Azprendszerelvehetiafutásjgátazéppenfutóflyamattól,és"futásrakész" állaptúváteheti.közbenegymásikflyamattindíthatel. Nempreemptívütemezés:Azperációsrendszernemvehetielafutásjgátaflyamattól.Aflyamat addigfut,amígazáltalakiadttutasításhatásáraállapttnemvált,azazcsakmagaaflyamat válthatjakiazújütemezést.(befejeződik,erőfrrásravagyeseményrevár,lemndafutásról) Ütemezés():afutásrakészrészfeladatkközülkiválasztaniafutórészfeladatkat nagynskféleütemezőalgritmusvan sft,hardütemezők statikusvagydinamikusütemezés nagynnagykmplexitásikülönbségek preemptív,nempreemptív, valósvnemvalósidejű azütemezőamunkájasránszükségesadatkatkülönbözőadatstruktúrákbantárlja leszmemóriaigénye AzadatstruktúrávalperálásamiattleszCPUhasználatais kntextustkellváltani,haegyújtaszkkerülütemezésre: ütemezőfutásaelőtt: lekellmenteniafutórészfeladatállaptát(kntextus) helyrekellállítanunkazütemezőállaptát ütemezőfutásaután lekellmenteniazütemezőállaptát helyrekellállítaniafutásrakiválasztttrészfeladatállaptát
Ütemezőválasztás: nincsuniverzálisütemezőalgritmus afeladatkismeretébenafeladatnakmegfelelőütemezésialgritmustkellválasztani alegtöbbbeágyazttperációsrendszererrelehetőségetad ütemezőisegylecserélhetőszftverkmpnens(mégwinxp benis) azütemezőlecserélhető,kibővíthető,vagymegkerülhető(intervalzerrtx:windwsbólvalós idejűütemezőtcsinál) Kérdések: késleltetés/válaszidő megszakításkésleltetés:interruptlatencyt~ms,dertos nél:~us annakingadzása(jitter) statisztikaijellemzők ütemezőésazidőkapcslata: ütemezőalgritmuskjelentősrészénekkövetniekellazidőt ütemezésifeladat(részfeladatkperidikus,vagyadttidőbentörténőfuttatása) időmérés,időtúllépésmeghatárzása HWidőzítő:megszakításperidikusan:HWütemező??? azegyiklegfntsabberőfrrás,amitazos benmegkellvalósítani ezutánazütemezőperidikusanfut fntsfunkció:virtuális(sw)timermegvalósításalehetségesígy egyidőzítőarészfeladatkszámára:kbmennyiidőtszeretnénekvárni virtuálisswtimernekvanperiódusideje~1 10ms(régebben20ms)=systemtick:ennyi időnkéntfutazosütemezője időszelet ha40ms takarunkvárni:vár4órajeletésaprgifutásrakészállaptbakerül nem tudjuk pntsan biztsítani mikr fgunk futni + jittere is van nem használható mindenre (lehet: passw megadására 10 sec e van vkinek, de pl nagy pntsságk elérésérenemjó)(egyláncltlistábanvannakrészfeladatkhwinterruptjönütemező jönéskiválasztjakifgfutni) Mittudunktenni,haennélrövidebbideigszeretnénkvárakzni? másütemezésialgritmustválasztunk:időalapúütemezéstválasztunk(sjf,srtf,hrr) aktívanvárakzni CPUciklusúvárakzás: azutasításvégrehajtásiidőváltakzhat bgmips cmpilerkiszedhetiazptimalizációtólfüggően timestampcunteralapú HWtimerszámlálója PentiumTimestampCunter
máshwinterruptalapúvárakzás azaktívvárakzástésamáshwalapúakatazütemezőbeflyáslja Mekkrasystemtickamegfelelelő? egyikldalrólminélkisebbfelbntástszeretnénk másikldalrólminélkisebb,annálnagybbazverhead hanemrealtimeinterrupttelfgadunkalkalmazásainkbanazgázlehetrealtimerendszerekben Mikrfutazütemező? havanóraütés mindenmáskülsőhwinterruptra belsőeseménylétrejöttekr közöserőfrrásfelszabadul egyrészfeladategyeseménytküld futórészfeladatvárakzóállaptbahelyeződik(erőfrrásrakezdvárni) futórészfeladatlemndafutásijgáról(yield) 04.08 TEXT fajl
6.Flyamatk leírásának eszközei, szálak, architektúrális és tervezési minták (általában és ebben a környezetben Hgyan tudunk párhuzams flyamatkat leírni szftverben - architektúrális minták. Párhuzamseseményvezéreltprgramzástámgatása: néhány kísérleti rendszertől eltekintve ugyanazkn az elveken alapulnak, hasnló funkciókat támgatnak. ugyanakkr az interfész és az interfész mögött elrejtett funkció sk esetben eltérő (kis mértékben) Tervezési/architektúrálisminta(pattern): újrafelhasználásszintjei: kódújrafelhasználás(kódvagylibraryhasználata) példaprgram ötletek,megldáskújrafelhasználásáthgyantudjukbiztsítani? tervezési / architektúrális minta: A szftverfejlesztés srán felmerülő prblémákra adhatóáltalánsmegldás.amintaleírásatartalmazza: 1. mintaneve 2. a minta céljának és alkalmazási környezetének, követelményeinek egyértelmű megldása 3. amegldásmegadása 4. követelményekfelsrlása 5. alkalmazásipéldavagypéldák antiminták(antipattern): Hgyannecsináljuk? vita:jóötlet ersszmegldáskatbemutatni? Preemptívütemezés:Azprendszerelvehetiafutásjgátazéppenfutóflyamattól,és"futásra kész"állaptúváteheti.közbenegymásikflyamattindíthatel. Nempreemptívütemezés:Azperációsrendszernemvehetielafutásjgátaflyamattól.A flyamataddigfut,amígazáltalakiadttutasításhatásáraállapttnemvált,azazcsakmaga aflyamatválthatjakiazújütemezést.(befejeződik,erőfrrásravagyeseményrevár,lemnda futásról) Párhuzamsrészfeladatk(vagyflyamatk)leírása:(Architekturálisminták) alacsnyszintűvezérlésiszerkezetek Rund Rbinarchitektúra Rund Rbinmegszakításkkal függvény sralapú(fifo FCFS?) nemalacsnyszintűek perációsrendszerek:
c rutinvagyfiber prcess(flyamat) thread(szál) Rund Rbinarchitektúrák: while(1){ if(){subtask1();} if(){subtask2();} if(){subtask3();} } adttfeladatkatfeltételesenciklikusanfuttat nincsmegszakításkezelés aperifériákatpllinggalkezeljük valós idejűség rund rbin, a wrst-case végrehajtási idő lényegében megadható törékenyarchitektúra újrészfeladatkhzzáadásafelbntjaazütemezéstésazidőzítést részfeladatkleírásátafrrásnyelvnyelviknstrukcióiszeparáljákkönnyű hibázni kölcsönöskizárásiprblémaegyszerűszabálykbetartásávalbiztsítható előnye:egyszerű prckihasználtság100% HRTviselkedéslassú Taskkközöttikmm.Megsztttváltzókkal Nempreemptív Rund Rbinarchitektúramegszakításkkal: megszakításkathasznál,mindeneszközhözflagetrendelünk flaget billenti be a megszakításkezelő rutin - hardverspecifikus dlgkat is kezeli egy végtelen ciklus a flaget ellenőrzi ha a flag be van billentve, akkr meghívja a kezelő függvényt utána visszabillentjük a flaget jbban kezeli az időkritikus részeket??? megszakításkezelő rutinban történik??? ha van priritás a megszakításkr, akkr még kedvezőbb a válaszidő szórása még mindig nagy (válaszidő: interrupt bejön, a teljes feldlgzás végéig tart) azarchitektúratörékeny ennél az architektúránál el lehet a prcesszrt küldeni aludni, ha nincs munka (fgyasztás szempntjából kedvező: IT alapú) - a beérkező IT-re a prcesszr felébred függvénypinterek: milyen memóriacímtől kezdődő függvényt kívánunk meghívni
- azt kell tudni, hgy milyen hívási paraméterű és visszatérési értékű függvényről van szó (stack miatt) időkritikusrészfeladatttöbbszörisfelsrlhatunk,ezzelcsökkentveakiszlgálásiidőt alacsnyfgyasztásúrendszerbenalkalmazható IT velkiegészítettciklikusprgramszervezés FLAGA,B; vidinterrupta_handler(){handle_hw_a();a=true;} vidinterruptb_handler(){handle_hw_b();b=true;} vidinterruptc_handler(){handle_hw_c();c=true;} vidmain(){ while(true){ ifa{a=false;service_a();} ifb{b=false;service_b();} ifc{c=false;service_c();}... } } ciklushatárk Függvény sralapúarchitektúra(fcfs): képesapriritáskkezelésére ezasrkezelésétőlfügg,alapvetőenfifo,cpu 100% ITszintenMCU/CPUITvezérlő kölcsönöskizárásazitszintenésarészfeladatkközött preemptivitásnincs! nemannyiratörékeny a függvény nyelvknstrukcióerős,jólszeparál megszakítástkezelőrutinkkielégítikazeszközsürgősigényeit
tvábbifeldlgzáshzegyvárakzásisrbanelhelyeznekegyfüggvényremutatópintert avárakzásisrtamain bendlgzzukfel meghatárzttalgritmusszerintasrbólkivesszükafüggvényremutatópintereket lényegében ez is interrupt alapú - interrupt: kezeli a hardvert (időkritikus hardver közeli dlgkat) - majd önmaga egy függvényekre mutató pintereket tartalmazó srba behelyezi a magas szintű (nem időkritikus) feladatkat - végtelen ciklusban: ha a sr nem üres, levesszük a függvényt (első függvény) és meghívjuk - a kölcsönös kizárást meg kell ldani az IT-kezelő és a magas szintű (nem időkritikus) feladatkat ellátó függvény között - mert elképzelhetó, hgy miközben a magas szintű feladat fut, befut még egy interrupt - válaszidő = a leghsszabb task + az IT végrehajtása + a kezelő függvény végrehajtása - nem brul fel annyira könnyen az architektúra (csak azk a kódk futhatnak le, amelyek egy függvényben benne vannak) - a függvény szeparálja a taskkat - az új feladatk csak akkr tudják felbrítani a rendszer működését, ha magasabb priritásúak (a magasabb priritású task egyébként minden architektúrában felbrítja a működést) - nem preemptív: ha már fut egy kezelő függvény, akkr hiába érkezik be egy újabb kérés (és lefut az IT kezelő függvénye), csak akkr futhat le, ha az előző befejezte Crutine(CperativeOS):ezpntsanmiis? - kperatív feladatk leírására szlgál - a szubrutin általánsítása
- megvalósítható OS-ben, nyelvi elemként, saját magunknak is megvalósítható (OS: fiber, nyelvi elem: crutine) - stack alapú nyelvekben (C, C++) nehezen implementálható, de pl. FreeEcs támgatja a crutine-t - első belépési pntnál úgy működik, mint függvény v. szubrutin - tvábbi belépéseknél: utlsó kilépési pntnál flytatja - kilépés: yield t crutine - mintha lenne egy függvény több returnnel, és a a függvény újbóli meghívásakr az előző return utánról indulunk var q := new queue; crutine prduce { lp while q is nt full { create new item; add item t queue;} yield t cnsume;} crutine cnsume { lp while q is nt empty { remve item frm q; use item; } yield t prduce; } Operációsrendszerek(knkurensprgramzás): Prcess(flyamat)ésThread(szál) Prcess: sajátstackésmunkaterület(memória) kmplexflyamatleíró:létrehzásaésmegszüntetésebnylultéserőfrrásigényes nemférhethzzámásflyamatkmunkaterületéhez memóriavédelemhardvertámgatással(mmuvanacpu ban) kmmunikációazos enkeresztültörténik Linux/Windwsalkalmazás:Linuxdaemn(frk)vagyWindwsService(CreatePrcess) Beágyazttrendszerek:WindwsCEvagyXPEmbedded,RTLINUX,VxWrks,QNX Thread/szál(pehelysúlyúflyamat)frdítunk: Általábanmindenprgramtöbbszálbóláll.Mindenegyesszálegyrészprgramkéntértendő,sezeket különfuttatjaazos.(szálakbaszervezzükarészfeladatkat.) párhuzamsan futó részfeladatk kmmunikálni tudnak spec függvényből hzható létre, az őket tartalmazó flyamat munkaterületén futnak szálaknak saját stack-jük van egyszerű szálleíró alacsny erőfrrású a létrehzásuk és megszüntetésük definíció szerűen hzzáférhetnek a saját flyamatuk munkaterületéhez
a saját flyamatukban létrehztt szálakkal memórián keresztül kmmunikálhatnak kis erőfrrásigény és késleltetés más flyamatkkal csak OS híváskn keresztül kmmunikálhatnak OS támgatás (jellemző) vagy thread library (pthreadunkat OS a mi flyamatunkat ütemezi, a szálakat pedig más fgja ütemezni) Megvalósítás: Windws és linux (esetleg beágyaztt rendszerek MMU-val): alkalmazás, service, daemn (Linux)= flyamat (flyamatkn belül futhatnak szálak) beágyaztt rendszerek MMU nélkül: csak szálakat tudunk létrehzni 7.A beágyaztt rendszerek gyakri rendszerarchitektúrái és azk hatása a párhuzams eseményvezérelt szftverre. Párhuzams részfeladatk (vagy flyamatk) leírása: (Ütemezési algritmusk Beágyaztt rendszerekarchitekturálismintái)
alacsnyszintűvezérlésiszerkezetek Rund Rbinarchitektúra Rund Rbinmegszakításkkal függvény sralapú(fifo FCFS?) nemalacsnyszintűek perációsrendszerek: c rutinvagyfiber prcess(flyamat) thread(szál) Rund Rbinarchitektúrák: while(1){ if(){subtask1();} if(){subtask2();} if(){subtask3();} } adttfeladatkatfeltételesenciklikusanfuttat nincsmegszakításkezelés aperifériákatpllinggalkezeljük valós idejűség rund rbin, a wrst-case végrehajtási idő lényegében megadható törékenyarchitektúra újrészfeladatkhzzáadásafelbntjaazütemezéstésazidőzítést részfeladatkleírásátafrrásnyelvnyelviknstrukcióiszeparáljákkönnyű hibázni kölcsönöskizárásiprblémaegyszerűszabálykbetartásávalbiztsítható előnye:egyszerű Rund Rbinarchitektúramegszakításkkal: megszakításkathasznál,mindeneszközhözflagetrendelünk flaget billenti be a megszakításkezelő rutin - hardverspecifikus dlgkat is kezeli egy végtelen ciklus a flaget ellenőrzi ha a flag be van billentve, akkr meghívja a kezelő függvényt utána visszabillentjük a flaget jbban kezeli az időkritikus részeket??? megszakításkezelő rutinban történik??? ha van priritás a megszakításkr, akkr még kedvezőbb a válaszidő szórása még mindig nagy (válaszidő: interrupt bejön, a teljes feldlgzás végéig tart) azarchitektúratörékeny ennél az architektúránál el lehet a prcesszrt küldeni aludni, ha nincs munka (fgyasztás szempntjából kedvező: IT alapú) - a beérkező IT-re a prcesszr felébred
függvénypinterek: milyen memóriacímtől kezdődő függvényt kívánunk meghívni - azt kell tudni, hgy milyen hívási paraméterű és visszatérési értékű függvényről van szó (stack miatt) időkritikusrészfeladatttöbbszörisfelsrlhatunk,ezzelcsökkentveakiszlgálásiidőt alacsnyfgyasztásúrendszerbenalkalmazható Függvény sralapúarchitektúra(fcfs): képesapriritáskkezelésére ezasrkezelésétőlfügg,alapvetőenfifo ITszintenMCU/CPUITvezérlő kölcsönöskizárásazitszintenésarészfeladatkközött preemptivitásnincs! nemannyiratörékeny a függvény nyelvknstrukcióerős,jólszeparál megszakítástkezelőrutinkkielégítikazeszközsürgősigényeit tvábbifeldlgzáshzegyvárakzásisrbanelhelyeznekegyfüggvényremutatópintert avárakzásisrtamain bendlgzzukfel meghatárzttalgritmusszerintasrbólkivesszükafüggvényremutatópintereket lényegében ez is interrupt alapú - interrupt: kezeli a hardvert (időkritikus hardver közeli dlgkat) - majd önmaga egy függvényekre mutató pintereket tartalmazó srba behelyezi a magas szintű (nem időkritikus) feladatkat - végtelen ciklusban: ha a sr nem üres, levesszük a függvényt (első függvény) és meghívjuk - a kölcsönös kizárást meg kell ldani az IT-kezelő és a magas szintű (nem időkritikus) feladatkat ellátó függvény között - mert elképzelhetó, hgy miközben a magas szintű feladat fut, befut még egy interrupt - válaszidő = a leghsszabb task + az IT végrehajtása + a kezelő függvény végrehajtása - nem brul fel annyira könnyen az architektúra (csak azk a kódk futhatnak le, amelyek egy függvényben benne vannak) - a függvény szeparálja a taskkat - az új feladatk csak akkr tudják felbrítani a rendszer működését, ha magasabb priritásúak (a magasabb priritású task egyébként minden architektúrában felbrítja a működést) - nem preemptív: ha már fut egy kezelő függvény, akkr hiába érkezik be egy újabb kérés (és lefut az IT kezelő függvénye), csak akkr futhat le, ha az előző befejezte Crutine(CperativeOS):ezpntsanmiis? - kperatív feladatk leírására szlgál - a szubrutin általánsítása - megvalósítható OS-ben, nyelvi elemként, saját magunknak is megvalósítható (OS: fiber, nyelvi elem: crutine)
- stack alapú nyelvekben (C, C++) nehezen implementálható, de pl. FreeEcs támgatja a crutine-t - első belépési pntnál úgy működik, mint függvény v. szubrutin - tvábbi belépéseknél: utlsó kilépési pntnál flytatja - kilépés: yield t crutine - mintha lenne egy függvény több returnnel, és a a függvény újbóli meghívásakr az előző return utánról indulunk var q := new queue; crutine prduce { lp while q is nt full { create new item; add item t queue;} yield t cnsume;} crutine cnsume { lp while q is nt empty { remve item frm q; use item; } yield t prduce; } 8. Kölcsönös kizárás, szinkrnizáció, kmmunikáció módszerei közös memóriával rendelkező rendszerekben Hgyanvédjükaközöserőfrráskat?(Kölcsönöskizárásbiztsítása(MUTEX)) 1.Flyamatkleírásánakeszközei??
Kik férhetnek hzzá a közös ef-khz? ISR Interrupt Service Rutine Részfeladatk DMA Direct Memry Access (CPU mentes memriakezel blkk) Lehetőségek: IT tiltás és engedélyezés ütemező tiltása és engedélyezése lcking (nem jó megldás, de minden más rsszabb) Új kutatási területek, megldásk: Sftware Transactinal Memry (STM) Sftware Islated Precesses (pl.: MS Singularity) Ezekkifejtése: IT tiltás IT rutin és részfeladatk közötti prblémák megldására az egyetlen lehetőség könnyű hibázni (elfelejtünk tiltani vagy engedélyezni /lehet, hgy valamelyik feltételes utasítás ágn az IT rutin tiltva marad/ ) Ütemező tiltás: OS híváskkal (ha támgattt) egyszerűen megldható ütemező skáig nem tiltható értelmét veszti az ütemező könnyű hibázni (tiltás/engedélyezés elhagyása) Lcklás: behajtani tils tábla az erőfrrásra erőfrrás specifikus az a kérdés hgyan várakzunk az erőfrrásra: aktív várakzás (live lck, spin lck, busy waiting, spining) CPU erőfrrás pazarlás történik (flyamatsan ellenőrizzük az erőfrrás felszabadult-e) a rendszer csak külső esemény hatására haladhat előre ezt a fajta prblémát javítani lehet: Rund Rbin megszakítással mintája aktív várakzás timerral kis fgyasztású rendszerekben kerülendő passzív várakzás(sleeplck) az ütemező által karbantarttt várakzási srkban várnak a részfeladatk mi történik, ha részfeladat közös erőfrrást akar használni: ha nem lcklt lckl és fut tvább ha lcklt, akkr felfüggesztődik és az adtt erőfrráshz tartzó várakzási srba kerül
lényegesen erőfrrástakaréksabb, mint az aktív várakzás, de van verhead (rezsiköltség?) a felszabaduló erőfrrásra váró részfeladat csak futásra kész állaptba kerül időzítést vizsgálni kell emiatt-(cpu munka) alacsny fgyasztású rendszerekben a CPU aludhat, ha nincs futásra kész részfeladatrész van egy Idle részfeladat, ami a CPU sleep utasítását hajtja végre végtelen ciklusban IT-re ébred fel a rendszer, hiszen belső esemény nem történhet, mert nincs futó részfeladat Hgyanlcklhatunk? lck bit többnyire egyszerű OS használata nélkül megvalósíttt szftverekben használjuk védendő erőfrráshz tartzó lgikai váltzó (blean) lck bit jelentése: FALSE: az erőfrrás szabad (használható) TRUE: az erőfrrás használt (számunkra nem használható) Belépés srán: teszt: Lck bit == FALSE lck bit = TRUE használjuk ez EF-t if (lck_bit == TRUE) wait amíg FALSE nem lesz tiszta aktív várakzás Kilépési művelet: lck_bit = FALSE gnd: ha megvizsgáljuk és látjuk, hgy szabad,de jön egy IT ami előttünk lefglalja az erőfrrást az gnd lck_bit figyelése, állítása atmi műveletként végzendő IT tiltás, vagy CPU utasítás (Test and Set) szemafr lehet bináris és cunter típusú bináris: egy időben egy részfeladat lehet a kritikus szakaszban cunter t<p: egy időben max N részfeladat lehet a kritikus szakaszban (pl.: ha winchi több parancs végrehajtására alkalmas, írhat lvashat is egyszerre) ez már OS szlgáltatásként kerül megvalósításra belépés: P(), Wait() esetleg Pend() utasítással kilépés: V(), Signal() esetleg Pst() utasítással cunter típusú esetén a belépés és a kilépés számmal paraméterezett (egy időben egynél több erőfrrás lefglalható és felszabadítható jbb, mint ha egymás
után 2-t fglalk le, pl.: ha nekem 2 kell, de egyszerre csak egyet kapk meg, mert más megelőz, akkr hltpnt lehet) hány egység lép ki és be kritikus szakasz bjektum CriticalSectin bjektum létrehzása Enter() metódust meghívhatjuk Leave() a kilépésre szlgál az bjektum megszüntethető tulajdnképpen bináris szemafr szerű működés (WINDOWS) mutex ugyanaz csak más a neve Aquire(), Waitne() Release() kilépésre kritikus szakasz és bjektum majdnem ugyanaz, csak más a neve miért is jó a lcklás kölcsönös kizárás szinkrnizációt visszavezetjük lcklásra létrehzunk egy védendő bjektumt, ami valójában nem közös erőfrrás a rendszer elsődleges működése szempntjából egy és kétldalú randevú: egyldalú: van egy szemafr, egy taszk_1 és taszk_2: taszk_1 szólni akar taszk_nek(taszk2_nek?) a taszk_2 waittel vár a szemafrra, a taszk_1 pedig szignalt küld a szemafrnak ha azt szeretné, hgy taszk_2 fussn Taszk_1 signal() szemafr wait() Taszk_2 kétldalú ugyanaz csak 2 szemafrral Alcklássránelkövetetttipikushibák: belépés / kilépés elmaradása: ha nem lépek be, de lefut a kilépés erőfrrás instabil állaptba kerülhet többszöri be vagy kilépés más erőfrráskat lcklunk (pl hasnló váltzóneveink vannak srs helyett a párhuzams prtt lcklm) deadlck v. livelck: erőfrrásk srrendjének hibás kezelése: a rendszer részfeladatai képesek lennének működni, de a rendszer nem, livelck: a rendszer csinál valamit, de nem jut el a céljáig (hibás deadlck felldás eredménye) az erőfrrásk indklatlan lassan történő lezárása kiéheztetődik
lcklás finmsága (cnse r fire gain lcking) priritás inverzió prblémája prendszer knfigurálásával kiküszöbölhető Biznyshibákkivédhetőkmnitralkalmazásával.Lkalizáljukalcklássalkapcslatsfeladatkata közöserőfrrástkörülvevőapi val. a lcklás nem szétszórtan történik a prgramban, hanem egyetlen, a közös erőfrráshz szrsan tartzó prgramrészletben (mdulban) autmatikus nyelvi szinten támgattt (JAVA): a cmpiler szúrja be a kölcsönös kizárást biztsító knstrukciókat hasnlót kézzel is készíthetünk egy mnitrszerű funkciót hzunk létre jbban járunk: nem kell a párhuzams prgramzással fglalkzni a prgramzónak Hare és Meza szemantika (működés) Charles Richard Hare a mnitr ötletadója és az elméleti alapk kidlgzója: erőfrrás felszabadítása után az erőfrrásra váró flyamat aznnal futni kezd nehéz megvalósítani preemptív ütemezők működésével nehezen összeegyeztethető Meza egy prgramzási nyelv vlt, amit a Xerx Parc: párhuzams prgramzást támgató prgramnyelv: az erőfrrás felszabadulása után az erőfrrásra váró flyamat csak futásra kész állaptba kerül ntfied all bradcast jellegű üzenetek küldése is lehetséges minden az adtt eseményre várórészfeladat futásra kész állaptba kerül Kmmunikáció: 1. közös erőfrrásként kezelt memóriaterületen keresztüli kmmunikáció ha van közös Memória 2. adatstruktúra: b. prcedurális nyelvek: tömb, struktúra c. OO nyelvek: bjektum 1. HW analógia: dual prts RAM: párhuzamsan 2 adatvezeték és címvezeték van, kölcsönös kizárást HW útn biztsít 2. kölcsönös kizárás biztsítása kötelező 3. mailbx és message queue: perációs rendszer szlgáltatás, mely elsősrban kmmunikáció célú: prendszer által szlgáltattt kmmunikációs célú adatstruktúra d. referenciák (C/C++ pinter)-t rakunk a queueba: ha ksan használjuk, akkr nem is kell kölcsönös kizárás e. message queue n darab ilyen pintert tud tárlni: akkr használható ha a termelő rövid idő alatt sk infót állít elő, fgyasztó szép lassan használja fel a dlgkat
f. ha elszttt rendszerbe kerülünk, akkr érték szerinti infrmáció átadás történik az infót fizikailag küldjük el (Micrsft MSMQ, IBM WebShpere MQ, UNIX PIPE (ls la /les)ilyeneknél üzenet nem veszhet el, pl.: banki tranzakcióknál), 9.Kölcsönös kizárás, szinkrnizáció, kmmunikáció módszerei elszttt rendszerekben, architektúrális minták elszttt rendszerekhez Elsztttrendszerek: nincs közös memória
valamilyen kmmunikációs hálózat a nde-k között ez többnyire szftvervezérelt a HW a mai világban: CAN, FlexRay, TT Ethernet, AFDX az infrmációküldés a kmmunikációs interfészen keresztül történik alacsnyabb megbízhatóságú, mint az szttt (megszttt??-ez kulcsszó) memórián keresztüli kmmunikáció nagyságrendsekkel nagybb a késleltetés, és annak ingadzása (jitter) nagyságrendekkel kisebb a sávszélesség lehetnek architektúrális különbségek (endianess /little vagy big endian/) Üzenet küldés és fgadás: SendMessage(t, frm, message) jellegű függvénnyel rmiepc többnyire aszinkrn, aznnal visszatér FROM mezőt autmatikusan az alacsnyabb SW réteg beszívhatja unicast multicast bradcast RecieveMessage(), Listen() blkkló, a megérkezett üzenettel tér vissza pcinálisan megadhatunk szűrőfeltételeket (pl.: frráscím, üzenettípus) pcinálisan lehet timeut (ha 5 másdpercig nem jött, akkr hibát küld) Lehetséges eegynemmegbízhatókmmunikációscsatrnán1valószínűséggelmegbízhatóan kmmunikálni? NEM 2hadseregprbléma:2sereg2dmbn,ellenségavölgyben:ha2hadseregegyütttámad,akkrtud csakgyőzni futárkatküldenek,aközöstámadásiidőpntról,deafutárkatazellenségeltudjakapni. 1valószínűséggelnemlehetmegállapítani,hgymikrleszatámadás,mertazegyikfélshanemlehet 100% igbizts,hgyazüzenetemegérkezett eamásiktábrbavagysem. Gyakrlatban:3utas kézfgás(tcpisígyveszifelésbntjaakapcslatt) Virtuálissztttmemória: Egy szlgáltatás, melyet üzenetekkel tudunk igénybe venni, és a nyújttt szlgáltatás jellegrehasnlóafizikaisztttmemóriáhz íráséslvasásleképzéseüzenetekre A mdern buszk (pl. PCIe) is üzenet alapúak a tényleges, fizikai memória üzenetekkelkezelhető AWEBisfelfghatóennek MailbxésMessageQueue(márkrábbanvltszóróla) Távlieljárás/metódushívás: Remte Prcedure Call, Remte Methd Invcatin, perációs rendszerekben elterjedten alkalmazzák
Rendszerarchitektúrák: Publich Subscribe VirtualDatabus Prxy Bróker(Brker) Távlieljáráshívás(RemtePrcedureCall): nde1 nde2 nde2:f1 Neve, paraméterek Visszatérésiérték :f1 f1 nde2:f1 Ahívóldaln(nde1)egyStub(függvényfej)futle Paramétereketszabványsfrmábaknvertálja(csmaglja) Üzenetekben átküldi a függvényhívás tényét és paramétereit a nde2 nek (tételezzük fel,hgynde2 nafüggvénylétezik) AhívttfélldaliStubazüzenetvételeután Üzenetvétele Lkálisfrmárahzzaaparamétereket Lkálisf1hívása(mellékhatásk!):nde2 nmaradandóváltzásk Visszatérésiértékszabványsfrmárahzása Üzenetbenelküldeniavisszatérésiértéketahívófélnek(nde1) AhívóldalnaStubvisszatérésekr Üzenetvétele Visszatérésiértéklkálisfrmárahzása Visszatérésalkálisfüggvénybealkálisvisszatérésiértékkel Ahívttfélmegtalálásánakmódszerei(Hgyantörténiknde2kiválasztása?) Manuálisknfiguráció Brókerarchitektúra Bradcastvagymulticastüzenet Távlimetódushívás: adttnde nadttbjektumadttmetódusáthívjuk Adttndeadttbjektum:referenciaaznsítja
HTTP:URLadjamegazbjektumt Ténylegestechnlógiák: JAVARMI=távlieljáráshívásvirtuálisgépekközött DCE/RPC(ezthasználjanémimódsításkkalaMicrsft) SUNRPC RemtePrcedureCall Atávlieljáráshívásnalapulatávlimetódushívásiscsakmagasabbszintenműködik. DCOM(Micrsft) WCF WindwCmmunicatinFundatin,.NET benhasználják Újtechnlógiák:elsősrbanWEB estechnlógiák XML RPC SOAP Szabványsadatfrmátumk: BER(BinaryEncdingRules) Nagyszámúeltérőszabványvan Médiaknténerfrmátumk avi,mkv, XML(eXtendableMarkupLanguage) <int16>896</int16> httpjelölőelemekhezhasnló Publish Subscribe:(bserver) Résztvevők: Publisher=termelő Subscriber=fgyasztó Bnylulthálóztképíthetőekfel Nemelsztttkörnyezetben: típus méret Binárisadat nde1 nde3 nde2 subscribers nde2 nde3 Lista:ebbentárljande1,hgykinek kellazadattelküldeni Előállítjaazadatt,amelyrende2ésnde3 kíváncsi,ezértutóbbi2idecsatlakzik
MATLABSimulink NILabview Adatvezéreltszerkezet(dataflw) Pushmódszer(adatküldése) nde1tvábbnymjaazadattnde2 nekésnde3 nak Virtuálisadatbusz:(VirtualDatabus) Publish suscriberalapján Abuszegyközpntindearendszerben nde1 nde0 Virtual databus nde3 nde2állap tmnetes vagy Havalakitőllvas,aztutánakiírjamindegyikndeszámára állapttal nde1 3adattállíthatelő nde1 3termelő,nde0fgyasztó rendelkezik nde1 3értesülnde0 tólmindeninfrmációról nde0termelőnde1 3fgyasztó Prxy: beállkétvagytöbbfélközéakmmunikációsrán cél: kmpatibilitásmegteremtése nde1 CmX Prxy CmY nde2 CmX CmYközöttifrdítás (állaptmentesvagyállapttalrendelkezik) funkciókelrejtése
nde1 Prxy nde2 f1 Firewalljellegű f2 (csakf1ésf2elérhető) f3 Teljesítményillesztés:Σ(kérésnde1 N)>>max.kérésnde0 nde1 Prxy nde0 nde2 cachejellegű Kisteljesítményű nden Bróker: Közpntiszereplő,amelyösszepársítjaatöbbiszereplőt Ismertaszereplőkszámára,egyszerűautmatizmussalmegtudható,vagystatikusanmegadható knfigurációban Afelekmegadjákazigényeketésaképességeket Abrókerösszeválgatjaőket 10. A párhuzams eseményvezérelt prgramzás architektúrális mintái, egyszerű párhuzams architektúráktól a beágyaztt perációs rendszerig. Hgyan tudunk párhuzams flyamatkat leírni szftverben - architektúrális minták. Párhuzamseseményvezéreltprgramzástámgatása: néhány kísérleti rendszertől eltekintve ugyanazkn az elveken alapulnak, hasnló funkciókat támgatnak. ugyanakkr az interfész és az interfész mögött elrejtett funkció sk esetben eltérő (kis mértékben)
Tervezési/architektúrálisminta(pattern): újrafelhasználásszintjei: kódújrafelhasználás(kódvagylibraryhasználata) példaprgram ötletek,megldáskújrafelhasználásáthgyantudjukbiztsítani? tervezési / architektúrális minta: A szftverfejlesztés srán felmerülő prblémákra adhatóáltalánsmegldás.amintaleírásatartalmazza: 6. mintaneve 7. a minta céljának és alkalmazási környezetének, követelményeinek egyértelmű megldása 8. amegldásmegadása 9. követelményekfelsrlása 10. alkalmazásipéldavagypéldák antiminták(antipattern): Hgyannecsináljuk? vita:jóötlet ersszmegldáskatbemutatni? Preemptívütemezés:Azprendszerelvehetiafutásjgátazéppenfutóflyamattól,és"futásra kész"állaptúváteheti.közbenegymásikflyamattindíthatel. Nempreemptívütemezés:Azperációsrendszernemvehetielafutásjgátaflyamattól.A flyamataddigfut,amígazáltalakiadttutasításhatásáraállapttnemvált,azazcsakmaga aflyamatválthatjakiazújütemezést.(befejeződik,erőfrrásravagyeseményrevár,lemnda futásról) Párhuzamsrészfeladatk(vagyflyamatk)leírása:(Architekturálisminták) alacsnyszintűvezérlésiszerkezetek Rund Rbinarchitektúra Rund Rbinmegszakításkkal függvény sralapú(fifo FCFS?) nemalacsnyszintűek perációsrendszerek: c rutinvagyfiber prcess(flyamat) thread(szál) Rund Rbinarchitektúrák: while(1){ if(){subtask1();} if(){subtask2();} if(){subtask3();} }