SystemJ: Optimerad exekvering av synkrona processer

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