Operációs rendszerek funkcionális modellezése

Hasonló dokumentumok
Feldspar: Nyelv digitális jelfeldolgozáshoz

2018. február 2. Referált cikkek / Papers in referred proceedings [11], [12].

Projektmunka és tehetséggondozás az informatikában

A KUTATÁS EREDMÉNYEI ZÁRÓJELENTÉS

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

A Feldspar fordító, illetve Feldspar programok tesztelése

Programozás alapjai Bevezetés

List of Publications (Pánovics János)

Eötvös Loránd Tudományegyetem, Informatikai Kar ELTE Informatikai Kar, dec. 12.

Publikációs jegyzék (Pánovics János)

Nemzetközi konferencia-kiadványban megjelent lektorált cikk

Mérnök informatikus mesterszak mintatanterve (GE-MI) nappali tagozat/ MSc in, full time Érvényes: 2011/2012. tanév 1. félévétől, felmenő rendszerben

Generatív programok helyessége

Podoski Péter és Zabb László

PTE PMMIK, SzKK Smart City Technologies, BimSolutions.hu 1

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

AZ INTEGRÁLT NYOMONKÖVETŐ RENDSZER BEMUTATÁSA (TÁMOP B) Kern Zoltán Közoktatási szakértő

Szoftver-technológia I.

Szoftver újrafelhasználás

Informatikai technológiák szakirány Rendszertervezés ágazat

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

ELTE Informatikai Kooperációs Kutatási és Oktatási Központ. Az ELTE-Soft KMOP / jelű pályázat zárórendezvénye

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

Szlávi Péter: Szakmai önéletrajz

PROGRAMTERVEZŐ INFORMATIKUS ALAPKÉPZÉSI SZAK

Információtartalom vázlata

Verifikáció és validáció Általános bevezető

Nagy bonyolultságú rendszerek fejlesztőeszközei

Publikációs lista. Gódor Győző július 14. Cikk szerkesztett könyvben Külföldön megjelent idegen nyelvű folyóiratcikk...

A TANTÁRGY ADATLAPJA

TÁVOKTATÁSI TANANYAGOK FEJLESZTÉSÉNEK MÓDSZERTANI KÉRDÉSEI

Bevezetés. Dr. Iványi Péter

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

KLIENS-SZERVER ALAPÚ ERLANG PROGRAMOK TRANSZFORMÁCIÓJA ERLANG OTP SÉMÁRA

ALAPKÉPZÉS SZAKINDÍTÁS

Felhőszolgáltatások megvalósítása PureSystems eszközökön

P-gráf alapú workflow modellezés fuzzy kiterjesztéssel

műszaki tudomány doktora 1992 Beosztás: stratégiai tanácsadó, tudományos tanácsadó Munkahelyek: Nokia -Hungary kft Veszprémi Egyetem

Oktatási környezetek vizsgálata a programozás tanításához

Programozási nyelvek (ADA)

Clang Static Analyzer belülről

I I. H é t f ő Óra IR IR 012 3

Adatbázis rendszerek. dr. Siki Zoltán

A TANTÁRGY ADATLAPJA

Utolsó módosítás:

A TANTÁRGY ADATLAPJA

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

VÁLTOZTATÁSMENEDZSMENT A HAZAI GYAKORLATBAN

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

Szárazföldi autonóm mobil robotok vezérlőrendszerének kialakítási lehetőségei. Kucsera Péter ZMNE Doktorandusz

Utolsó módosítás:

IBM felhő menedzsment

SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ

A TANTÁRGY ADATLAPJA

Előrenéző és paraméter tanuló algoritmusok on-line klaszterezési problémákra

VALÓS HULLÁMFRONT ELŐÁLLÍTÁSA A SZÁMÍTÓGÉPES ÉS A DIGITÁLIS HOLOGRÁFIÁBAN PhD tézisfüzet

Az ELTE IK nemzetköziesedésének hatása a hazai hallgatókra, két jó gyakorlat bemutatása. - Bélik Márton,

alkalmazásfejlesztő környezete

Bevezetés a programozásba

A D-Box koordinációs nyelv és a futtató rendszer

Programfejlesztési Modellek

Napjainkban a korábbiaknál is nagyobb szükségünk van arra, hogy eszközeink rugalmasak legyenek és gyorsan igazodjanak a változó környezethez.

