SystemJ: Optimerad exekvering av synkrona processer Ytterligare ett steg mot realisering av SystemJ I de flesta elektroniska enheter som idag säljs, t.ex. mobiltelefoner, TVapparater, spisar, leksaker, bilar, kameror, m.m. kan man hitta någon form av ett inbyggt system. Det finns statistik som visar att utvecklingen inom detta område har varit exponentiell under de senaste två decennierna och det räcker med att ta en titt i sitt egna hem för att hålla med om detta påstående. I och med denna snabba utveckling inser man snabbt att både nya användningsområden och komplexiteten i systemen ökar i en snabb takt, vilket leder till att behovet av verktyg som kan hantera dessa nya utmaningar ökar i samma takt. Många av de inbyggda system som idag konstrueras nyttjas i mobila enheter, vilket ställer kravet att systemen måste vara energisnåla. Kravet förstärks ytterligare då det tyvärr är så att utvecklingen av batterier inte går framåt lika snabbt. I detta examensarbete tittar vi närmre på ett verktyg som fortfarande befinner sig på forskningsnivå, men som syftar till att tillfredsställa dagens behov inom detta område. Verktyget, som är ett utvecklingsspråk, kallas för SystemJ. SystemJ kombinerar den synkrona exekveringen i det befintliga programspråket Esterel, den asynkrona kommunikationen i Kommunikation mellan Sekventiella Processer (KSP) och lättanvändheten i programspråket Java. Detta gör det relativt enkelt att konstruera stora system med formell verifiering av koden, utan att designern behöver ta hänsyn till detaljer kring kommunikationen mellan processerna. Den synkrona exekveringen bygger på periodisk exekvering som följer en global klocka, vilket betyder att allt synkront beteende sker när en klocka tickar. I SystemJ kallas exekveringen som sker mellan två tickar för tick och processerna för reaktioner. Övergången mellan två tillstånd (före och efter tickar) fungerar så att när alla synkrona reaktioner som följer samma klocka har nått sitt slut av en tick, kan en ny tick börja. Kommunikationen på lokal nivå, d.v.s. mellan synkrona reaktioner sker genom s.k. signaler. Kommunikationen på global nivå, d.v.s. mellan klockdomäner, sker genom s.k. kanaler. Figur 1 visar hur ett stort system kan konstrueras och hur de olika reaktionerna förhåller sig tiil varandra. 1 Figur 1: Bilden beskriver hur de olika processerna i SystemJ-modellen relaterar till varandra Målet med detta arbete är att undersöka möjligheten till effektivisering av den synkrona exekveringen redan på kompilatornivå, d.v.s. när SystemJ-kod, i detta fall, översätts till Javakod. För att kunna skapa SystemJ-program i Javamiljö, togs ett Javapaket fram som kallas för True Reactive Kernel (TReK). Javapaketet innehåller all grundläggande funktionalitet i SystemJ och som ett delmoment i detta arbete togs en kompilator fram som översätter SystemJ-kod till Javakod, vilken nyttjar TReK. Signaler i TReK fungerar så att de dels kan anta ett värde under en tick, men att de även erhåller statusen närvarande, frånvarande eller okänd under en tick. För att en ny tick skall kunna börja krävs att signalerna som nyttjas har en känd status (närvarande eller frånvarande), annars finns det risk för ett dödläge. I kompilatorn har det därför lagts till analys som syftar till att sätta statusen frånvarande så tidigt som möjligt under en tick för en signal. Hypotesen för effektivisering av den synkrona exekveringen bygger på att vi tar bort den information och de beräkningar som görs för att skifta mellan parallella reaktioner genom att slå samman synkrona, parallella reaktioner till en gemensam reaktion. Övergången ifrån flera synkrona, parallella reaktioner till en gemensam reaktion gjordes i två steg: 1. I det första steget infördes kontrollvariabler och Switch-Case-satser i de synkrona reaktionerna för att kunna kontrollera det synkrona beteendet. 2. I det andra steget slogs parallella synkrona reaktioner samman till en gemensam reaktion genom att lägga de synkrona reaktionerna efter varandra i ett sekventiellt flöde. Själva undersökningen bygger på att Javaprogram genereras utifrån tre testprogram, skrivna i SystemJ-kod med två, fyra respektive åtta parallella synkrona reaktioner i en klockdomän, både med och utan sammanslagning av synkrona reaktioner. Resultatet presenteras som exekveringstiden mellan väl definerade exekveringspunkter. I testprogrammen minskade exekveringstiden till ungefär en fjärdedel när sammanslagna, synkrona reaktioner nyttjades. Slutsatser av resultatet resulterade i förslag till ytterligare effektivisering av den synkrona exekveringen. 2