Kohti hajautettuja sulautettuja järjestelmiä 229 14. Kohti hajautettuja sulautettuja järjestelmiä Yhä useammin sulautetut järjestelmät muodostavat monimutkaisempia järjestelmiä kytkeytymällä toisiinsa. Esimerkkejä tällaisista järjestelmistä ovat autot, metsäkoneet, hissit, ja kaivoskoneet, joista jokaisessa on useita tietokoneyksiköitä hoitamassa erilaisia tehtäviä ja joiden yhteistoiminta johtaa koko laitteen oikeaan toimintaan. Lisäksi myös tavallisimmin käytössä olevat laitteet, kuten esimerkiksi matkapuhelimet, ovat yhä useammin sisäisesti hajautettuja, sillä niiden toiminta on usein niin erikoistunutta, että laitteeseen kannattaa asentaa erillisiä komponentteja esimerkiksi GSM-signaalin purkamista varten. Seuraavassa tutustumme joihinkin tällaisten järjestelmien suunnitteluun ja toteuttamiseen liittyviin haasteisiin. Lisäksi esittelemme joukon protokollia ja arkkitehtuureja, joita järjestelmien toteutuksessa voidaan käyttää. 14.1 Johdanto Perinteisesti sulautetut järjestelmät on pyritty toteuttamaan siten, että niihin on liittynyt mahdollisimman vähän dynaamisia ominaisuuksia. Tästä syystä monet hajautetut sulautetut järjestelmät on toteutettu siten, että jokaista järjestelmää varten on oma väyläyhteytensä suoraan keskustietokoneelle, jolloin järjestelmät ovat voineet kommunikoida suoraviivaisesti ja ennustettavasti. Yksi viime aikojen suurista muutoksista on ollut, että yhä useammin hajautettujen sulautettujen järjestelmät kytkeytyvät toisiinsa yhteistä väylää käyttäen perinteisen mallin sijaan, jossa eri laitteista oli lähes aina oma väylöitys keskusyksikköön. Keskitettyyn väylään siirtyminen on huomattavasti kustannustehokkaampaa ja kätevämpää, sillä uuden laitteen lisääminen ei johda väylöitysarkkitehtuurin muutokseen,
230 Sulautettu ohjelmointi mikä puolestaan vähentää suunnittelu- ja valmistuskustannuksia. Voi jopa olla niin, että kaikissa erilaisissa laitteissa käytetään samaa laitteistoa, ja erilaiset asiakaskohtaiset ominaisuudet toteutetaan ohjelmistolla. Huonona puolena suuntauksessa voidaan pitää kasvaneen dynaamisuuden myötä kasvaneita laadunvarmistushaasteita. Esimerkiksi yhteisellä väylällä tapahtuvat kilpailutilanteet, jossa vain yksi tietokone onnistuu lähettämään viestinsä ja muut joutuvat odottamaan vuoroaan, voivat johtaa hankaliin ongelmiin ajoituksen suhteen, ja näistä ongelmista on esimakua saatu joissakin automalleissakin. Toinen erikoispiirre on, että myös loppukäyttäjä saattaa havaita toimintaan liittyvät ongelmat, mikä puolestaan voi johtaa luottamuksen romahtamiseen koko laitteen osalta. Ymmärrettävistä syistä tämä puolestaan voi johtaa teknisistä ongelmista taloudellisiin ongelmiin valmistajan kannalta tilannetta tarkastellessa. Hajautetun järjestelmän yhteydessä tulee ajankohtaiseksi myös dynaaminen skedulointi koko järjestelmän tasolla. Kokonaisuuden kannalta hajautetun järjestelmän dynaaminen skedulointi on ongelmallista, sillä tehtäviä voi syntyä missä tahansa koneessa, eikä missään kohtaa järjestelmää voida tietää jokaisen koneen tarkkaa tilaa. Ongelma jaetaankin kahtia: skedulointi tehdään paikallisesti, ja jos paikallinen skedulointi ei onnistu, niin vasta sitten etsitään verkosta sopivaa konetta. Toisaalta sulautettujen järjestelmien yhteydessä tilannetta rajoittaa se, että eri suorittimet ja laitteet ovat erikoistettuja jonkin tehtävän hoitamiseen, eikä yksikään toinen laite järjestelmässä välttämättä kykene samaan. Symmetrisen suorituksen tapauksessa voitaisiin periaatteessa lähteä myös siitä, että eri suorittimien kuormaa tasoitetaan. Tämän mahdollistavat algoritmit eivät ole käyttökelpoisia reaaliaikajärjestelmässä, koska oikean suorittimen löytämiseen kuluu liikaa aikaa. Ongelman hankaluus johtuu siitä, että kokonaistilaa ei voida tuntea. Testeissä täysin satunnainen algoritmi on toiminut yhtä hyvin kuin perusteellisen pohdinnan tekevä algoritmi, huomattavasti nopeammin vain. 14.2 Hajautettujen järjestelmien väyliä Tässä kohdassa tarkastellaan lyhyesti kahden suhteellisen yleisen väyläratkaisun ominaisuuksia. Näistä CAN-väylä on hankalien paikkojen väylä, jolla on reaaliaikaominaisuuksia, ja LON-väylä on tarkoitettu alunperin rakennusautomaatioon, mutta on levinnyt moniin muihinkin sovellusalueisiin. LONilla ei ole CANin tapaisia reaali-
Kohti hajautettuja sulautettuja järjestelmiä 231 aikaominaisuuksia, mutta toisaalta siirtotienä voi toimia vaikka 230 V jakeluverkko. Nämä väylät eivät ole ainoita mahdollisia vaihtoehtoja. LON on valittu mukaan siksi, että se on yksi yleisimmistä väylistä, CAN taas edustaa reaaliaikaominaisuuksilla varustettuja väyliä. 14.2.1 CAN-väylä CAN (Controller Area Network) on alunperin autojen johdotuksen vähentämiseksi suunniteltu väylä. Fyysisesti kyseessä on differentiaalinen kaksijohtoinen väylä (suojattu kierretty pari). Väylää käytetään auton lisäksi monessa muussakin ympäristössä, sillä väylä on tehty todella huonoihin olosuhteisiin. Sen tulisi toimia, vaikka jompikumpi johdoista on poikki tai jompikumpi johdoista on oikosulussa maahan tai käyttöjännitteeseen. Lisäksi, mikäli molemmat johdot ovat katki samasta paikkaa, väylän kumpikin pää pystyy toimimaan erillisenä verkkona. Väylän nopeudet eivät ole kovin suuria, mutta väylä takaa suuriprioriteettiselle viestille tietyn läpimenoajan. Maksiminopeudet pituuden funktiona ovat taulukossa 14.1. Taulukko 14.1: CAN-väylän nopeudet väylän pituuden funktiona Pituus (metriä) Nopeus (kilobittiä sekunnissa) < 40 1000 < 500 125 < 1000 50 CAN-väylän toimintaidea CAN-väylässä ei ole osoitteita. Kaikki asemat ottavat vastaan kaikki viestit, jonka jälkeen ne päättävät, tuleeko niiden käsitellä viesti vai ei. Päätelmä tehdään viestin tunnisteen perusteella, joka on joka viestityypille omansa. Tämän takia CAN-väylän monitorointi on helppoa, sillä väylään voidaan aina lisätä kuunteluasemia ilman mitään muutoksia ohjelmistoon tai muuhun laitteistoon. Väylän toiminta on esitettynä kuvassa 14.1. Kuvassa solmu 2 lähettää viestin, jonka solmut 1 ja 4 ottavat vastaan, mutta jonka solmu 3 jättää käsittelemättä, koska se ei ole viestistä kiinnostunut.
232 Sulautettu ohjelmointi Solmu 1 Solmu 2 Solmu 3 Solmu 4 käsittelee alustaa käsittelee hyväksyy lähettää hylkää hyväksyy vastaanottaa vastaanottaa vastaanottaa Kuva 14.1 CAN-väylän toiminta CAN-väylälle luvataan reaaliaikaominaisuuksia. Jotta korkeaprioriteettinen viesti ei jäisi odottamaan pitkäksi aikaa, tulee voida varmistua siitä, että se saadaan varmasti lähetettyä. Koska mikä tahansa CANväylän toimilaite voi lähettää, voisi ratkaisuna olla jokin protokolla, jossa vuoro siirtyy varmasti eteenpäin (esimerkiksi token bus). Tosin vuoroa voidaan joutua jonkin verran odottamaan. Koska CAN-väylän vikasietoisuusvaatimuksiin liittyy vielä väylän kahtiajakamisen mahdollisuus, ei luvan (token) siirto solmulta toiselle ole käyttökelpoinen ratkaisu. Lähettäjä määräytyykin sen mukaan, millainen viesti solmulla on lähetettävänään, kuten seuraavassa kappaleessa esitetään. Väylän ollessa käyttämättömänä sen tila on yksi. Viesti aloitetaan kirjoittamalla aloitusbitti nolla. Mikäli kaksi yksikköä tekee tämän samanaikaisesti, ne eivät huomaa toisiaan. Itse viesti alkaa sen tunnistetiedolla. Lähettäessään asemat seuraavat väylän tilaa. Mikäli asema lähettää bittiä yksi, mutta väylällä onkin nolla, asema luopuu viestin lähettämisestä. Näin se asema, jolla on pienin tunniste lähetettävänään, on se, jonka viesti lähtee väylälle. Järjestelmän toimiminen edellyttää, että tunnisteet ovat yksikäsitteisiä. Tunnisteiden arvojen määrääminen onkin osa suunnittelutehtävää, sillä koko järjestelmän reaaliaikaominaisuudet riippuvat niistä. Lähettäjän määräytymistä on havainnollistettu kuvassa 14.2. CAN-väylästä on käytössä on kaksi versiota, joissa ei ole muuta eroa kuin tunnisteen pituus. A-formaatissa tunniste on 11 bittiä ja B-formaatissa 11+18 bittiä pitkä.
Kohti hajautettuja sulautettuja järjestelmiä 233 Bitti Solmu 1 ID 59C16 10 9 8 7 6 5 4 3 2 1 0 Solmu 2 ID 53716 Solmu 3 ID 53916 Väylä 1 luopuu 3 luopuu Kuva 14.2 CAN-väylän lähettäjän määräytyminen Yhteenveto CAN-väylästä CAN-väylässä kaikki asemat kuuntelevat kaikki viestit. Viesteillä ei ole osoitteita, vaan viestin tyyppi (sisältötieto) määrää viestin vastaanottajat, joten järjestelmään voidaan helposti lisätä kuunteluasemia. Suuriprioriteettisin viesti saa varmasti lähetysvuoron heti, kun on mahdollista lähettää uusi viesti. Tämän takia väylällä on kyky toteuttaa reaaliaikavaatimuksia. Esimerkiksi Ethernet on suorastaan onneton tässä suhteessa, sillä sen lähetys perustuu vain todennäköisyyksiin. Token ring on Ethernetiä parempi, muttei sekään ole yhtä hyvä kuin CAN. Koska reaaliaikaominaisuudet sidotaan tunnisteisiin, tulee tunnisteista osa ajoituksen suunnittelua. Uuden viestityypin lisääminen sotkee vanhaa ajoitusta niiden viestien osalta, joiden prioriteetti on uutta viestiä pienempi. CAN-väylä on suunniteltu toimivaksi hyvin huonoissa olosuhteissa. Väylälle on saatavissa usean valmistajan liityntäelektroniikkaa ja ohjelmapaketteja. 14.2.2 CANopen Koska CAN-väylä tarjoaa vain perusominaisuudet, on kehitetty korkeamman tason standardeja hyödyntämään CAN-väylää. Näin voidaan ainakin tietyillä sovellusalueilla päästä siihen, että väylälle voidaan liit-
234 Sulautettu ohjelmointi tää minkä tahansa valmistajan tekemä oheislaite. Yksi yleisimpiä ratkaisuja on CANopen, joka yleensä käyttää siirtotienä CAN-väylää. CANopen jakaa viestin tyypin kahteen osaan: funktiokoodiin ja solmutunnisteeseen. Funktiokoodille on varattu neljä bittiä, ja niillä on keskinäinen prioriteetti siten kuin CAN-väylä sen määrittää. Loppu 7 bittiä 11-bittisestä CAN-väylän tyypistä on lähettävän laitteen solmutunniste. Näin ei koskaan ole mahdollista, että kahdella viestillä olisi täsmälleen sama tunniste. CANopen-verkossa voi olla vain 127 eri laitetta, mutta ani harvoin tarvitaan niin suurta verkkoa, että CAN-väylän tarjoamaa B-formaattia tarvittaisiin. CANopen sisältää useita valmiita aliprotokollia: verkonhallinta- (NMT, Network Management), objektipalvelu- (SDO, Service Data Object), reaaliaikainen objektipalvelu- (PDO, Process Data Object), synkronointi- (SYNC, Synchronization Object), aikaleima- (TIME, Time Stamp Object) ja hätätilaprotokollat (EMCY, Emergency Object). 14.2.3 LON-väylä LON-väylä on yhden valmistajan (Echelon) suunnittelema tuote, mutta silti laajalti käytetty. Yleiskuvaus LON-väylä kattaa kaikki OSI-mallin tasot. Olennaista on, että fyysistä tasoa tai verkon topologiaa ei ole kiinnitetty, joten viestin välittämiseen voidaan käyttää muun muassa kierrettyä paria, sähköverkkoa ja kuitua. LON-väylällä yhdistetyssä verkossa asemilla on kolmitasoinen hierarkkinen osoite. Viestejä voidaan lähettää paitsi yksittäisille koneille myös "ryhmälle" ja "alueelle" (domain). Osoitteistossa on alueita 2 48, alueessa ryhmiä 127 ja ryhmässä solmuja 255. LON-verkon jokainen solmu voi lähettää, kuten CANväylässäkin, joten kyseessä on kilpaväylä. CAN-väylässä törmäykset oli estetty viestien prioriteettien avulla, mutta LON-väylässä törmäyksiä ei voi estää, paitsi tietenkin rakentamalla oma törmäyksiä välttävä protokolla, jos törmäykset muodostuvat ongelmaksi. Näin ei LONväylän käyttökohteissa yleensä ole. Lisäksi törmäystodennäköisyyden pienentämiseksi lähetystodennäköisyys on dynaaminen ja vaihtelee kuormituksen funktiona.
Kohti hajautettuja sulautettuja järjestelmiä 235 LON-väylän alkuperäinen sovelluskohde on rakennusautomaatio, mutta väylä on melko laajalti käytössä monissa muissakin sovelluksissa (muun muassa ohjaus- ja säätöjärjestelmissä). Neuron-siru LON-väylän järjestelmän ydin on liittymän hoitava neuron-piiri, jossa on kolme suoritinta, pieni RAM (2k) ja mallista riippuen sisäinen tai ulkoinen ROM. Lisäksi piiriin kuuluvat ulkoiset liittymät. Piiri sisältää valmiina protokollan toteutuksen. Käyttäjä voi itse ohjelmoida omia protokolliaan (tietyissä rajoissa), mutta perusidea on niin sanottu globaalien muuttujien käyttö. Globaalin muuttujan tyyppi on joko in tai out. Jälkimmäisessä tapauksessa muuttujan arvon muuttaminen (esimerkiksi liityntäelektroniikalla tai ohjelmalla) saa aikaan automaattisen muuttujan arvon päivityksen verkkoon. Jos taas tyyppi on in, verkosta tullut muutoskäsky saa aikaan muuttujan paikallisen arvon muuttamisen, jolloin suoritetaan muutokseen liitetty käsky. Esimerkki: Katkaisijan asento muuttuu, joten lähetetään viesti verkkoon. Vastaanottopuolella viesti otetaan vastaan, muutetaan muuttujan arvoa ja tehdään siihen liitetty toimenpide, eli sytytetään valo. 14.3 Pienen sulautetun laitteen sisäinen hajautus Paitsi isossa mittakaavassa, jossa kyse on esimerkiksi ajoneuvon kokoisen sulautetusta järjestelmästä, hajautus voi tulla vastaan myös paljon pienempiä sulautettuja järjestelmiä toteutettaessa. Esimerkiksi matkapuhelin saattaa sisältää useita erilaisia suorittimia tai lisälaitteita, joilla on erilaisia ominaisuuksia, ja jotka on varattu tekemään jotain sovellusalueen kannalta tärkeää tehtävää, kuten vaikkapa GSMkoodausta tai videokuvan pakkausta. Monet tällaisista ympäristöistä saattavat kuitenkin tarjota myös mahdollisuuden hyödyntää tällaisia lisälaitteita muista sovelluksista silloin, kun niitä ei tarvita suorittamaan varsinaista tehtäväänsä. Tällöin ohjelmoijan kannalta varsinainen fyysinen väylä ei enää ole kovin tärkeässä osassa, vaan väylärakenteen päällä olevat abstraktiot ovat suoraan käytettävissä Seuraavassa käsittelemme kaksi tällaiseen käyttöön esiteltyä arkkitehtuuria, jotka ovat OpenCL ja Network on Terminal Architecture (NoTA). Näistä OpenCL on alunperin PC-ympäristöön suunnattu tapa hyödyntää esimerkiksi näytönohjaimen laskentaresursseja, ja se on
236 Sulautettu ohjelmointi otettu esittelyyn mukaan yleisen mielenkiinnon vuoksi. NoTA puolestaan on pohjimmiltaan yleinen arkkitehtuurimalli, jonka avulla sisäisesti hajautettujen sulautettujen järjestelmien toteuttaminen on mahdollista. 14.3.1 OpenCL OpenCL tarkoitettu näytönohjaimen (tai tarvittaessa myös jonkin muun oheislaitteen) laskentakapasiteetin hyödyntämiseen ohjelmallisesti. Perusidea on yksinkertainen. Pääsuorittimella suoritettava pääohjelma sisältää laajennoksia, joita OpenCL-terminologiassa kutsutaan nimellä kernel, ydin. Näitä laajennoksia voidaan suorittaa millä tahansa oheislaitteella joka tarjoaa OpenCL-rajapinnan. Rajapinta sisältää mahdollisuuden kääntää ytimiä ja ladata niitä suoritettavaksi oheislaitteelle. Tyypillisesti OpenCL:n onnistunut käyttö vaatii, että ytimien avulla voidaan suorittaa rinnakkaista laskentaa. Tällöin esimerkiksi näytönohjaimen sisäisen rakenteen tarjoama sisäinen rinnakkaisuus ja tuki rinnakkaisille suorituksille mahdollistaa peräkkäisohjelmaa huomattavasti paremman suoritustehon. Toisaalta laskennan käynnistämiseen kuluu usein jonkin verran aikaa, sillä laskentakernelit pitää kääntää ja ladata suoritettavaksi. Varsinainen ytimien ohjelmointi tapahtuu käyttäen jonkin verran rajoitettua C-kieltä (C99). Lisäksi kieleen on sisällytetty joitakin laajennuksia, jotka tukevat ja yksinkertaistavat joitakin rinnakkaisen laskennan kannalta keskeisiä seikkoja. Rinnakkaisuuden ja usean eri laiteyksikön käyttö tuo mukanaan myös ongelmia ja monimutkaisuutta. OpenCL:n tapauksessa varsinkin muistin käyttö voi olla tällainen, sillä monin eri tavoin käyttäytyviä muistialueita tarvitaan useita. Esimerkiksi ydin voi tarvita omaa muistia, samaa tehtävää suorittavien ytimien yhteistä muistia, samalla fyysisellä laitteella olevien tehtävien kesken yhteistä muistia tai globaalia muistia, joka näkyy myös pääsuorittimella olevalle ohjelmalle. Kun tähän yhdistetään vielä erilaiset väylät (kerneleitä suorittava laskentayksikkö ja laitteen pääsuoritin ovat yleensä eri yksiköitä) ja välimuistit, syntyy kokonaisuudesta helposti monimutkainen ja vaikeasti hallittava. Yhteenveto tärkeimmistä OpenCL:n ominaispiirteistä on esitetty taulukossa 14.2.
Kohti hajautettuja sulautettuja järjestelmiä 237 Taulukko 14.2: OpenCL-ympäristön ominaispiirteet Kielen spesifikaatio C-perustainen ohjelmointikieli (C99:n alijoukko). Täsmälliset pyöristyssäännöt (IEEE 754, maksimivirhe määritelty). Online- ja offline-käännökset laskentaa suorittavien ytimien osalta. Paljon sisäänrakennettuja apufunktioita erilaisiin tarkoituksiin. Alustarajapinta HAL, Hardware Abstraction Layer Laitteiden etsintä, valinta ja alustus. Laitekontekstien ja työjonojen luonti. Ajoajan API Laskentaytimien suoritus. Resurssien hallinta (skedulointi, laskenta, muisti) 14.3.2 Network on Terminal Architecture Network on Terminal Architecture, NoTA, on Nokia Tutkimuskeskuksessa alunperin kehitetty, nyttemmin omaan yritykseensä ulkoistettu arkkitehtuurimalli, jossa sulautetun laitteen, kuten esimerkiksi matkapuhelimen, sisäinen arkkitehtuuri on rakennettu tavalla, joka mahdollistaa erilaisten lisälaitepiirien ja -suorittimien modulaarisen yhdistelemisen laitteen sisällä. NoTA-arkkitehtuurin suunnittelua ohjanneet perusperiaatteet on lueteltu seuraavassa: Löyhä kytkentä järjestelmätasolla. Perustuu palveluihin. Väyläperustaisuus. Viesti- ja datapohjainen kommunikaatio. Heterogeeniset toteutukset mahdollisia. Toisin sanoen Nota-arkkitehtuurin siis voidaan ajatella soveltavan webpalveluiden periaatteita laitteen sisäisten suorittimien ja muiden laskentayksiköiden väliseen kommunikointiin.
238 Sulautettu ohjelmointi Yksinkertaisimmillaan arkkitehtuurin perusajatuksen voi ajatella hyvin nopeana, eri prosessoreita yhdistävänä väylänä (Device Interconnect Protocol, DIP), jota käyttäen eri suorittimet voivat kommunikoida. Toisin kuin matkapuhelimessa yleensä, eri suorittimet eivät kuitenkaan ole pelkkiä suorittimia, jotka laitevalmistajan on mahdollista ohjelmoida, vaan jokainen suorittimista on (mahdollisesti) erikoistunut jonkun tietyn tehtävän siis oikeastaan palvelu hoitoon ja sisältää tehtävän suorittamiseksi tarvittavan ohjelmiston ja laitteiston. Suorittimet voivat kommunikoida viestinvälitystä käyttäen, mutta on myös mahdollista muodostaa tietovirta suorittimien välillä. Lisäksi suorittimilla voi olla selkeä työnjako, jossa osa suorittimista voi tarjota palveluita muille ("palvelusolmu"), ja osa puolestaan on varattu järjestelmän sovellusten suorittamiselle ("sovellussolmu"). Palvelut tunnistetaan yksikäsitteisellä tunnisteella (Service Identifier, SID), jonka avulla niitä voidaan hyödyntää halki koko NoTA-perustaisen järjestelmän. Toteutuksen tasolla jokainen järjestelmän suorittimista sisältää tyypillisesti myös ohjelmiston, jolla sille allokoidut ominaisuudet on mahdollista toteuttaa. Esimerkiksi vaikkapa videopiiri voisi ottaa vastaan videokuvavirtaa, ja lähettää sen edelleen näytölle piirrettäväksi sitten, kun videokuva on avattu. Videovirtaa ohjaava suoritin puolestaan voisi muodostaa reitityksen laitteistoa ohjaamalla siten, että radiorajapinnalta sisään tuleva virta on ohjattu suoraan videosuorittimelle, joka puolestaan lähettäisi sen näytölle. Tällöin pääsuoritin vapautuisi hoitamaan laitteiston ohjaamisen kannalta tärkeitä tehtäviä, eikä sen tarvitsisi osallistua sovelluskohtaiseen toimintaan kuin ohjaavassa roolissa. Vaikka arkkitehtuurin juuret ovatkin vahvasti laitteen sisäisessä hajauttamisessa, NoTA-tyyppisellä arkkitehtuurilla voidaan rakentaa myös perinteisiä hajautettuja sulautettuja järjestelmiä. Syynä tähän on se, että NoTA-ympäristön käytännön toteutus tarjoaa ainoastaan hivenen erikoistetun socket-rajapinnan, jota käyttäen eri komponenttien välinen yhteistoiminta on rakennettu. Käyttäen tätä niin kutsuttua NoTA Interconnectia, joka toimii väylää hallinnoivana ohjelmistona, on mahdollista rakentaa myös aidosti hajautettuja sovelluksia, jos oletetaan, että rajapinnan operaatiot riittävät sovelluksen tarpeisiin. Toki tarjottujen mekanismien varaan on myös mahdollista rakentaa monimutkaisempia abstraktioita, kuten esimerkiksi puhtaasti web-henkiset rajapinnat tai vaikkapa etäproseduurikutsu, joiden avulla voidaan edelleen toteuttaa monimuotoisempia sovelluksia.
Kohti hajautettuja sulautettuja järjestelmiä 239 Laitevalmistajan kannalta NoTA-arkkitehtuurilla saavutetaan merkittäviä etuja verrattuna perinteiseen malliin, jossa piirivalmistaja valmistaa piirit, ja laitevalmistaja hyödyntää piirien suorituskykyä omalla ohjelmistollaan. Niistä tärkeimmät on lueteltu seuraavassa: Laitevalmistaja saa suoraan sovellustason toteutukset piirin toteuttamista toiminnallisuuksista. Jos kaikki (tai edes tarpeeksi moni) piirivalmistaja tuottaa NoTAyhteensopivia piirejä eri tarkoituksiin, voi laitevalmistaja kilpailuttaa piirejä varsin helposti. Riittää, että piirivalmistaja lupaa piirinsä tukevan tiettyjä NoTA-yhteensopivia protokollia, ja tämän jälkeen toiminnallisuuksien vertailusta voidaan siirtyä hintaan, valmistusmääriin ja suorituskykyyn. Piirivalmistajan kannalta ajateltuna tilanne on tietystikin vaikeampi, mutta ainakin periaatteessa voidaan myydä samanlaisia piirejä useaan eri paikkaan, jos samoja komponentteja ja samoja standardeja käyttäviä asiakkaita on useita. Tällöin piirivalmistaja voisi keskittyä valmistamaan piirejä mahdollisimman tehokkaasti ja korkealaatuisesti. Periaatteessa myös kehittyminen yhdistetyksi piiri- ja ohjelmistovalmistajaksi on mahdollista, sillä piiriin on NoTA-ideologian mukaisesti sisällytetty myös tarvittavat ohjelmistot. NoTA-arkkitehtuurin huonona puolena voidaan pitää sitä, että mitä useampia älykkäitä komponentteja järjestelmään on sisällytetty, sitä vaikeammaksi järjestelmän toiminnan jäsentäminen kokonaisuutena muuttuu. Tällöin esimerkiksi eri toiminnallisuuksien ja toimintojen keskinäinen vuorovaikutus voi johtaa ongelmiin. 14.4 Yhteenveto Erilaiset väylät voivat yksinkertaistaa järjestelmän rakentamista, mutta ne voivat myös vaatia uudenlaisten suunnitteluongelmien ratkaisua. Väyliä on saatavilla useita erilaisia, ja niillä on yleensä omat, erilliset vakiintuneet käyttökohteensa. Hajautettu skedulointi luo omat haasteensa laadunvarmistukselle, sillä virheiden toistaminen vaikeutuu. Laitteen sisäisen laskentakapasiteetin hyödyntäminen mahdollista yhä useammin myös sovelluskohtaiseen laskentaan. On kuitenkin muistettava, että näiden ohjelmien teko voi olla vaikeampaa kuin perinteisten peräkkäisohjelmien.