<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.52">
 <META NAME="LFCATEGORY" CONTENT="KernelCorner">
 <link rel="icon" href="../../common/images/lf-16.png" type="image/png">
 <TITLE>lf44, KernelCorner: Real-Time Linux (RT-Linux)</TITLE>
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-family:monospace,Courier }
 pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
 p.cl { color:#EE9500 }
 table.left { margin-right:0.3cm }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; 
           border-style:none; border-width:medium; border-color:#FFD700; 
           padding:0.5cm;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; 
          border-style:none; border-width:medium; border-color:#aedbe8; 
          padding:0.1cm;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; 
          border-width:medium; border-color:#AAAAAA; padding:0.5cm ; 
          margin-top:0.1cm; margin-right:1cm; margin-left:1cm; 
          text-align:center }
 div.tbbutton {
   background: #ddd;
   border-right: 1px solid #aaa;
   border-bottom: 1px solid #aaa;
   margin: 2px 5px 2px 5px;
   text-align: center;
   width: 20em;
   line-height: 1.2em;
   padding: 2px;
   font-size: 12px;
   white-space: nowrap;
   color: #555;
 }
 div.bbutton {
   background: #ddd;
   border-right: 1px solid #aaa;
   border-bottom: 1px solid #aaa;
   float: left;
   margin: 2px 5px 2px 5px;
   text-align: center;
   line-height: 1.2em;
   padding: 2px;
   font-size: 12px;
   white-space: nowrap;
   color: #555;
 }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://main.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- this is used by a number of tools:
 =LF=AUTHOR: Ismael Ripoll
 =LF=CAT___: KernelCorner
 =LF=TITLE_: Real-Time Linux (RT-Linux)
 =LF=NUMBER: 44
 =LF=ANAME_: article44.shtml
 =LF=PARSER: 2.52
 -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar, current, style=2 -->
 <!-- top navegation bar -->
 <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="319"><a href="../../index.shtml"><IMG src="../../common/images/logolftop_319x45.gif"
           alt="[LinuxFocus-icon]" width="319" height="45" align="left" 
           border="0"></a></TD>

           <TD class="top">
             <TABLE summary="topbar_1_links" width="100%">
               <TR align="right">
                 <TD class="top">
                 
                 <A class="nodec" href="../../index.shtml"><FONT color=
                 "#DDDDDD" size="2">&lt;--</FONT></A> &nbsp;| 
                 <A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="2">Home</FONT></A> &nbsp;| 
                 <A class="nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="2">Map</FONT></A> &nbsp;| 
                 <A class="nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="2">Index</FONT></A> &nbsp;| 
                 <A class="nodec" href="../Search/index.html"><FONT color=
                 "#DDDDDD" size="2">Zoek</FONT></A> </TD>
                 
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Nieuws</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Archieven</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.html"><FONT color=
           "#FFFFFF">Links</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">Over LF</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Dit document is beschikbaar in: <A href="../../English/May1998/article44.html">English</a> &nbsp;<A href="../../Castellano/May1998/article44.html">Castellano</a> &nbsp;<A href="../../ChineseGB/May1998/article44.shtml">ChineseGB</a> &nbsp;<A href="../../Deutsch/May1998/article44.html">Deutsch</a> &nbsp;<A href="../../Francais/May1998/article44.html">Francais</a> &nbsp;<A href="../../Nederlands/May1998/article44.shtml">Nederlands</a> &nbsp;<A href="../../Russian/May1998/article44.html">Russian</a> &nbsp;<A href="../../Turkce/May1998/article44.html">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_START -->
<TABLE ALIGN="LEFT" BORDER="0" WIDTH="195" summary="about the author" class="left">
<TR>
<TD>

<IMG alt="[Photo of the Author]" width=100 height=133
 src="../../common/images/Ismael-R.gif">
<BR>door  Ismael Ripoll <br> <small>&lt;iripoll /at/ disca.upv.es&gt;</small>
<BR><BR>
<I>Over de auteur:</I><BR>
<!-- aboutauthor_start -->

Behaalde een graad aan de Polytechnische Universiteit van Valencia in 1996.
Professor in operating systemen op het departement van DISCA.
Onderzoeksgebieden omvatten onder andere real-time scheduling en operating systemen.
Linux gebruiker vanaf 1994. Hobbies: met de rugzak door de Pyrene&euml;n, ski&euml;n
en hobby electronica.


