Arto Salminen

Samankaltaiset tiedostot
7. Luento: Ytimet. Tommi Mikkonen,

OHJ-4301 Sulautettu Ohjelmointi

7. Ytimet. 7.1 Ytimen roolista

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

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

OHJ-4301 Sulautettu Ohjelmointi

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

Käyttöjärjestelmät: prosessit

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

Arto Salminen,

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

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

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

Luento 10: Tosiaikakäyttöjärjestelmät

Sisältö. Luento 10: Tosiaikakäyttöjärjestelmät. Ominaisuuksia. Arkkitehtuuriratkaisuja. Sulautettu järjestelmä: Useita ohjaavia prosessoreja

Käyttöjärjestelmät II

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

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

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

2 Konekieli, aliohjelmat, keskeytykset

4. Lausekielinen ohjelmointi 4.1

Käyttöjärjestelmän rakenne

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

Käyttöjärjestelmät II

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

Pikaintro käyttöjärjestelmiin

Prosessi perinteisesti

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

Sisältöä SÄIKEET, SMP

Security server v6 installation requirements

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

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

Backup Exec 3600 Appliance

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

Security server v6 installation requirements

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Tietorakenteet ja algoritmit

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

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

Virtualisoi viisaasti paranna palvelua. Iikka Taanila Systems Architect IBM Systems and Technology Group

Kernel (Fig 4.10 [Stal 05]) Operating Systems Examples and Process Management

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

Arto Salminen,

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

VMwaren keskitetty työasemaratkaisu

Tietokoneen toiminta, K Tavoitteet (4)

Luento 1 Tietokonejärjestelmän rakenne

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Luento 1 Tietokonejärjestelmän rakenne

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

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

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

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Integrointi. Ohjelmistotekniikka kevät 2003

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

RINNAKKAINEN OHJELMOINTI A,

Tietorakenteet ja algoritmit

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

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

Rinnakkaistietokoneet luento S

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

11. Javan toistorakenteet 11.1

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

Onko ilmainen lounas sittenkin olemassa - Linux mobiililaitteessa -

Processes and threads

12. Javan toistorakenteet 12.1

Väylämoduuli - DALI Master Wago

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

12. Javan toistorakenteet 12.1

Prosessit ja säikeet SMP, Mikroytimet W2K säikeet

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

10:30 Tauko. 12:00 Lopetus. Yhteistyössä:

Jakso 8 Ohjelman toteutus järjestelmässä

Sovellusarkkitehtuurit

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

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

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

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

6.3. AVR_rauta. EEPROM-muisti pva

KJ-II K2006 / Auvo Häkkinen - Teemu Kerola

Käyttöjärjestelmät II. SMP, Mikroytimet. Prosessit yleensä. UNIX prosessit. UNIX SVR4 Prosessit. UNIX prosessin kuvaaja

Jakso 8 Ohjelman toteutus järjestelmässä

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

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

OSA I: Yhteisten muuttujien käyttö. Prosessit samassa koneessa. Rio 2004 / Auvo Häkkinen 2-1

OSA I: Yhteisten muuttujien käyttö. Sisältöä. Prosessit samassa koneessa. Poissulkeminen ja synkronointi. Semaforit ja rinnakkaisuuden hallinta

Algoritmit 1. Luento 3 Ti Timo Männikkö

Transkriptio:

7. Luento: Ytimet Arto Salminen arto.salminen@tut.fi

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

Johdanto Käyttöjärjestelmän ytimen päätehtävät: Keskeytysten käsittely Oheislaitteiden ohjaus Prosessien hallinta (Muistinhallinta jos monimutkaisempi kokonaisuus) 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)

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ä vaikka itse tarpeen vaatiessa Sopii pieniin sovelluksiin Ei keskeytyksiä -> Ei poissulkemisongelmaa Huonoa Kaikki toiminnot ehdittävä suorittaa saman syklin aikana (rajoittaa kokoa ja monimutkaisuutta) Järjestelmä mitoitettava pahimman mahdollisen tilanteen mukaan -> Tavallisella kierroksella paljon luppoaikaa Pitkään suoritettavat toiminnot voidaan joutua osittamaan -> Lisää monimutkaisuutta 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