Neme nő Születési dátum 26/10/1988 Állampolgárság magyar

A MATEMATIKAI SZOFTVEREK ALKALMAZÁSI KÉSZSÉGÉT, VALAMINT A TÉRSZEMLÉLETET FEJLESZTŐ TANANYAGOK KIDOLGOZÁSA A DEBRECENI EGYETEM MŰSZAKI KARÁN

BEÁGYAZOTT RENDSZEREK TERVEZÉSE Részletes Hardver- és Szoftvertervezés

Mérnök informatikus (BSc) alapszak levelező tagozat (BIL) / BSc in Engineering Information Technology (Part Time)

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

őszi kezdés ETF I. félév ősz II. félév tavasz III. félév ősz IV. félév tavasz ea gy k kr ea gy k kr ea gy k kr ea gy k kr Alapozó ismeretek

A szemantikus világháló oktatása

Eötvös Loránd Tudományegyetem Bölcsészettudományi Kar. Doktori Disszertáció Tézisei. Recski Gábor. Számítógépes módszerek a szemantikában

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus

TOGAF elemei a gyakorlatban

A szoftverfejlesztés eszközei

Témakiírások 2014/15. őszi félévben

1. Informatikai trendek, ágensek, többágenses rendszerek. Intelligens Elosztott Rendszerek BME-MIT, 2018

2005. évi OTKA zárójelentés: OTKA T Vezető kutató: Dr. Horváth Zoltán

Számítógép architektúra

.NET alapú programok minőségének és biztonságának növelése

30 MB INFORMATIKAI PROJEKTELLENŐR

Szolgáltatási szint megállapodás

Programozási alapismeretek 4.

WEB2GRID: Desktop Grid a Web 2.0 szolgálatában

Összeállította Horváth László egyetemi tanár

Bevezetés. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Szendrei Rudolf. Bevezetés. Szoftvertechnológia

Szoftverfejlesztő képzés tematika oktatott modulok

A Jövő Internet Nemzeti Kutatási Program bemutatása

Funkcionális Nyelvek 2 (MSc)

3D számítógépes geometria és alakzatrekonstrukció

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Bemutatkozik az ELTE Informatikai Kara

A matematikai feladatok és megoldások konvenciói

Már megismert fogalmak áttekintése

Üzleti folyamatok rugalmasabb IT támogatása. Nick Gábor András szeptember 10.

Módszer köztes tárolókat nem tartalmazó szakaszos működésű rendszerek ütemezésére

Programzás I gyakorlat

Mérnök informatikus (BSc) alapszak levelező tagozat (BIL) / BSc in Engineering Information Technology (Part Time)

3D-s számítógépes geometria és alakzatrekonstrukció

Bevezetés a kvantum informatikába és kommunikációba Féléves házi feladat (2013/2014. tavasz)

Átírás:

BABEŞ-BOLYAI TUDOMÁNYEGYETEM, KOLOZSVÁR MATEMATIKA ÉS INFORMATIKA KAR EÖTVÖS LORÁND TUDOMÁNYEGYETEM, BUDAPEST INFORMATIKAI KAR Operációs rendszerek funkcionális modellezése A doktori értekezés tézisei PÁLI Gábor János Doktori hallgató Horia F. POP (UBB) KOZSIK Tamás (ELTE) Doktori témavezetők EÖTVÖS LORÁND TUDOMÁNYEGYETEM INFORMATIKA DOKTORI ISKOLA Doktori program: Iskolavezető: Programvezető: Az informatika alapjai és módszertana BENCZÚR András, DSc. DEMETROVICS János, DSc. 2012

