OHJ-4301 Sulautettu Ohjelmointi (http://www.cs.tut.fi/~sulo/) /~sulo/) 5op, to 12-14, 14, TB 109 Tommi Mikkonen, tommi.mikkonen@tut.fi Arto Salminen, arto.salminen@tut.fi
Läpäisyvaatimukset Hyväksytysti suoritetut: Tentti Harjoitustyöt Olisi kiva jos joku vaivautuisi luennoillekin, pelkille seinille on tylsä puhua!. mutta pakko ei ole tulla.
Luennot Periodi 3 Loppiainen, ei luentoa (6.1.) 1. Yleisjärjestelyt, johdatus aihepiiriin (13.1.) 2. Laitteistorajapinta (20.1.) 3. Muistinhallinta (27.1.) 4. Prosessit ja säikeet (3.2.) 5. Rinnakkaisuus ja jako prosesseihin (10.2.) 6. Skedulointi (17.2.) 7. Ytimet (24.2.)
Luennot Periodi 4 8. Laitteiston ohjaaminen (10.3.) 9. Ohjelmistotyö (17.3.) 10. Kohti suurempia sulautettuja ohjelmistoja (24.3.) 11. Vikasietoisuus (31.3.) 12. Esimerkki: Mikrohiiri (7.4.) 13. Esimerkki: Symbian-ympäristö (14.4.) 14. Hajautetut sulautetut järjestelmät (28.4.) 15. Kertausta ja vara-aikaa (5.5.)
Kurssimateriaali Järvinen & Mikkonen: Sulautettu Ohjelmointi, esipainos, Tampere 2011 Ilmestyy valitettavasti tipoittain, otaksuttavasti kuitenkin samassa tahdissa luentojen kanssa Pohjautuu viime vuotiseen prujuun, mutta asiaa on lisätty melkoisesti, ja vanhakin asia on osin uudelleen jaoteltu Luentokalvot ladattavissa myös webistä sitä mukaa kun kurssi etenee www.cs.tut.fi/~sulo Tulevat kuitenkin saataville vasta luentojen jälkeen jotta viime hetken korjaukset (luennoilla huomattujen virheiden korjaamiseksi) ovat myös ladattavissa Luentoja ei nauhoiteta tms. (paitsi jos joku ehdottomasti haluaa homman hoitaa!)
Harjoitustyöt 3 harjoitustyötä Jokaisesta mahdollisuus tienata 6p, eli siis max 18p Tehdään pareittain Luonteeltaan tyypillisiä sulautetun ohjelmiston toteuttamiseen liittyviä tehtäviä Jos joku keksii oman aiheen, on mahdollisuuksien rajoissa toteuttaa siihen liittyvä ohjelmisto, mutta asiasta on sovittava etukäteen Arton kanssa Työt voimassa vain tähän toteutuskertaan liittyen (kuka arvaa tässä kohtaa että aiomme uudistaa kurssia ensi vuodeksi?)
Demoharjoitus Sulautettu ohjelmointi on oikeasti vaikeaa, sillä Ohjelmistoteknisesti törmätään rajoitteisiin, joita ei olla etukäteen ajateltu Työkalut ovat tuntemattomia, hankalia käyttää sillä ne on tarkoitettu ammattilaiselle, ja bugisia sillä käyttäjäkunta on usein pieni Ympäristö, jossa ohjelmoidaan, on myös vieras Harjoitustöiden yksinkertaistamiseksi järjestämme demokerran, jossa tehdään esimerkkisovellus Työkaluihin tutustuminen ohjatusti Ympäristöön tutustuminen ohjatusti Demokerta on pakollinen Muista ilmoittautua!
Tentti ja arvostelu Tentti: 5 tehtävää, joista jokaisesta max. 6p Läpipääsyyn vaaditaan 12p Arvostelu: Puolet arvosanasta harjoitustöiden laatuun perustuen (max 18p), toinen puoli tentistä (30p-12p=18p) Tästä syystä harkkatyöt ja tentti voimassa vain tällä samalla toteutuskerralla!
Yhteenveto #1: Johdanto Sulautettu järjestelmä Ohjelmisto ja laitteisto ovat kiinni toisissaan niin saumattomasti ettei kumpikaan ole käyttökelpoinen ilman toista Useita erilaisia insinööritieteitä osana suunnittelua Ohjelmiston toteutuksessa joudutaan usein yhdistämään eri alojen asiantuntijoiden vaatimukset Sulautettu ohjelmointi Ymmärrys mitä taustalla olevan laitteiston oletetaan tekevän Sisäänrakennettu rinnakkaisuus, aikakriittisyys, reaktiivisuus ja vikasietoisuus (sekä yhä useammin myös hajautus!)
Yhteenveto #2: Laitteistorajapinta Sulautettu arkkitehtuuri Keskeytykset Oheislaitteet
Yhteenveto #3: Muistinhallinta Eri muistityypit soveltuvat eri käyttöön Myös saman tyypin sisällä erilaisia toteutuksia, hintoja, kokoja, ominaisuuksia, jne. Muistin käytön suunnitteleminen ohjelmoijan vastuulla Sekä koko muistin kulutuksen osalta pienissä järjestelmissä Että yksittäisen prosessin osalta suuremmissa järjestelmissä MMU tarjoaa suojausmekanismin prosessien välille; ei aina vaihtoehto Välimuisti nopeuttaa tilastollisesti, mutta ei sovi kaikkein reaaliaikaisimpien ohjelmistojen toteuttamiseen
Yhteenveto #4: Prosessit ja säikeet Prosessit sisältävät yhden tai useampia säikeitä saman osoiteavaruuden sisällä Säie pienin skeduloitava yksikkö Run, Ready, Wait (+ lisätiloja tarpeen mukaan?) Keskeytyksissä säikeen (prosessin) ympäristö (rekisterit + tilasana) talletetaan ympäristöpinoon Ajettava säie vaihdetaan vaihtamalla ympäristö toiseksi Keskeytyksessä palattaessa palautetaan ympäristö Keskeytyskäsittely voidaan keskeyttää Käyttöjärjestelmäpyynnöt keskeytysmekanismin avulla
Yhteenveto #5: Rinnakkaisuudesta Rinnakkaisuuden ongelmat Jakoperusteet Reaaliaikajärjestelmät
Yhteenveto #6: Skedulointi Irrottava ja irroittamaton skedulointi Useita skedulointialgoritmeja, joilla erilaisia ominaisuuksia Pikatesti: Tehdään leikkikuorma ja kokeillaan miten käy Monimutkaisempi testi: Matkitaan järjestelmää tarkemmin; kirjoituspöytäkokeilut Analyysi: Järjestelmän ominaisuuksien perusteella voidaan laskea käyttöastetta/skeduloituvuutta Periodisuus ja sporadisuus
Yhteenveto #7: Ytimet Ytimien erot kulminoituvat siihen, miten ytimen ja sovelluksen toiminnot erotetaan Pollava ydin: Ydin ja sovelluslogiikka kietoutuneet toisiinsa; ohjausrakenne ikuinen silmukka Keskeyttävä ydin: Ydin ja sovelluslogiikka kietoutuneet toisiinsa; ohjausrakenne keskeytykset Prosessiydin: Ydin ja sovelluslogiikka erotettu toisistaan; laiteohjaus ytimessä, sovelluslogiikka prosesseissa Monoliittinen vs. mikroydin Useita valmiina saatavia ytimiä; jos tarvitset johonkin todelliseen laitteeseen ytimen, tutki edes saatavilla olevat vaihtoehdot ennen kuin ryntäät oman toteutuksen kimppuun ( oma kiinnostus + omat harrastukset on eri asia ;-)
Yhteenveto #8: Lyhyesti säätämisestä P-, I-, D-, PI-, PD- ja PID-säätimet valitaan käyttötarkoituksensa mukaan ja viritetään toimimaan optimaalisella, mutta turvallisella tavalla. Mitta-anturien kalibrointi on usein tarpeen valmistustoleranssien ja kulumisen vaikutuksen poistamiseksi Järjestelmän turvallisuus on syytä ottaa aina huomioon
Yhteenveto #9: Ohjelmistotyö Kehitys- ja käyttöympäristöt eivät ole samat Suuri joukko erilaisia avustavia työkaluja; eivät kuitenkaan voi kokonaan korvata oikean laitteen käyttöä kehityksen aikana Laitteiston testaus on osa ohjelmiston tehtävää oikeastaan lähes aina Iteratiivinen kehitystyyli lähes välttämätöntä ohjelmistotyössä
Yhteenveto #10: Kohti suurempia sulautettuja Painopiste laitteen hereille saamisesta laitteen pitkäaikaiseen käyttöön Valmiit ohjelmistopinot Vuotavien abstraktioiden hallinta Joustavuutta tuovat suunnitteluratkaisut Määrittelyn oikeellisuus ja täsmällisyys
Yhteenveto #11: Vikasietoisuus Vikasietoinen järjestelmä kykenee jatkamaan toimintaansa itsenäisesti myös silloin kun siinä on vikaa Vikaturvallisen järjestelmän suunnittelussa on huomioitu erikseen ettei vikaantumisesta ettei tule vaaraa Vikasietoisuus voi kohdistua vain vikoihin jotka on otettu huomioon osana suunnittelua Ohjelmistojen sisäisen vikasietoisuuden toteutuskeinoina Ohjelman toiminnan tarkkailu Defensiivinen ohjelmointi
Yhteenveto #13: Symbian Monet vähän erikoisemmalta kuulostavat Symbianin ominaisuudet muuttuvat tarkoituksenmukaisiksi kun ottaa huomioon sulautetun ohjelmoinnin erityispiirteet Toisaalta osasta erityispiirteistä aika on ajanut ohi Taustan ymmärtäminen yksinkertaistaa rajoitteiden huomiointia suunnittelutyössä Toisaalta hyvien ideoiden mukailu voi helpottaa jonkun muun ympäristön käyttöä vastaavalla tavalla Toiset tykkää, toiset ei
Yhteenveto #14: Hajautetut sulautetut Hajautettu skedulointi luo omat haasteensa laadunvarmistukselle Erilaiset väylät voivat yksinkertaistaa järjestelmän rakentamista, mutta ne voivat myös vaatia uudenlaisten suunnitteluongelmien ratkaisua Laitteen sisäisen kapasiteetin hyödyntäminen
Onnea tenttiin! Muuta?