7. Luento: Ytimet. Tommi Mikkonen,

Samankaltaiset tiedostot
Arto Salminen

OHJ-4301 Sulautettu Ohjelmointi

7. Ytimet. 7.1 Ytimen roolista

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

OHJ-4301 Sulautettu Ohjelmointi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Käyttöjärjestelmän rakenne

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

Käyttöjärjestelmät: Virtuaalimuisti

Käyttöjärjestelmät: prosessit

2 Konekieli, aliohjelmat, keskeytykset

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

OSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Stallings, Luku 4.1. KJ-I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 4-1. KJ-I I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 12-1

11. Javan toistorakenteet 11.1

Prosessi perinteisesti

Arto Salminen,

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

ITKP102 Ohjelmointi 1 (6 op)

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta?

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

Ohjelmoinnin peruskurssien laaja oppimäärä

Tietokoneen toiminta, K Tavoitteet (4)

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Sisältöä SÄIKEET, SMP

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949.

Käyttöjärjestelmät II

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä

4. Lausekielinen ohjelmointi 4.1

9. Luento: Ohjelmistotyö. Tommi Mikkonen,

Käyttöjärjestelmät. Tietokoneen rakenne. Stallings, Luku 1. KJ-I S2003 / Auvo Häkkinen, CT50A2602 / Leena Ikonen 1-1

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Jakso 8 Ohjelman toteutus järjestelmässä

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

6.3. AVR_rauta. EEPROM-muisti pva

12. Javan toistorakenteet 12.1

Ohjelmointiharjoituksia Arduino-ympäristössä

Luento 1 Tietokonejärjestelmän rakenne

Yleiskuva. Käyttöjärjestelmät II. Tietokonejärjestelm. rjestelmä. KJ ja laitteistopiirteet. KJ ja laitteistopiirteitä.

Käyttöjärjestelmät II

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Etäproseduurikutsu. Etäproseduurikutsu, Remote Procedure Call (RPC)

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Etäproseduurikutsu. RPC Toteutus Virhesemantiikka. Andrews 8.1, 10.3, Stallings 13.3

12. Javan toistorakenteet 12.1

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Jakso 8 Ohjelman toteutus järjestelmässä

Jakso 8 Ohjelman toteutus järjestelmässä. Prosessi Prosessin esitysmuoto järjestelmässä Käyttöjärjestelmä KJ-prosessit

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

Ulkoiset mediakortit Käyttöopas

Ohjelmoinnin peruskurssien laaja oppimäärä

Tips & Tricks for TestStand development NI Days 2013

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Java-kielen perusteet

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

Luento 8 Ohjelman toteutus järjestelmässä

Luento 8 Ohjelman toteutus järjestelmässä. Prosessi Prosessin esitysmuoto järjestelmässä Käyttöjärjestelmä KJ-prosessit

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa. Sisältöä. Poissulkeminen. Halutut ominaisuudet 2-1. Rinnakkaiset, atomiset operaatiot

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Onko ilmainen lounas sittenkin olemassa - Linux mobiililaitteessa -

Pikaintro käyttöjärjestelmiin

Luento 5. Timo Savola. 28. huhtikuuta 2006

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Java-kielen perusteet

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen,

Ehto- ja toistolauseet

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen,

Johdatus diskreettiin matematiikkaan Harjoitus 7,

Arto Salminen,

Rinnakkaistietokoneet luento S

Lisää segmenttipuusta

Sovellusarkkitehtuurit

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

Tietorakenteet ja algoritmit

11. Javan valintarakenteet 11.1

Jakso 8 Ohjelman suoritus järjestelmässä

Jakso 8 Ohjelman suoritus järjestelmässä

Ohjelmoinnin perusteet Y Python

Transkriptio:

7. Luento: Ytimet Tommi Mikkonen, tommi.mikkonen@tut.fi