Bevezetés A számítógépek szerves részei mindennapjainknak, mindegyikük két fontos alkotórészből tevődik össze: ez a hardver és a szoftver. Ezek szétválasztódása egy olyan evolúció eredménye, amelynek során a mérnökök kénytelenek voltak belátni, hogy a technológiai fejlődést úgy tudják felgyorsítani, ha programozható alacsonyszintű felülettel rendelkező hardvereszközöket gyártanak, amelyekre aztán további virtuális, szoftveres rétegek építhetőek. Ennek eredményeképpen manapság szinte már lehetetlen olyan gépet találni, amely legalább egy ilyen réteget ne tartalmazna, és ezt a réteget szokták általában,,operációs rendszernek nevezni. A számítógépek életünkben betöltött szerepének változásával az operációs rendszerek is változtak. Az új évezred beköszöntével a processzorok lassan elérték üzemeltetési frekvenciájuk felső határait, ezért tervezőik azok skálázásának egy újabb dimenzióját nyitották meg, és egyre több magot, feldolgozó egységet kezdtek építeni beléjük. Ezzel egyidőben viszont továbbra is megmaradt az egyszerű de megbízható igénye. Ennek mentén nyilvánvaló, hogy az előző évtizedekben kialakult szoftverfejlesztési módszereket valamilyen módon igazítani kell tudnunk ezekhez az igényekhez, nem kevés kihívást jelentve ezzel a szoftverfejlesztők számára. Annak ellenére, hogy folyamatosan újabb ötletekkel és megközelítésekkel halmozzák el, az operációs rendszerek fejlesztése továbbra is az 1970-es években, a UNIX és a C programozási nyelv mentén lefektetett alapokra támaszkodik javarészt. Az újelvű operációs rendszerek terjedésében komoly akadályt jelent ugyanis azok támogatottságának hiánya. Megfelelő hardvertámogatás (vagy legalább azok megfelelő dokumentációja) nélkül egy operációs rendszer lényegében eleve kudarcra van ítélve. Azonban akadnak az iparnak olyan szegmensei, ahol a vállalatok és a szoftverfejlesztők már túl szeretnének lépni a C nyelv és annak leszármazottainak alkalmazásán, és ezért kitartóan keresik tovább azokat a megoldásokat, amelyek az alacsonyszintű rendszerek fejlesztésében nagyobb gépesíthetőséget ígérnek. Emellett a hardverek fejlődésének iránya és üteme is egyre inkább egy magasabb szintű gondolkodásra készteti a programozókat, ahol egy hardverhez tartozó fordítóprogram segíti őket munkájuk minél hatékonyabb elvégzésében. Itt általában figyelembe kell vennünk a kapcsolódó szakterület elvárásait is, aminek kihasználásával a rendszerek szerkesztése során több szemantikai információt tudunk kinyerni a megfelelő magasabb szintű specifikációkból. Így összeségében aztán kevesebb emberi beavatkozással jobb célnyelvi programok készíthetőek. Az értekezés az alábbi módokon törekszik válaszokat adni ezekre a kérdésekre: Bevezetjük a Flow-t, a minimalista tapasztónyelvet, amellyel különböző beágyazott szakterület-specifikus programozási nyelveken írt programokat tudunk szervezni és összekapcsolni. A Flow célja, hogy a Haskell tisztán funkcionális programozási nyelvet egy olyan specifikációs eszközzé alakítsa, amely kellően tömör ámde mégis képes kifejezni bonyolult alkalmazásokat szakterület-specifikus nyelvek kompozíciójaként. Bemutatunk egy adatfolyamgráfokra épülő magasszintű számítási modellt, amely összetettebb alkalmazásokat képes platformfüggetlen módon leírni. A modell jellegzetességeiből fakadóan ráadásul az így mevalósított rendszer szemantikája egyszerűen és tisztán megadható, feltételezve, hogy maguk az alkotórészek is tiszta számításokkal kifejezhetőek. Ugyanez a modell lehetővé teszi azt is, hogy a rendszer működése magasszintű és deklaratív módon legyen vezérelhető. 1

