Functional Modelling of Operating Systems
Functional Modelling of Operating Systems
Informatika D. I./Az informatika alapjai és módszerei.
Operációs rendszerek funkcionális modellezése
Absztrakt:
Annak ellenére, hogy folyamatosan újabb ötletekkel és megközelítésekkel halmozzák el,
az operációs rendszerek fejlesztése napjainkban továbbra is javarészt a UNIX és C által
lefektetett alapokra támaszkodik. Azonban vannak a piacnak olyan szegmensei, ahol
mindenképpen le akarják ezeket váltani valamivel, ami az alacsonyszintű rendszerek fejlesztésében nagyobb mértékű automatizálhatóságot ígér.
A bonyolultabb programokat, mint amilyenek maguk az operációs rendszerek, jellemzően a legjobb teljesítményre hangolt rutinok csoportja alkotja, amelyeket aztán valamilyen felsőbb rétegekből kapcsolnak össze és irányítanak. Az ilyen programok bonyolultságának növekedésével a megbízható működés, az újabb hardverekre alkalmazhatóság és a karbantarthatóság egyre inkább komolyabb problémává válik. Ez a platformfüggő
részek elvonatkoztatásával, az alkotórészek és a köztük levő kapcsolatok magasabb szintű modellezésével kezelhető keretek közé szorítható. Egy tisztán funkcionális programozási
nyelvet a nyelvebeágyazás technikájával együtt erre a feladatra alkalmazva választ kaphatunk arra, miként tudunk egy ilyen megközelítést megvalósítani. Itt az egyes alkotórészeket
nekik megfelelő, szakterület-specifikus nyelveken (ún. DSL-eken) tudnánk például
megfogalmazni, amelyeket aztán egy alacsonyabb szintű nyelvre fordítunk. Továbbá
szükségünk van még egy eszközre, amellyel az így kapott rendszert magát tudjuk megalkotni, lefordítani és működtetni.
Ebben az értekezésben a Flow nyelvet mutatjuk be konkrét alkalmazásokon keresztül,
a hozzá tartozó számítási modell összetevőivel együtt: feladatok, csatornák és azok
működtetése. A tárgyalás során leginkább a hangsúly a megközelítés alkalmazhatóságán van, vagyis miként tudunk alkalmazni vele együtt tetszőleges, Haskellbe beágyazott DSLeket nagyobb, szakterület-specifikus feladatok megoldására. A dolgozatban erre legfőbb példaként a Feldspar nevű DSL-t használjuk fel. A koordinációs nyelvi keretrendszer tervez
ése és megvalósítása közben viszont röviden érintjük az adott témájú feladatokhoz szerkesztett
feladatgráfok végrehajtásának kérdéseit is. Ehhez létrehozunk munkafolyamatokat,
amelyek futási időben tudnak választani kisebb, adatfolyamgráfba rendezett, DSLben
megírt programok közt. A munkafolyamatok számát az adott hardverhez illesztjük,
ezáltal csökkentve a futást támogató környezettel szemben támasztott elvárásokat, és
akár közvetlenül a nyers hardveren is futtathatóvá téve a gráfokot.
A gráfok végrehajtásának naív ütemezése viszont nem követi jól a munkafolyamatok
számának növekedét, mivel feladatok közt fennálló adatfüggőségeket az eddig felvázolt
rendszer nem vette figyelembe. Ennek kiküszöbölésére a feladatok függőség szerinti
osztályozását javasoljuk. Egy ilyen osztályozás automatikus elkészítése azonban nem
annyira egyszerű, ezért ennek megoldására egy másik DSL-t adunk meg, amelynek seg
ítségével a programozó képes az adatfolyamgráfok futtatásának hatékony ütemezéséhez
szükséges többlettudást is kifejezni. Ez a gondolatmenet visz minket végül egy ,,deklaratív ütemezés” fogalmának bevezetéséhez. Deklaratív ütemezésen keresztül olyan szakterületspecifikus ütemezési megszorításokat írhatunk le, amelyek segítenek elvonatkoztatni azok
alacsonyszintű részleteitől és inkább segítenek a kapcsolódó protokoll helyes megvalósít
ásában. Ezenkívül még egy további kiegészítést teszünk az iménti modellhez, ahol a
rendszer teljesítménye javítása adott jellemzők mentén javítható. Ez illusztrálja egyben
azt is, hogy a megoldás alkalmazója miként tudja végül jól kihasználni a magasabb szinten megfogalmazott rendszer előnyeit, miközben a megvalósítás részleteit a megfelelő
fordítóprogram bízza.