<!-- aboutauthor_stop -->
<!-- TRANSLATED_TO nl -->
<BR><BR><I>Vertaald naar het Nederlands door:</I><BR>
Tom Uijldert <small>&lt;Tom.Uijldert /at/ cmg.nl&gt;</small>
<br>
<!--
 =LF=TRANSTO=nl: Tom Uijldert
-->
<!-- TRANSLATED_TO_STOP -->
<!-- INDEX_START -->
<BR><i>Inhoud</i>:
<UL>
  <LI><A HREF="#44lfindex0">Wat is Real-Time?</A></LI>
  <LI><A HREF="#44lfindex1">Wat is de relatie tussen Operating System en Real-Time?</A></LI>
  <LI><A HREF="#44lfindex2">POSIX RT Uitbreidingen</A></LI>
  <LI><A HREF="#44lfindex3">Real-Time Linux</A></LI>
  <LI><A HREF="#44lfindex4">Installatie van RT-Linux</A></LI>
  <LI><A HREF="#44lfindex5">De toekomst van RT-Linux</A></LI>
  <LI><A HREF="#44lfindex6">Afronding</A></LI>
</UL>

</TD></TR></TABLE>
<!-- INDEX_STOP -->
<!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_STOP -->
<!-- HEAD_OF_THE_ARTICLE_START -->
<br>&nbsp;
<table border="0"><tr><td>
<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfPdf ver 0.1 -->
 

<H2>Real-Time Linux (RT-Linux)</H2>
 <IMG alt=[Illustration] width=100 height=100 hspace=10
 src="../../common/images/illustration33.gif">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Kort</i>:
<P>
<!-- articleabstract_start -->

Basis concepten van Real-Time (RT). Harde <EM>real-time</EM> met RT-Linux.


<!-- articleabstract_stop -->

<br><!-- HR divider --><center><font color="#8282e0"><b>_________________ _________________ _________________</b></font></center><br>
</td></tr></table>
<!-- HEAD_OF_THE_ARTICLE_STOP -->
<!-- BODY_OF_THE_ARTICLE_START -->


<A NAME="44lfindex0">&nbsp;</A>
<H3>Wat is Real-Time?</H3>