A Flow nyelven megírt rendszerek futását segítendő, leírjuk a a nyelvhez tartozó, szintén minimalista futtató rendszer felépítését és megvalósításának részleteit. A futtató rendszer szorosan követi a nyelvhez tartozó számítási modellt és az a célja, hogy a modell számára fontos alapvető absztrakciók minden platformon elérhetőek legyenek. Ennélfogva célunk a kidolgozás során az volt, hogy ezen absztrakciók számát a lehető legjobban csökkentsük. Ez természetesen számos előnnyel jár: a futtató rendszert a későbbiekben könnyebb más környezetekbe is átültetni, illetve könnyebb magának a futtató rendszernek is megfogalmazni a formális szemantikáját. Kapcsolódó munka Előrevetítve dolgozatunk végkövetkeztetéseit, röviden úgy összegezhetnénk a funkcionális nyelvek eszközeinek alkalmazhatóságát az operációs rendszerek területén, hogy ez nagyon is lehetséges. A tárgyalásban ehelyett inkább arra érdemes helyezni a hangsúlyt, hogy mindez milyen kompromisszumok árán érhető el a hatékonyság és a karbantarthatóság határmezsgyéjén ügyesen egyensúlyozva. Például a Mirage [9] egy olyan ígéretes kutatási projekt terméke, amely elsősorban a napjainkban népszerű felhőszolgáltatások ( cloud computing ) egyszerűbb létrehozását tűzte ki céljául, és amely erre a feladatra egy külön specializált szoftverkészletet alkalmaz. A Mirage egy exokerneles, ún.,,vertikális operációs rendszer. A hardverre vonatkozó részletektől egy hypervisor, mint amilyen mondjuk a Xen vagy a Hyper-V, segítségével vonatkoztat el, és a magasszintű nyelven elkészített szoftverkomponenseket az így létrehozott virtuális hardverre igazítja. Így a Mirage képes a hypervisorok nagyon alacsony szintű felületét magasszintű absztrakciókra cserélni. A Mirage magasszintű nyelvként egy másik (noha nem tisztán) funkcionális nyelvet, az OCamlt választotta, mivel a kutatóknak már korábban is voltak vele pozitív tapasztalataik nagyteljesítményű rendszerek fejlesztésében. Ráadásul, magát az OCaml fordítót nem is kellett módosítaniuk, elegendő volt csupán a futtató rendszert hozzáigazítani az alatta levő operációs rendszer igényeihez. A dolgozat vázlata A digitális jelfeldolgozó (Digital Signal Processing, DSP) algoritmusokat általában egy absztrakt, platformfüggetlen módon tervezik meg, amelyet aztán képzett C programozók megvalósítanak meg adott DSP processzorokon. A terv és és konkrét implementáció közt viszont elég nagy a szakadék, az eredményül keletkező C programok akár processzoronként eltérhetnek. Emiatt a fejlesztés során az újabb hardverre való áttéréskor szinte minden alkalommal újra kell írni az egészet. Ezért abban bízunk, hogy egy megfelelő magasszintű beágyazott nyelv (DSL) és adott platformra felkészíthető fordítóprogramjának segítségével az algoritmusok implementációja jelentősen meg tudja könnyíteni ezt a folyamatot. Ehhez a Feldspar (Functional Embedded Language for Digital Signal Processing and Parallelism) [7] javasoljuk, amely ISO C99 kódra esetleg az LLVM köztes reprezentációjára tud kódot generálni. A DSP-k szánt szoftverek általában eléggé hardverfüggőek, így az újabb processzorokra való áttérés gyakran újratervezést is jelent. A Feldspar ezért lehetővé teszi, hogy algoritmusokat specifikáció szintjén írjuk le, amit a megfelelő absztrakciók és tran- 2