Agenda Johdanto Perusydintyypit Pollaavat Keskeyttävät Prosessiydin Valmiina saatavista ytimistä Esimerkki: Linux-ydin Yhteenveto

Johdanto Käyttöjärjestelmän päätehtävät: Keskeytysten käsittely Oheislaitteiden ohjaus Prosessien hallinta (Muistinhallinta) Pienet ytimet ilman käyttöjärjestelmän omaisia toimintoja Sovellus ja käyttöjärjestelmätaso sekoittuvat helposti (ja tämä voi olla jopa toivottavaa esim. ajoitukseen liittyvistä syistä!) Ohjelmoija vastaa kaikesta Yleiskäyttöisellä puolella käyttöjärjestelmä tarjoaa perusresurssit Esim. prosessit (kevennettynä säie tai tehtävä tai kevytprosessi)

Entäpä reaaliaika? Jos ohjelmoija vastaa kaikesta, niin myös reaaliajasta sitä tarvittaessa Korkeaprioriteettisin keskeytys palvelee reaaliaikatoiminnot Kokonaan reaaliaikainen ydin, jolloin se lupaa huolehtia esim. skedulointialgoritmillaan reaaliajasta (tietyin oletuksin!) Yleiskäyttöisessä ympäristössä erilaisia kikkoja Esim. 2 ydintä, joista toinen reaaliaikainen ja toinen yleiskäyttöinen Kommunikointi yleensä sallittua: Reaaliaikainen KJ voi nähdä yleiskäyttöisen KJ:n esim. sovellusprosessina, ja yleiskäyttöinen KJ puolestaan reaaliaikaisen KJ:n esim. laiteajurina

Pollaava ydin Yksinkertaisin mahdollinen ydin, mutta silti varsin käyttökelpoinen monessa yksinkertaisessa laitteessa Alustuksen lisäksi ei keskeytyspalveluita lainkaan (tai vain 1 kello?) Sisäiseltä rakenteeltaan ikuinen silmukka, joka käsittelee laitteita jossain järjestyksessä