Voordat we RT-Linux gaan bespreken moeten we eerst het concept Real-Time behandelen.
Hierbij hanteren we de volgende definitie:
<P>
<EM>&quot;Een Real-Time systeem is een informatiesysteem waarbij het correct functioneren
niet alleen afhangt van de <STRONG>uitvoer</STRONG> van een algoritme maar ook van het
<STRONG>tijdstip</STRONG> waarop deze uitvoer wordt gegenereerd&quot;</EM>
<P>
Het is dus niet voldoende dat de uitvoer correct is, deze uitvoer moet ook worden gegenereerd
binnen een specifiek tijdsinterval. Merk op dat uit deze definitie niet automatisch volgt dat het
systeem ook snel is, een snel gemaakte fout. Voorbeeld: het geleidesysteem van een schip lijkt
geen real-time systeem te zijn door de lage snelheden, waardoor men gewoonlijk
&quot;genoeg&quot; tijd heeft (in de minuten) om een besturingsbeslissing te nemen. Per
definitie is dit echter een RT-systeem.
<P>
Merk op dat we een &quot;Real-Time Systeem&quot; hebben gedefinieerd en geen
&quot;Systeem in Real Time&quot;. Dergelijke systemen zijn doorgaans snel en in staat om een
indruk van &quot;echtheid&quot; te geven. Meest simulaties en interactieve spellen geven de
gebruiker het gevoel van voortschrijdende tijd. De snelheid om plaatjes te genereren kan
dit het beste bewerkstelligen.
<P>
Laten we eerst eens ingaan op het begrip <EM>temporele restrictie</EM>. Stel, we willen de
snelheid van een motor besturen die variabel wordt belast en we willen dit doen met een PIA
aansturing (Proportioneel Integrale Afgeleide). De PIA, in onze visie, is een functie met een
aantal parameters --in dit voorbeeld de snelheid van de motor-- die de waarde van het
stuursignaal teruggeeft wat op de motor moet worden toegepast --de hoeveelheid stroom die de
motor moet krijgen. De theorie achter het ontwerp van PIA algoritmen, die trouwens behoorlijk
veelomvattend is, gaat uit van de aanname dat de tijd om de berekening uit te voeren
verwaarloosbaar is. Onder normale omstandigheden kan een systeem wel een kleine vertraging
hebben. Een ander kenmerk van dit type aansturing is dat het periodiek moet worden uitgevoerd
oftewel, het PIA algoritme moet regelmatig uit worden gevoerd. Wanneer de tijd tussen twee
aanroepen van het PIA algoritme te lang wordt kan de motor een ongewenste snelheid krijgen.
Samenvattend: <EM>de PIA functie kan worden gezien als een periodiek te executeren
programma (Pi); tussen begin en einde van het algoritme kan slechts een interval zitten die niet
groter is als het maximum, zoals aangegeven in het ontwerp van de PIA (Di). Het executeren van
de PIA-code neemt verder een bepaalde tijd, afhankelijk van de snelheid van de processor
(Ci).</EM>
<P><SPACER TYPE=HORIZONTAL SIZE=15>Pi: Interval van taak i.</P>
<P><SPACER TYPE=HORIZONTAL SIZE=15>Di: Deadline van taak i.</P>
<P><SPACER TYPE=HORIZONTAL SIZE=15>Ci: <EM>worst case</EM> rekentijd voor taak i.</P>
<P>
Als het systeem slechts die ene taak heeft dan is dit geen probleem voor real-time: de processor
kan het in de gestelde tijd berekenen of niet. Voor het geval dat de processor niet snel genoeg is
moet deze gewoon worden ingeruild voor een snellere.
<P>
Het RT probleem gaat spelen als het systeem meerdere taken uit moet voeren en er dus een
manier moet worden gevonden om de processortijd (of processoren tijd) over de taken te
verdelen. Het gebruik van een algemeen systeem op basis van de tijd, zoals Linux, is dan
uitgesloten. Het is uiteraard overbodig om voor te stellen dit te proberen onder Windows.
Sterker nog, het advies kan beter zijn dat je helem&aacute;&aacute;l geen programma's op dat
platform moet maken.
<P>
Niet alle RT systemen zijn gelijk. Het verschilt nogal om een ABS systeem van een auto te
besturen of een brandstofinjectie systeem van een vliegtuig of het uitpakken en projecteren van
een mpeg bestand. In het eerste geval kan een kleine vertraging in de uitvoering van het
programma het verlies van mensenlevens of grote materi&euml;le schade betekenen; in het
laatste geval is er slechts sprake van kwaliteitsverlies (het plaatje bevriest of een aantal plaatjes
raakt verloren). Het eerste type systeem staat ook wel bekend als <STRONG>Harde Real-Time
Systemen</STRONG>, de tweede als <STRONG>Zachte Real-Time Systemen</STRONG>. In
dit artikel gaat het over harde RT systemen.
<P>
Het ontwerp van een RT systeem doorloopt meerdere fasen: allereerst wordt vastgesteld welke
taken er uit moeten worden gevoerd en wat hiervan de temporele restricties zijn. Ten tweede
wordt de code geschreven en tenslotte wordt de looptijd voor iedere taak gemeten en er wordt
een verdeeltest gedaan om er zeker van te zijn dat de taak niet n&aacute; de deadline afloopt in
een actief systeem. Deze test bestaat uit het doen van een aantal tests op alle taken. Pas als dit
goed gaat kan men garanderen dat geen enkele taak de deadline zal missen. Wanneer de testen
falen wordt het een kwestie van geheel opnieuw ontwerpen, een snellere processor nemen of
andere algoritmen bedenken voor de taken.
<P>
Samenvattend: De taken kan men defini&euml;ren middels drie tijdwaardes: Pi, Di en Ci. Doel
van het systeem is te garanderen dat alle taken (binnen alle executiepaden)de deadline halen.
Om dit te kunnen garanderen moet het systeem <STRONG>voorspelbaar</STRONG> zijn.
Verklaren dat een systeem real-time is of dat een systeem voorspelbaar is, is bijna hetzelfde.

<A NAME="44lfindex1">&nbsp;</A>
<H3>Wat is de relatie tussen Operating System en Real-Time?</H3>

De semantisch juiste reactie van een systeem is de verantwoordelijkheid van de programmeur en
het temporele gedrag hangt af van het Operating System (OS).
<P>
Het OS moet de uitvoer van de taken indelen en daarbij tevens de onderbrekingen
(<EM>interrupts</EM>) afhandelen. Het OS moet het volgende bieden:
<UL>
  <LI>Het algoritme voor het indelen van de taken.
  <LI>Het mechanisme voor inter-proces communicatie (semaforen, berichten etc.).
  <LI>Afhandelen van <EM>interrupts</EM>.
  <LI>Taken activeren in hun respectieve tijdssloten.