szformációk közreműködésével olyan C kóddá alakíthatóak, amelyek közel azonos szinten vagy esetleg jobban teljesítenek, mint a kézzel írt változataik. A Feldspar fordító moduláris és ezáltal könnyen bővíthető, például a következő generációs hardverek felépítésére vonatkozó információkkal. Ennek köszönhetően a hardverrel kapcsolatos tudás a fordítóprogramba vihető át és így automatikusan hatékony, hardverfüggő kód állítható elő. Az értekezésben ezt a Feldspar nyelvet használjuk a Flow nyelvvel együtt a példák bemutatása során. Valamint segítségével megmutatjuk, hogy miként lehet modern eszközökkel a Haskell tisztán funkcionális programozási nyelven más programozási nyelveket hatékonyan kifejezni, másnéven beágyazni. Ezek a technikák ugyanis a Flow kialakításában és megvalósításában is fontos szerepet játszottak. Az összetettebb szoftverrendszerek, mint amilyenek maguk az operációs rendszerek is, általában számos, a legjobb teljesítményre hangolt rutint tartalmaznak, amelyeket aztán valamilyen felsőbb rétegekből kapcsoljuk össze és vezéreljük. A rendszer növekedésével azonban annak megbízható működése, más platformokra történő átültethetősége és karbantarthatósága egyre inkább fontosabbá válik. Ezt azonban ellenőrzött keretek közé tudjuk szorítani, ha elvonatkoztatunk a platformfüggő részletektől és az alkotórészeket, valamint azok kapcsolatát egy magasabb szinten modellezzük. A funkcionális programozásból kölcsönzött nyelvbeágyazás technikájának segítségével talán kaphattunk egy olyan választ, amely segít egy ilyen megoldás megvalósításában. Ilyenkor például az egyes alkotórészeket egy nekik megfelelő szakterület-specifikus nyelven írjuk le, amelyet aztán egy alacsonyabb szintű nyelvre fordítunk le. Arra viszont még nincs eszközünk, hogy miként kapcsoljuk ezeket össze egy nagyobb, összefüggő rendszerbe. Erre célra az értekezésben a Flow nyelvet vezetjük be konkrét példákon és alkalmazásokon keresztül. Továbbá megfogalmazza azokat a fontosabb elemeket a feladatokat, csatornákat és a feladatok végrehajtását, amelyek végül egy számítási modell kialakításához vezetnek. Itt a hangsúly leginkább a megközelítés alkalmazhatóságán van, vagyis miként tudunk alkalmazni vele együtt tetszőleges, Haskellbe ágyazott nyelveket nagyobb, szakterület-specifikus feladatok megoldására. A beágyazott szakterület-specifikus nyelvek számára így kialakított koordinációs nyelvi keretrendszer megtervezése és megvalósítása során röviden érintjük specializált feladatgráfok végrehajtásának kérdéskörét is. Ilyenkor ugyanis lényegében DSL programokat szervezünk adatfolyamgráfokba, amelyekhez munkafolyamatokat (végrehajtó egységeket) alakítunk ki, és ezek futás közben dinamikusan végrehajtják a feladatokat. A munkafolyamatok számát az adott hardverben található feldolgozó egységek számához igazítjuk, így csökkenteni tudjuk a futtatást támogató környezettel kapcsolatos elvárásainkat, lehetővé téve a lefordított gráfok futtatását akár közvetlenül magán a hardvereszközön is. Az így keletkezett rendszerek teljesítményének vizsgálata során azonban arra a következtetésre jutottunk, hogy a gráfok futtatásának naív ütemezése nem elegendő ahhoz, hogy több munkafolyamat esetén is fenntartható legyen a hatékonyság, mivel eddig nem vettük figyelembe feladatok közti adatfüggőségeket. Ennek orvoslására a feladatokat ezért osztályozhatóvá tesszük, noha ennek automatizálása nem feltétlenül egyszerű feladat. Ezért kidolgoztunk egy másik olyan szakterület-specifikus funkcionális nyelvet, amellyel adatfolyamgráfok ütemezésére vonatkozóan tudunk többlettudást bevinni a rendszerbe. Ezt nevezzük az értekezésben,,deklaratív ütemezésnek. A deklaratív ütemezés révén olyan szakterület-specifikus ütemezési megszorításokat tudunk megfogalmazni, amelyek révén el tudunk vonatkoztatni az alacsonyabb szintű ütemezési részletektől és helyette a megfelelő protokoll megvalósítására koncentrálni. A témában végzett kutatásaink azt mu- 3