Koodi (rutiini yleensä) int main() { alusta laitteet; while (1) { testaa ja käsittele laite 1; testaa ja käsittele laite 2; testaa ja käsittele laite 3;. testaa ja käsittele laite n;

Ominaisuuksista Hyvää: Suoraviivainen ja nopea tehdä Sopii pieniin sovelluksiin Ei keskeytyksiä -> Ei poissulkemisongelmaa Huonoa Kaikki toiminnot ehdittävä suorittaa saman syklin aikana (rajoittaa kokoa) Järjestelmä mitoitettava pahimman mahdollisen tilanteen mukaan -> Tavallisella kierroksella paljon luppoaikaa Pitkään suoritettavat toiminnot voidaan joutua osittamaan Olennaista: Laitteen käsittely ja tiedon käsittely tapahtuvat yhtä aikaa!

Ositusesimerkki void palvele() { static int tilamuuttuja = 0; switch (tilamuuttuja) { case 0: if (laitteella töitä) { aloita työt; tilamuuttuja = 1; break; case 1: jatka käsittelyä; tilamuuttuja = 2; break; case 2: tee työt loppuun; tilamuuttuja = 0; // switch // palvele break; default: virhe;

Keskeytysohjatut ytimet Melko yksinkertainen ydin, muttei vedä siinä suhteessa vertoja pollaavalle ytimelle Ikuinen odotussilmukka, jonka keskeytyspalvelu aina välillä keskeyttää Keskeytykset sidotaan sopiviin keskeytyskäsittelijöihin, ja käsittelijät suorittavat varsinaiset operaatiot Odottaessa voidaan suorittaa jotain hyödyllistä (joskus käytetään termiä taustaydinprosessi, vaikka järjestelmässä ei varsinaisia prosesseja olekaan)

Koodi (tulostus kirjoittimelle) int main() { alusta laitteet; while (1) { if (uusia merkkejä) { tulkitse niin pitkälle kuin mahdollista if (kirjoitettava rivi valmis) { aloita rivin kirjoitus/salli kellokeskeytykset void sarjaliityntä() {siirrä merkki käsiteltävien puskuriin void kellokeskeytys() { kirjoita seuraava merkki; siirrä kirjoituspäätä

Ominaisuuksista Hyvää Yksinkertainen ja nopea toteuttaa itse tarvittaessa Kieltämällä keskeytykset aina keskeytyskäsittelyn ajaksi päästään eroon poissulkemisongelmasta (taustaprosessin kanssa niitä voi yhä tulla!) Huonoa Ositus ei onnistu keskeytyksien käsittelyn suhteen; taustaprosessin kanssa näin voi toimia Ei sovi läheskään kaikkiin järjestelmiin, sillä keskeytystä ei aina tule koskaan (näyttö? mittausjärjestelmä?) Monimutkaistuu jos keskeytyksillä on eri prioriteetit, ja keskeytyksiä ei voi kieltää

Prosessiydin Yksinkertaisenakin selvästi edellisiä monimutkaisempi Sovellus toteutettu prosesseissa Keskeytyspalvelu (käytännössä laiteajurit) huolehtivat kommunikoinnista oheislaitteiden kanssa Käytännössä nykyiset (pienet) prosessiytimet ovat hämmästyttävän keveitä ja sopivat siksi myös pienien sulautettujen järjestelmien toteuttamiseen Ero aiempiin ytimiin: Sovelluslogiikka prosesseissa Laiteohjaus ajureissa Tavallisesti 1 prosessi joka ei tee mitään (taustasäie)

Koodi int main () { alusta laitteet; luo prosessit; käynnistä skeduleri; while (1) { odota, että joku keskeyttää ns. idle-prosessi prosessi 1 { prosessin 1 käskyt; prosessi n { prosessin n käskyt;

Arviointi Hyvää Prosesseissa voidaan keskittyä ratkaisemaan sovelluskohtaisia ongelmia Voidaan mitoittaa keskimääräisen kuorman mukaan (paitsi jos reaaliaikaisuus halutaan taata) Loogisia toimintoja voi olla useita ajossa yhtä aikaa; prioriteettien perusteella voidaan valita niistä seuraavaksi suoritettava Huonoa Selvästi monimutkaisempi (sekä toteuttaa että myös debugata!) Poissulkemis- ja muut rinnakkaisuuden ongelmat

Taustasäikeestä Tarkoitus yksinkertaistaa skeduleria Pienin mahdollinen prioriteetti -> Ajossa silloin, kun ei ole mitään muuta tehtävää Yleinen käyttö: Kerää tietoa järjestelmän toiminnasta Ongelma: Luotettavaa tietoa ei saatavilla silloin kun sitä eniten tarvittaisiin Ongelma: Monesti dokumentoimatonta tietoa järjestelmästä kumuloituu juuri taustasäikeeseen, ja sille alkaa syntyä oma rooli järjestelmässä (ratkaisu: uusi prosessi, jolla on vähän korkeampi prioriteetti?)

Monoliittinen vastaan mikroydin Monoliittisessä ytimessä lähes kaikki ytimen toiminnot on sisällytetty ytimen hoidettavaksi Jaetut tietorakenteet mahdollisia Ytimen sisäinen poissulkeminen kun käsitellään jaettuja tietorakenteita Mikroytimessä toimintoja on pyritty hajauttamaan eri prosesseihin, jolloin ytimestä saadaan pienempi ja yksinkertaisempi Kommunikointi sanomien välityksellä; ei jaettuja tietorakenteita (puhtaimmassa muodossa) Vikasietoisuus voi kasvaa (jos joku prosessi ajautuu ongelmiin, se voidaan käynnistää uudelleen ajamatta koko ydintä alas)

Valmiit ytimet Käytännössä aina (reaaliaikaisia) prosessiytimiä Tyypillisiä piirteitä: Pieni koko (mahduttava kokonaan ROM:iin) Prioriteetteihin perustuva skedulointi Ajetaan vain testattuja ohjelmia; ei suojauksia (nopeuttaa ympäristön vaihtoa ja prosessien välistä kommunikointia) Sovellusohjelmat etuoikeutetussa tilassa (KJkutsut, jotka eivät vaadi ympäristön vaihtoa voidaan suorittaa aliohjelmakutsuina ohjelmoidun keskeytyksen sijaan suorituskykysyistä) Mikroydintyyppinen ratkaisu, jossa ydin sisältää vain prosessien hallinnan ja kommunikoinnin tarvitsemat palvelut; laitteiden ohjausta varten on sovellusprosessit

Joitakin keskeisiä ominaisuuksia Skaalattavuus Pienimmillään muutamia kilotavuja, isommillaan RT + Unix Laitteistovalikoima Joitakin ytimiä saa lähes mille laitteistolle tahansa, ja joillekin laitteistolle saa lähes minkä ytimen tahansa; olennaiseksi nousemassa oheislaitteet ja niiden ominaisuuksien käyttö (esim. laitteistokiihdytetty grafiikka) Kommunikointi ja poissulkeminen: Yleensä semaforit ja/tai viestinvälitys Korkeamman tason mekanismit harvinaisia (esim. monitorit, Adan rendezvous); toisaalta nämä ovat pikemminkin ohjelmointikielen kuin ytimen rakenteita Verkkoyhteydet yleistymässä (TCP/IP, Bluetooth, WLAN, ) Kustannukset Suoritin (voi vaihdella ympäristön vaatimusten mukaan) Ydin (kertakorvaus, lisenssi per yksikkö) Kehitysympäristö (kertamaksu, lisenssi, joskus jopa ilmainen)

Kehitysympäristö Toteutuskieli Yleensä C tai konekieli Muita: PL/M, Ada, Fortran, C++, Java Kehitysympäristönä yleensä PC, kohdelaitteeseen tarvitaan usein ristikäännös Kehitysympäristöllä voi olla vähän käyttäjiä -> Laatu vaihtelee! Tilanne ei paljon helpompi vaikka voisi tehdä suoran käännöksen kehityskoneessa (esim. virtualisoidun ympäristön avulla), sillä laitteistovaatimukset yleensä varsin erilaisia

Esimerkki: Linux-ydin Monoliittinen prosessiydin Modulaarisuus sallii ytimen (hallitun) räätälöinnin Ajureiden avulla mahdollista laajentaa ytimen toimintaa tarpeen mukaan Useita yrityksiä, jotka tekevät homman puolestasi, jos olet valmis maksamaan Dev. Drv1 Dev. Drv2 Dev. Drv3 Dev. Drv4 New Funct. Processor/Cache Control Memory Management Process Management File System Interface Networking Stacks Device & I/O Interface Kernel State Information Extended f. Security/Auth.

Yhteenveto 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 ;-)

Muuta: Hauska tuttavuus! Dynamic C http://www.rabbit.com/products/dc/index.shtml Integrated development environment reduces the time and effort to write real-time software for embedded systems that use a Rabbit microprocessor enabling easy development of a wide range of applications Toteuttaa monet ytimiin liittyvät seikat mielenkiintoisella tavalla ohjelmointikielen tasolla

Koodia (http://www.rabbit.com/documentation/docs/manuals/dyncusersmanual/3tutoria.htm) main() { int secs; // seconds counter secs = 0; // initialize counter while (1) { // endless loop // Task 1 will print the seconds elapsed. costate { secs++; // increment counter waitfor( DelayMs(1000) ); // wait one s. printf("%d seconds\n", secs); // print elapsed s. // Task 2 checks if any keys have been pressed. costate { if (!kbhit() ) abort; // key been pressed? printf(" key pressed = %c\n", getchar() ); // end of while loop // end of main