</UL>

In tegenstelling tot &quot;normale&quot; Operating Systemen is het doel van RT Operating
Systemen om de complexiteit tot een minimum te beperken. Men heeft geen behoefte aan een
OS dat van alles doet, wat telt is het voorspelbaar en snel uitvoeren van de taken.
<P>
Een OS dat 10 tijdseenheden doet over een context omschakeling met uitschieters naar 12
tijdseenheden, is verre te prefereren boven een OS dat er 3 tijdseenheden over doet met af en
toe uitschieters naar 20 tijdseenheden.
<P>
Het mag dan ook niet verbazen als je erachter komt dat RT Operating Systemen trager kunnen
zijn dan een normaal OS. In bepaalde gevallen is het zelfs nodig om een <EM>cache</EM> uit te
schakelen om zodoende een meer voorspelbaar gedrag te krijgen. Dit gaat natuurlijk ten koste
van de snelheid. Cachegeheugen en processoren met pipeline- en sprong-voorspellende
mechanismen staan duidelijk op gespannen voet met de voorspelbaarheid en daarmee dus ook
met RT Operating Systemen.
<P>
<center>
<IMG SRC="../../common/May1998/so1.gif" ALIGN=BOTTOM WIDTH=299 HEIGHT=174 BORDER=0>
</center>

<A NAME="44lfindex2">&nbsp;</A>
<H2>POSIX RT Uitbreidingen</H2>

Posix staat voor <B>P</B>ortable <B>O</B>perating <B>S</B>ystem <B>I</B>nterface (en wat
is tenslotte een OS zonder <B>X</B> op het eind?). Doel van deze standaard is een poging om
overdraagbaarheid van programma's te cre&euml;ren op het niveau van de broncode. Oftewel,
een programma, geschreven voor een Posix OS zou op ieder ander Posix OS moeten kunnen
draaien, zelfs al is het van een andere fabrikant. Posix definieert het interface wat het OS zou
moeten bieden richting applicaties: de verzameling <EM>system calls</EM>. Posix wordt
ontwikkeld door het IEEE (Institute for Electrical and Electronic Engineering) en tot standaard
verheven door het ANSI (American National Standards Institute) en het ISO (International
Standards Organization). Het moge duidelijk zijn dat Posix op Unix is gebaseerd. De meeste
Operating Systemen neigen tegenwoordig via hun diverse versies naar ondersteuning van Posix.
<P>
<center>
<IMG SRC="../../common/May1998/so2.gif" ALT="DrawObject" widht=300 height=182 Border=0>
</center>
<P>
Het werk (defini&euml;ren van Posix) wordt verdeeld over diverse werkgroepen die zijn
samengesteld uit vertegenwoordigers van fabrikanten, software bedrijven, overheid en uit
computer goeroes. Iedere groep gaat hierbij over een bepaald aspect van het OS. Zo gaat de
groep Posix.4 bijvoorbeeld over het real-time gedeelte.
<P>
De Posix.4 uitbreiding --omgedoopt tot 1003.1b sinds 1993-- geeft een OS de mogelijkheid om
een RT omgeving te ondersteunen. Het gaat hierbij uiteraard vooral om uitbreidingen met
betrekking tot <EM>time management</EM> en prioriteitsstelling van processen. Verder zijn er
systeemaanroepen voor de ondersteuning van inter-proces communicatie.
<P>
De Posix uitbreidingen zijn ontworpen voor meer controle over de <EM>resources</EM>
(hulpmiddelen of mechanismen) van een OS.
<P>
Linux 2.0 heeft een groot aantal Posix uitbreidingen voor  real-time ge&iuml;mplementeerd.
maar dit aspect van Linux zullen we in een later artikel bespreken. Versie 2.2 zal
hoogstwaarschijnlijk 100% ondersteuning bieden voor Posix 1003.1b.

<A NAME="44lfindex3">&nbsp;</A>
<H2>Real-Time Linux</H2>