tatták, hogy ezt a fogalmat már alkalmazzák mind az adatbázisok és a felhőszolgáltatások esetében, így kézenfekvőnek találtuk esetünkben is felhasználni. Végezetül a dolgozat megpróbálja kiaknázni a Flow nyelvben rejlő lehetőségeket és olyan kiterjesztéseket javasol az eddigi modellhez, amelyekkel bizonyos tulajdonságok mentén tudjuk finomhangolni a keletkező rendszer összteljesítményét. Mindezt ráadásul úgy, hogy az alkalmazásunkat egy magasabb szinten fogalmazzuk meg és a részleteket a megfelelő fordítóprogramokra bízzuk. Az értekezés az alábbi fejezetekből áll. Az első fejezetben áttekintjük a kutatási területet, és a kapcsolódó munkák áttekintésével egyidőben röviden megfogalmazzuk a megoldandó problémákat. Ezek megoldását a rákövetkező fejezetekben fejtjük ki lépésről lépésre. A második fejezetben bevezetjük mindazon alkalmazott technikákat, amelyek ismerete feltétlenül nélkülözhetetlen a munkánk megértéséhez. Itt a Haskell nevű tisztán funkcionális programozási nyelvet használjuk fel arra, hogy definiáljunk egy másik programozási nyelvet. Ezt nyelvbeágyazásnak (language embedding) nevezik. A fejlett típusrendszer és a pusztán függvényekkel való programozásban rejlő rugalmasság a Haskellt nagyon is alkalmassá teszi arra, hogy új programozási nyelvek prototípusait alkossuk meg benne. Ennek lépéseit, valamint a nyelvebeágyazás alapfogalmait a Feldspar megvalósításának részleteinek tárgyalásával mutatjuk be. Magának a Haskellnek egyes részeit (például monádokat) is ugyanezen a módon valósítják meg, ami miatt ez ebben a környezetben egy teljesen szokványos gondolkodást követ. A harmadik fejezetben a Flow kerül bemutatásra. Itt az a célunk, meg tudjuk tartani a Feldspar esetén már az előző fejezetben megtapasztalt kompozicionálitást, miközben az egészet egy olyan magasabb szintre emeljük, ahol a programokat akár eltérő DSLekben is megírhatjuk. A Flow másik szerepe azt megmutatni, hogy egy nagyobb rendszer jellemző alkotórészei miként foghatóak meg absztrakt stílusban. Emellett még egy absztrakt gép szemantikájának megadásán keresztül mutatjuk be, miként lehet futtatni az így megszerkesztett programokat. A negyedik fejezetben a Flow nyelven készített rendszerek hatékonyságát vizsgáljuk. Ennek során többek közt olyan kérdéseket dolgozunk fel, amelyek azzal foglalkoznak, hogy miként tudjuk ütemezni az egyes programok futását a rendelkezésünkre álló erőforrások (processzorok és memória) minél jobb kiosztásával. Elemzéseink révén egy olyan kódgenerálási stratégiát és egy hozzá tartozó kis méretű futtató rendszert ismertetünk, amely közvetítésével ellensúlyozhatóak a funkcionális nyelvi megvalósításhoz általában kötődő korlátozások. Ráadásként bevezetjünk egy programozható ütemezési sémát, amely végül segít a korábban bemutatott absztrakt gép párhuzamos szemantikájának kialakításában. Az ötödik fejezetben egy nagyobb rendszer megvalósításán keresztül folytatódik a Flow alkalmazhatóságának vizsgálata és demonstrálása. De ezen kívül még az is a célunk ezzel, hogy modellezzük az operációs rendszerek egy bizonyos osztályát. Az itt bemutatotthoz hasonló rendszerek ugyanis gyakran előfordulnak beágyazott rendszerek esetén, ahol az operációs rendszernek az a feladata, hogy a hardvert egy konkrét alkalmazás, például digitális jelfeldolgozáshoz kapcsolódóan programozza fel és működtesse. Ezért itt visszanyúlunk a második fejezetben bemutatott Feldspar nyelvhez, hogy annak egy lehetséges bővítésével kiterjesszük annak működését egy komplett rendszerré. A hatodik fejezetben összehasonlítjuk eredményeinket a szakterületen fellelhető más egyéb megoldásokkal, különös tekintettel a saját megközelítésünkben rejlő eltérésekre. Vagyis milyen előnyökkel és hátrányokkal járnak az általunk adott válaszok a többi hasonló munka viszonylatában. 4