Yhteenveto erilaisista ytimistä Ytimen tyyppi Pollaava ydin Kietoutuneet toisiinsa Ikuinen silmukka Keskeyttävä ydin Kietoutuneet toisiinsa Keskeytykset Ydin vs. sovelluslogiikka Ohjausrakenne Prosessiydin Erotettu toisistaan Laiteohjaus ytimessä, ydin kontrolloi sovelluksia

Yhteenveto erilaisista ytimistä jatkuu Ytimen tyyppi Edut Haitat Pollaava ydin Keskeyttävä ydin Prosessiydin Helppo tehdä itse tarpeen vaatiessa Helppo tehdä itse tarpeen vaatiessa; erottaa taustasäikeen muusta joten mukana joustoa Selkeä ero ytimen ja sovellusten välillä Joustamaton Vaikka pollaavaa joustavampi edelleen joustamaton Voi olla resurssisyöppö; laitteisto monimutkaistuu myös

Taustasäikeestä (prosessiydin, keskeytysohjattu ydin) 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 (huippukuormitustilanteet) 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)

Monolithic vs microkernel

QNX, Minix

Windows NT / 2000

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

Yleensä reaaliaikaan liitettäviä vaatimuksia Irroittava skedulointi Prioriteettimekanismit + tason nosto kriittisellä alueella Ennustettava synkronointi Tunnetut latenssit Tehtävän vaihto Keskeytykset Keskeytyksen jälkeinen vuorontaminen

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.

PS3 Linux-ydin Linux kernel can access some devices directly (e.g. USB host controller). Other devices are virtualized by hypervisor and device service is provided via hypervisor call. For example, storage service hypervisor calls are available.

EmbinuxTM Sulautettu Linux

Paravirtualized Linux on OKL4 (Genode / Motorola QA4) OKL4 virtuaalikone (hypervisor) ajaa Linux ydintä ja RTOSydintä samalla prosessorilla. Lisäksi ohjelma voidaan suorittaa suoraan OKL4-ytimen päällä

Joitakin kaupallisia ytimiä C Executive (askeettinen, oikeastaan vain aliohjelmakirjasto) Posix-yhteensopivia (monimutkaisia, oikeastaan melkein kuin yleiskäyttöinen käyttöjärjestelmä) LynxOS PDOS psos+ UniFLEX Sulautettu Linux

Posix-yhteensopivuudesta (http://en.wikipedia.org/wiki/posix) Core services Process Creation and Control Signals Floating Point Exceptions Segmentation / Memory Violations Illegal Instructions Bus Errors Timers File and Directory Operations Pipes C Library (Standard C) I/O Port Interface and Control Process Triggers

Posix-yhteensopivuudesta (http://en.wikipedia.org/wiki/posix) Real-time extensions Priority Scheduling Real-Time Signals Clocks and Timers Semaphores Message Passing Shared Memory Asynch and Synch I/O Memory Locking Interface

Posix-yhteensopivuudesta (http://en.wikipedia.org/wiki/posix) Thread extensions Thread Creation, Control, and Cleanup Thread Scheduling Thread Synchronization Signal Handling

Lyhyesti virtualisoinnista virtuaalinen ikään kuin todellisen sijaan; täsmällinen määrittely vaikeaa Voidaan soveltaa usealla tasolla, Tässä lähinnä laitteiston virtualisointi; VM joka toimii kuten laitteisto Hypervisorin (VM Monitor, VMM) ohjauksessa full lähes täydellinen virtualisointi; partial vain osa virtualisoidaan Para- - ei laitteiston virtualisointia, mutta osa ohjelmista voidaan eristää (Käyttöjärjestelmän virtualisointi)

System vs. process VM Applications Operating system Virtualizing software (VM) Hardware Applications Virtualizing software (VM) Operating system Hardware System virtual machine Process virtual machine

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

Sitten jotain ihan muuta: Dynamic C 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 http://www.digi.com/products/wireless-wiredembedded-solutions/software-microprocessorsaccessories/software/dynamicc#overview

Koodia (ftp://ftp1.digi.com/support/documentation/html/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