RT-Linux werd ontwikkeld door het <EM>Department of Computer Science</EM> van het
<EM>Institute for Mining and Technology</EM> in New Mexico door Victor Yodaiken en Michael
Barabanov. Het is deels afkomstig van de afstudeeropdracht van Michael voor het behalen van
zijn graad in de computerwetenschappen. De laatste versie is 0.6. Op dit moment is het alleen
beschikbaar voor het Intel platform.
<P>
De oplossing binnen RT-Linux verschilt radicaal van de andere oplossingen. In plaats van het
aanpassen van de Linux <EM>kernel</EM> om hem voorspelbaar te krijgen, wordt er een mini-
kernel direct op de processor (i386) gebouwd --onafhankelijk van de Linux kernel-- met een
<EM>scheduler</EM> (= verdeler van processortijd over de taken). De Linux-kernel draait hier
weer bovenop, waarmee de processor wordt gedeeld met andere RT taken. Om precies te zijn is
Linux nu een achtergrondtaak die de processor krijgt toegewezen als er geen andere RT taken
lopen.
<P>
Ik kan me voorstellen dat er nu een aantal lezers in verwarring zijn gebracht. Waarschijnlijk
dachten die dat het OS altijd de baas was en er niet mee geknoeid kon worden.
<P>
<center>
<IMG SRC="../../common/May1998/so3.gif" ALT="DrawObject" width=448 height=232 border=0>
</center>
<P>
Het is misschien nog verrassender om te weten dat deze <EM>scheduler</EM> dynamisch kan
worden ge&iuml;nstalleerd en weer weggehaald omdat hij gecompileerd is als een module.
<P>
De code van de Linux kernel (net als ieder ander OS) zal normaal gesproken interrupts
uitschakelen voor bijvoorbeeld synchronisatiedoeleinden of voor het uitvoeren van kritieke code.
Als in dit soort gevallen een interrupt van de klok binnenkomt dan wordt deze geblokkeerd en is
er dus een verlies aan temporele precisie. RT-Linux heeft hiervoor een elegante oplossing: alle
aanroepen naar <CODE>cli</CODE>, <CODE>sti</CODE> en <CODE>iret</CODE>
(assembler aanroepen die de werking van interrupts be&iuml;nvloeden) worden vervangen door
aanroepen naar <CODE>S_CLI</CODE>, <CODE>S_STI</CODE> en
<CODE>S_IRET</CODE> die ze emuleren. Hierdoor kan Linux ze niet meer blokkeren.
<P>
De standaard scheduler van RT-Linux werkt <EM>preemptive</EM> (= het kan lopende taken
onderbreken en processoren vervolgens toewijzen aan andere taken) en met vaste
prioriteitsstelling. Het beschouwd Linux als een taak met de laagste prioriteit. Wanneer dus RT-
taken alle processortijd opeten dan zal de Linux taak geen tijd toegewezen krijgen en krijg je de
indruk dat Linux gestopt is.
<P>
Met RT-Linux hebben we dus niet alleen een real-time systeem maar ook een klassiek OS. We
kunnen over het web surfen terwijl ondertussen andere apparaten aan worden gestuurd.

<A NAME="44lfindex4">&nbsp;</A>
<H3>Installatie van RT-Linux</H3>

De bestanden van de distributie kunnen gevonden worden op
<A HREF="http://luz.cs.nmt.edu/~rtlinux">http://luz.cs.nt.edu/~rtlinux</A>.
<P>
Om een Linux systeem naar RT-Linux te &quot;transformeren&quot; moeten we een kleine
reparatie op de broncode van de kernel uitvoeren en deze opnieuw compileren. Hier is het
recept. Ik neem even aan dat de file <SAMP>rtlinux-0.6-2.0.33.tgz</SAMP> in de directory
<SAMP>/usr/src</SAMP> staat en uitgepakt in de directory <SAMP>/usr/src/rtlinux-0.6</SAMP>.
Tevens neem ik aan dat de juiste kernelopties al zijn geconfigureerd (<SAMP>make
config</SAMP>). Vervolgens:
<pre>
# cd /usr/src/linux
# patch       -p1 <../rtlinux-0.6-2.0.33/kernel_path
# make dep; make clean; make zlilo; make modules; make modules_install
# reboot
</pre>
De nieuwe kernel lijkt op een normale kernel. Hij is echter reeds voorbereid om om te zetten in
een real-time systeem. Deze programma's kun je vinden in <SAMP>/usr/src/rtlinux-0.6-
2.0.33/testing</SAMP>.
<P>
Naast de voorbeelden uit de distributie (in de directory <SAMP>testing</SAMP>) kun je nog een
voorbeeld ophalen, voorgekookt door Oleg Subbotin, wat een executie-chronogram van de taken
op het scherm tovert. E&eacute;n bestand uit deze demo is een gemodificeerde scheduler die,
buiten zijn normale taak, ook nog eens informatie genereert over de beslissingen die hij neemt.
Deze informatie wordt opgeslagen in een bestand, wat later grafisch kan worden weergegeven.
Het resultaat hiervan is dat we kunnen zien in welke volgorde de taken worden uitgevoerd en hoe
hogere prioriteit taken de lagere prioriteitstaken onderbreken en voorrang krijgen. De Linux taak
staat er niet bij.
<P>
<center>
<IMG SRC="../../common/May1998/crono.gif"  WIDTH=538 height=310  BORDER=0>
</center>
<P>
Iedere taak wordt gepresenteerd middels een horizontale as. De rechthoeken geven de tijden
aan waarop een taak de processor heeft gebruikt (op ieder moment kan er slechts
&eacute;&eacute;n taak actief zijn omdat het systeem slechts &eacute;&eacute;n processor
heeft). In dit voorbeeld is de deadline voor iedere taak gelijk aan z'n periode. De periode van
iedere taak wordt aangegeven door een tijdsinterval (weergegeven met:
<IMG SRC="../../common/May1998/crono2.gif" WIDTH=150 height=63 BORDER=0>) gedurende welke de
taak moet worden ge&euml;xecuteerd. De taken in het bovenste gedeelte hebben hogere
prioriteit en kunnen daarmee andere taken onderbreken en de processor afnemen zoals
bijvoorbeeld gebeurt op moment 600.