Végezetül, a hetedik fejezet zárja az értekezést a témara vonatkozó következtetéseink összegzésével. Következtetések A digitális jelfeldolgozás az ipar egyik jelentős szakterülete, és a sok- és többmagos processzorok megjelenésével folyamatosan keresi azokat az új technológiákat, amelyek lehetővé teszik a kapcsolódó szoftverek gyors, megbízható és fenntartható fejlesztését. A Flow nyelvet is ilyen elvárások mentén dolgoztuk ki. Úgy gondoljuk viszont, a Flow nyelv nem csak digitális jelfeldolgozó rendszerek építésére lehet alkalmas, hanem hordoz magában annyi rugalmasságot, hogy igény szerint más területeken is alkalmazásra találjon, akár egyszerre többen esetén. Ennek kapcsán a Flow a maga kevés elvárásával nagy szabadságot nyújt a kapcsolható DSL-ek tervezői számára, ezáltal jobban testreszabhatóvá téve az egyes szakterületek esetében. A területen végzett tapasztalataink és kutatásaink alapján az alábbi következtetéseket tudjuk levonni. Tézis. A problémák szakterület-specifikusan való megfogalmazása jobban segíti a fordítóprogramot abban, hogy hozzájuk hatékonyabb kódot tudjuk előállítani. Amikor egy programot alkotó szerkezetek túlságosan alacsonyszintűek, akkor a fordítóprogramnak nagyon intelligensnek kell lennie ahhoz, hogy felfedezze a forrásprogramokban az általuk elrejtett absztrakciókat. Ugyanekkor a programok helyességével kapcsolatban is nehezebb érvelni, nehezebb megmondani, hogy a program megfelel-e a specifikációnak. A szakterület-specifikus nyelvek azonban többnyire magasszintű szerkezeteket tartalmaznak, amelyek segítik a programozót egy jól meghatározott, a szakterületet leíró absztrakt modell követésében. Ennek során a programozó jóval több mindent fel tud fedni a szándékaiból, így a fordítónak is több esélye van látni a megoldandó feladatot. Szerencsés esetben, a nyelv definíciója egybeesik a formális specifikációval, vagyis a programok maguk is specifikációkká válnak. A Feldspar esetében ezek matematikai képleteket jelentenek, amelyeket a neki megfelelő programok számítanak ki, ahogy ezt bemutatja a [1, 2]. Tézis. A problémák szakterület-specifikus megfogalmazása segíti a programozót abban, hogy kevesebb hibát vétsen és hogy mentesüljön a sablonos programrészek megírásától. A rendszer átszervezése könnyebben megoldható. A fordítás szemszögéből a deklaratív megközelítés lényegében ahhoz járul hozzá, hogy a specifikációra mint egy tudásbázisra tekintsünk, ahol a fordítónak van valamennyi szabadsága a fordítás során, mivel többet és magasabb szinten tud a szóbanforgó rendszerről. A deklaratív nézőpont magát a programozót is arra sarkallja, hogy ne legyen túlságosan hanyag a megoldás részeleteit illetően. Ehelyett a szisztematikus részek kiemelhetőek, a program pedig tömörré tehető, amelyet aztán később egyszerű megérteni és módosítani. Ezt a [6] írja le. Tézis. A kompozicionalitás az operációs rendszerek esetén is megvalósítható és kifizetődő. Az operációs rendszerek és a hozzájuk hasonló programok esetén a kompozicionalitás 5

bevezetés egy erőteljes fejlesztési módszertanhoz vezet. Ennek során a rendszert több réteg kompozíciójaként adjuk meg. Ha ezt még vegyítjük a deklaratív megközelítéssel, a rétegek komponálása (vagy összefésülése) akár a köztes adatszerkezetek eltűntetésével is járhat, vagyis ezen a módon specializált programokká tudjuk összeolvasztani az egyékbént általános alkotórészeket. Úgy gondoljuk, a [4]-ben bemutatott Flow nyelv jó példát ad arra, hogy miként lehet megalkotni egy olyan absztrakt eszközt, amely kiegészítő rétegként lehetővé teszi már meglevő komponensek összekapcsolását különböző környezetekben. Tézis. A szakterület által definiált korlátozott szemantika egy kisebb méretű, specializált futtatási környezetet kíván meg, amely komolyabb kihívások nélkül valamennyi architektúrán kialakítható. Az értekezésben az összekapcsolt programok adatfolyamgráfként való ábrázolásának és futtatásának teremtjük meg az alapjait és szemantikáját. Ez a modell viszont csak néhány egyszerű absztrakcióval dolgozik: feladatok, feladatcsoportok, üzenetsorok és munkafolyamatok. Az értekezés részeként ehhez megadunk egy konkrét programozási felületet (API-t) is, amelyet C nyelven és egy POSIX kompatibilis rendszer mellett meg lehet valósítani. Úgy véljük, ez a szint lentebb is vihető, egeszén akár közvetlenül a hardverig, noha a beágyazott rendszerek gyártói (például a Tilera) gyakran már eleve ilyen környezetet adnak eszközeikhez. Az eredményeket a [6] tartalmazza. Összeségében tehát a fenti észrevételeink arra engednek következtetni, hogy a funkcionális nyelvek által elérhető fordítási technológiák olyan előnyökkel járnak az operációs rendszerek fejlesztése esetén, amelyek révén modellek alapján tudunk automatikusan és megbízható módon kódot generálni. Köszönetnyilvánítás Ezúton is szeretnénk megköszönni az Ericsson Software Research, az, Ericsson Business Network Units, az SSF (Svédország), a Magyar Nemzeti Fejlesztési Ügynökség (KMOP- 2008-1.1.2), a Programul Operaţional Sectional Dezvoltarea Resurselor Umane 2007 2013 (POSDRU/6/1.5/S/3-2008, Románia) anyagi támogatását. Továbbá szeretnénk köszönetet mondani a Feldspar fejlesztése körül szorgoskodó tagoknak és hallgatóknak, Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszékén, a Chalmers Műszaki Egyetem Számítógéptudományi és Mérnöki Tanszékén, valamint a Babeş-Bolyai Tudományegyetem Számítógéptudományi Tanszékén dolgozó mindazon kollégáknak és hallgatóknak, akik vélemenyükkel és munkájukkal az évek során valamilyen módon hozzájárultak ennek az értekezésnek a fejlődéséhez. Továbbá, nagyon hálásnak érezzük magunkat, hogy a FreeBSD Projekt aktív tagjaként gyűjthettük a témához kötődő tapasztalatokat, és ahol az évek során a Glasgow Haskell Compiler, valamint hozzá tartozóan megannyi Haskell Cabal csomag portjának karbantartójaként lehetőségünk nyílt egyszerre rálátást kapni napjaink operációs rendszereinek, illetve funkcionális programozási nyelveinek szervezésére, belső működésére és képességeire. Hasonlóan fontosnak éreztük a lehetőséget, hogy sok-sok féléven keresztül az Eötvös Loránd Tudományegyetemen taníthattunk Haskellt kezdők és haladók számára egyaránt. 6

