RTSOF Opdracht 4: Eindopdracht.

© Harry Broeders.

Kies één van de onderstaande opdrachten of bedenk zelf een opdracht in overleg met de docent. Deze eindopdracht is je afsluitende toets voor de cursus RTSOF. Deze opdracht wordt ook beoordeeld op originaliteit.

Je moet het volgende opleveren:

Je moet dit uiterlijk op de vrijdag in de week na de toetsweek (24 juni 2011) inleveren. Je krijgt dan in de herkansingsweek het resultaat te horen. Als je niet tevreden bent met het resultaat kun je op de vrijdag in de week na de herkansingsweek (8 juli 2011) een verbeterde versie inleveren. Natuurlijk is het, net zo als bij schriftelijke toetsen, mogelijk om alleen met de herkansing mee te doen. In dat geval lever je het werk op de vrijdag in de week na de herkansingsweek (8 juli 2011) in.

Opdracht 4a. Robot met µC/OS-III real-time kernel.

Texas Instruments brengt een evaluation kit op de markt bestaande uit een kleine rijdende robot waarop het RTOS µC/OS-III draait. Zie http://focus.ti.com/docs/toolsw/folders/print/ekb-ucos3-bndl.html. Wij hebben zo'n kit aangeschaft. Er moet onderzocht worden of dit platform geschikt is om in de toekomst op het practicum RTSOF gebruikt te worden.

  • Bedenk een practicumopdracht waarbij het Real-Time gedrag van de robot op een duidelijke manier wordt geïllustreerd. Laat bijvoorbeeld zien hoe het aanpassen van prioriteiten het gedrag van de robot beinvloed. Of laat zien hoe het onjuist gebruik van IPC (Inter Process Commuinication) fouttief gedrag veroorzaakt.
  • Werk de bedachte practicumopdracht ook zelf uit.

Opdracht 4b. Parallel Patterns Library.

Deze opdracht is vooral interessant voor studenten die ALDAT gevolgd hebben.

Microsoft heeft in Visual C++ 2010 algoritmen en containers toegevoegd die het eenvoudiger moeten maken om paralelle applicaties te ontwikkelen: de PLL (Parallel Patterns Library). Zie: http://msdn.microsoft.com/en-us/magazine/dd434652.aspx en http://msdn.microsoft.com/en-us/library/dd492418.aspx.

  • Implementeer alle voorbeeldprogramma's die in de theorielessen met de Boost thread library zijn gemaakt met de PPL indien mogelijk, of verklaar waarom het niet mogelijk is.
  • Maak opdracht 3 opnieuw maar nu met gebruik van de PLL, of implementeer een vergelijkbare consumer producer applicatie met behulp van de PLL.
  • Maak een vergelijking tussen het gebruik van de PLL en de Boost thread library?
  • Kun je de PLL ook voor real-time applicaties gebruiken?

Opdracht 4c. Onderzoek eCos

eCos is een open-source real-time operating systeem bedoeld voor embedded applicaties. Op 30 maart 2009 is versie 3 van dit RTOS uitgebracht. eCos heeft ook een zogenaamde POSIX compatible API en het zou dus mogelijk moeten zijn om alle bij deze cursus gegeven POSIX voorbeeldprogramma's op eCos te draaien. Probeer met je onderzoek de volgende vragen te beantwoorden:

  • Kun je eCos eenvoudig installeren?
  • Kun je alle POSIX programma's die in de cursus besproken zijn ook onder eCos draaien?
  • Is het real-time gedrag van eCos gelijk aan dat van QNX? Om dit te testen zou je opdracht 2 onder eCos kunnen uitvoeren en de resultaten vergelijken met de resultaten die je voor QNX hebt gevonden.

Opdracht 4d. Onderzoek priority inheritance in freeRTOS

In het verleden is bij de opleidingen ET en TI al veel onderzoek gedaan naar het real-time OS freeRTOS. We willen dit RTOS in de toekomst ook in lessen gaan gebruiken. Om deze reden zijn alle AVR bordjes in het practicumlokaal 1.052 inmiddels uitgerust met een ATmega32 (als vervanger van de ATmega16). FreeRTOS beschikt sinds versie 4.5 (de huidige versie is 7.0) over een Mutex met Priority Inheritance. Daarnaast kent freeRTOS ook een Binary Semaphore die geen priority inheritance heeft. Zie http://www.freertos.org/Inter-Task-Communication.html.

Maak een zo eenvoudig mogelijke freeRTOS applicatie waarin het verschil tussen het gebruik van een Binary Semaphore (zonder Priority Inheritance) en een Mutex (met Priority Inheritance) duidelijk wordt gedemonstreerd.

Je kunt freeRTOS op de bordjes in lokaal 1.052 . Beantwoord in je verslag ook de volgende vragen:

  • Hoe is Priority Inheritance in freeRTOS geïmplementeerd?
  • Komt de implementatie van Priority Inheritance overeen met één van de in de theorielessen van week 5 besproken methoden?

Opdracht 4e. Onderzoek TIMES tool.