<A NAME="44lfindex5">&nbsp;</A>
<H2>De toekomst van RT-Linux</H2>

Er is ook al een multiprocessor versie van RT-Linux. De diensten die door RT-Linux ter
beschikking worden gesteld zijn expres minimaal gehouden. Functionaliteit die niet echt nodig is
hoeft er ook niet in zodat het systeem zo voorspelbaar mogelijk wordt. Desalniettemin zijn er
uitbreidingen voor het werken met semaforen en het besturen van RT-Linux taken middels
<SAMP>/proc/sys</SAMP>.
<P>
Een paar weken geleden is het maken van de handleiding gestart.

<A NAME="44lfindex6">&nbsp;</A>
<H3>Afronding</H3>

Voor de komst van RT-Linux moesten technici die met RT systemen wilden werken terugvallen
op &oacute;f MS-DOS en daarbij hun eigen aansturingen maken &oacute;f een compleet RT
systeem kopen (met een behoorlijk prijskaartje). Ontwikkelaars hebben nu een compleet
operating systeem om RT applicaties op te bouwen en ook daarop te draaien. Sterker nog, we
kunnen tegelijkertijd meerdere RT-applicaties laten lopen &eacute;n probleemloos over het web
surfen.
<P>
Het volgende artikel in deze reeks zal diverse voorbeelden van RT applicaties behandelen alsook
hoe deze zelf te maken.

<!-- vim: set sw=2 ts=2 et: -->



<!-- BODY_OF_THE_ARTICLE_STOP -->
<!-- 2pdaIgnoreStart -->
<br clear="all">
<HR size="2" noshade>
<table width="250" border=0><tr><td>
<div class="bbutton"><a class="nodec" href="../../index.shtml">&lt;--, LF Home</a></div>
</td><td>
<div class="bbutton"><a class="nodec" href="index.html">Terug naar de titelpagina van dit nummer</a></div>
</td></tr></table>
<br clear="all">
<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%" summary="footer">
<TR><TD ALIGN=CENTER BGCOLOR="#bdc6d5" WIDTH="50%">
<A HREF="../../common/lfteam.html">Site onderhouden door het LinuxFocus editors team</A>
<BR><FONT COLOR="#1111aa"><a href="../../common/copy.html">&copy; Ismael Ripoll</a><br>&quot;some rights reserved&quot; see <a href="../../license/index.shtml">linuxfocus.org/license/</a><br><a href="http://www.linuxfocus.org">http://www.LinuxFocus.org</a></FONT>
</TD>
<TD BGCOLOR="#bdc6d5">
<!-- TRANSLATION INFO -->
<font size=2>Vertaling info:</font>
<TABLE summary="translators">
  <tr><td><font size="2">es --&gt; -- : Ismael Ripoll <small>&lt;iripoll /at/ disca.upv.es&gt;</small></font></td></tr>
  <tr><td><font size="2">es --&gt; en: Miguel Angel Sepulveda &lt;angel /at/ mercury.chem.pitt.edu&gt;</font></td></tr>
  <tr><td><font size="2">en --&gt; nl: Tom Uijldert &lt;Tom.Uijldert /at/ cmg.nl&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2005-02-26, generated by lfparser version 2.52</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>