Hivatkozások [1] G. Dévai, Z. Gera, Z. Horváth, G. Páli, M. Tejfel. Feldspar A Functional Embedded Language for DSP, 8th International Conference on Applied Informatics (ICAI2010), Eger, Hungary, January 27 30, 2010, Vol. 2, pp. 149 156. [2] G. Dévai, M. Tejfel, Z. Gera, G. Páli, Gy. Nagy, Z. Horváth, E. Axelsson, M. Sheeran, A. Vajda, B. Lyckegard, A. Persson. Efficient Code Generation from the High-Level Domain-Specific Language Feldspar for DSPs, Proc. ODES-8: 8th Workshop on Optimizations for DSP and Embedded Systems, assoc. with IEEE/ACM International Symposium on Code Generation on Optimization (CGO), Toronto, Canada, April 25, 2010, pp. 12 20. [3] G. Páli, Z. Gilián, Z. Horváth, A. Persson. Describing Digital Signal Processing Systems in a Functional Reactive Style. Volume of Extended Abstracts of the 7th Conference of PhD Students in Computer Science (CSCS2010), Szeged, Hungary, June 29 July 2, 2010, p. 58. [4] G. Páli. Extending Little Languages into Big Systems. To appear in Horváth Z., Zsók V. (Eds.): Central European Functional Programming School. Fourth Summer School, CEFP 2011. Revised Selected Lectures. Lecture Notes in Computer Science, (ISSN 0302-9743), Vol. 7241, pp. 499 516. [5] G. Páli. Declarative Scheduling of Dataflow Networks. Volume of Abstracts of the 9th Joint Conference on Mathematics and Computer Science (MaCS2012), Siófok, Hungary, February 9 12, 2012, p. 78. [6] G. Páli. Declarative Scheduling of Dataflow Networks, Annales Universitatis Scientarium Budapestinensis de Rolando Eötvös Nominatae, Sectio Computatorica, Vol. 37(2012), pp. 311 338. [7] E. Axelsson, G. Dévai, Z. Horváth et al. Feldspar: A Domain-Specific Language for Digital Signal Processing Algorithms, Proc. 8th ACM/IEEE International Conf. on Formal Methods and Models for Codesign, MemoCode, IEEE Computer Society, 2010. [8] C. Elliott, S. Finne, O. de Moor. Compiling Embedded Languages, Proc. Semantics, Applications and Implementation of Program Generation (SAIG 2000), 2000. [9] A. Madhavapeddy, R. Mortier, R. Sohan, T. Gazagnaire, S. Hand, T. Deegan, D. McAuley, J. Crowcroft. Turning Down the LAMP: Software Specialization for the Cloud, Proc. of the 2nd USENIX Workshop on Hot Topics in Cloud Computing (HotCloud), Boston, Massachusetts, 2010. 7