TIMES staat voor Tool for Modeling and Implementation of Embedded Systems. Met deze tool kun je ondere andere schedulability analyses uitvoeren. Probeer met je onderzoek de volgende vragen te beantwoorden:

  • Kun je de TIMES tool eenvoudig gebruiken om de in week 5 behandelde schedules the analyseren?
  • Ondersteund de TIMES tools ook Priority Ceiling protocols?
  • Zou het volgens jou goed zijn om deze tool in de toekomst bij deze cursus te gaan gebruiken?

Opdracht 4f. Onderzoek Cheddar tool.

Cheddar is een gratis real time scheduling tool. Met deze tool kun je ondere andere schedulability analyses uitvoeren. Probeer met je onderzoek de volgende vragen te beantwoorden:

  • Kun je de Cheddar tool eenvoudig gebruiken om de in week 5 behandelde schedules the analyseren?
  • Ondersteund de Cheddar tools ook Priority Ceiling protocols?
  • Zou het volgens jou goed zijn om deze tool in de toekomst bij deze cursus te gaan gebruiken?

Opdracht 4g. Onderzoek de concurrent programmeertaal µC++.

µC++ is een uitbreiding van C++ waarbij concurrency aan de taal is toegevoegd. Probeer met je onderzoek de het volgende te doen:

  • Implementeer alle voorbeeldprogramma's die in de theorielessen met de Boost thread library zijn gemaakt met µC++.
  • Maak opdracht 3 opnieuw maar nu met gebruik van µC++.
  • Maak een vergelijking tussen het gebruik van µC++ en de Boost thread library?
  • Kun je µC++ ook voor real-time applicaties gebruiken? Tip: Zie http://plg.uwaterloo.ca/~usystem/realtime.html.

Opdracht 4h. Demo applicatie RTOS versus GPOS.

Maak een applicatie waarbij een taak steeds na een bepaalde tijd een pin van de parallelle of seriele poort van de PC toggled. Sluit dit signaal aan op een speaker (via een versterker). Als het OS voorspelbaar is en deze taak een hoge prioriteit heeft dan moet de toon bij een real-time OS (QNX) niet verstoord worden door andere applicaties met een lagere prioriteit. Bij een general purpose OS (Windows XP of Linux) zal de toon wel verstoord worden door andere applicaties met een lagere prioriteit.

Opdracht 4i. Real-Time Boost threads met QNX.

De Boost thread class heeft een memberfunctie native_handle waarmee de thread-id van de onderliggende implementatie aangeroepen kan worden. Als je de Boost thread library (die beschikbaar is als open source) kunt compileren onder QNX dan is het dus mogelijk om Real-Time Boost threads te gebruiken. Je kunt dan de onderliggende implementatie gebruiken om de thread class uit te breiden met een functie waarmee de prioriteit ingesteld kan worden. Je zou daarbij gebruik kunnen maken van overerving:

      class realtime_thread: public boost::thread {
public:
    // constructors en destructor
    priority_type get_priority() const;
    void set_priority(priority_type priority);
    // overige realtime functionaliteit.
};

De class boost::mutex beschikt ook over een memberfunctie native_handle waarmee het (onder QNX) mogelijk is om een realtime mutex te maken die gebruik maakt van priority overerving en/of priority ceiling. Je zou ook in dit geval gebruik kunnen maken van overerving:

      class ICPP_mutex: public boost::mutex {
public:
    // constructors en destructor
    priority_type get_ceiling_priority() const;
    void set_ceiling_priority(priority_type ceiling_priority);
    // overige realtime functionaliteit.
};

Bedenk dat het niet nodig is om de hele Boost library te compileren onder QNX. Je hebt alleen de thread library (en de libraries waar de thread library gebruik van maakt) nodig.

Opdracht 4j. Onderzoek Intel's Threading Building Blocks (TBB)

De Threading Building Blocks (TBB) van Intel maken het mogelijk om concurrency te gebruiken in een C++ programma. Probeer met je onderzoek de volgende vragen te beantwoorden:

  • Kun je TBB eenvoudig installeren?
  • Kun je alle POSIX programma's die in de cursus besproken zijn ook met behulp van TBB draaien?
  • Wat zijn de overeenkomsten tussen en de verschillen met de standaard C++ (=Boost) aanpak van concurrency?

Opdracht 4k. Onderzoek threads in C++0x.

De nieuwe C++ standaard bevat toch library support voor threads. Zie http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf hoofdstuk 30, pagina 1129 t/m 1177. Probeer met je onderzoek de volgende vragen te beantwoorden:

  • Is er al een compiler die C++0x threads ondersteund? Volgens mij de laatste versie van gcc.
  • Implementeer alle voorbeeldprogramma's die in de theorielessen met de Boost thread library zijn gemaakt met de std C++0x thread library.
  • Maak opdracht 3 opnieuw maar nu met gebruik van de C++0x thread library.
  • Wat zijn de verschillen tussen de std::thread library en de boost::thread library (denk ook aan mutex, lock, conditionele variabele enz.)?
  • Wat zijn "futures", zie paragraaf 30.6, en wat kun je ermee?
  • Kun je de C++0x thread library ook voor real-time applicaties gebruiken?