Beruflich Dokumente
Kultur Dokumente
Frank Singhoff Bureau C-207 Universit de Brest, France LISyC/EA 3883 singhoff@univ-brest.fr
Sommaire
1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.
Prsentation
Caractristiques des systmes embarqus temps rel et objectifs :
1. Comme tous systmes temps rel : dterminisme logique, temporel et abilit. 2. Mais en plus : Ressources limites (mmoire a , vitesse processeur, nergie). Accessibilit rduite. Autonomie leve. Interaction avec son environnement (capteurs).
= Environnements dexcution spciques.
a
Architecture en couches : Bibliothque langage (ou runtime) constituant lenvironnement dexcution dun programme (C, Ada). Portabilit de lapplication (adapte le langage au systme dexploitation). BSP/Board support package : portabilit du systme dexploitation (adapte le systme dexploitation au matriel).
UE systmes temps rel, Universit de Brest Page 5/128
Machine cible
RGDB
rsh
Hte (windows)
OS temps rel
Disque NFS
Phase de dveloppement : dition du source, compilation croise, tlchargement, excution et tests. Phase dexploitation : construction dune image minimale (excutif + application) sans les services de dveloppement. Stockage en EEPROM, Flash.
UE systmes temps rel, Universit de Brest Page 7/128
21.42
20 Pourcentage
19.7
15
12.84 10.19
10
6.64 5.96
5
4.69
3.89
pr
in
So
lu
tio
Caractristiques du march [TIM 00] : Diversit des produits prsents = produits gnralistes ou spciques des applications types. Prsence importante de produits "maisons".
UE systmes temps rel, Universit de Brest Page 8/128
in
III sC N uc E le us + RT RT -L X in Ch ux or us O S A ut re s do w
X RT
ire
ks
T S9
sN
O nx iR
S M
or
pS
ta
ri
op
do
vx
Ly
Langages de conception logicielle: UML/MARTE, AADL, HOOD HRT, ... Langages de programmation : Ada 2005, C, ... Systmes dexploitation : POSIX, ARINC 653, OSEK VDX, ...
Signication Services de base (ex : f ork , exec, ect) POSIX 1003.2 Commandes shell (ex : sh) POSIX 1003.1b [GAL 95] Temps rel POSIX 1003.1c [RIF 95] Threads POSIX 1003.5 POSIX et Ada etc
UE systmes temps rel, Universit de Brest Page 12/128
Consquence : que veut dire "tre conforme POSIX 1003.1b" ... pas grand chose puisque la partie obligatoire nest pas sufsante pour construire des applications temps rel.
Sommaire
1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.
with text_io ; use t e x t _ i o ; procedure Coucou i s begin Put_Line ( " Coucou " ) ; end Coucou ;
Amliorer la maintenabilit (lisibilit). Amliorer la scurit: analyse statique la compilation et lexcution (exception). Interdire les oprations entre variables de types diffrents (pas de cast implicite).
Type:
Type = taille mmoire + reprsentation + plage de valeurs + attributs/oprateurs. Plage de valeurs dnie par la norme (portabilit). Attribut : oprateurs pr-dnis pour tous les types, dnis par lutilisateur ou non.
UE systmes temps rel, Universit de Brest Page 27/128
Arithmtiques : +, -, *, /, mod Relationnels : =, /=, <=, >=, in, not, and, or, xor
UE systmes temps rel, Universit de Brest Page 28/128
/ / Programme C i n c o r r e c t / / q u i compile c o r r e c te m e n t t y p e d e f enum { ok , nok } t_ok_nok ; t y p e d e f enum { o f f , on } t _ o n _ o f f ; v o i d main ( ) { t_ok_nok s t a t u s = nok ; i f ( s t a t u s == on ) p r i n t f ( " i s on \ n " ) ; }
t4 ;
Conditionnelle :
i f cond then i 1 ; else i2 ; end i f ;
Entres/sorties (1)
Typage fort : chaque type doit disposer des services dentres/sorties mais familles de type. Services offerts par le paquetage Text_Io : pour les types String et Character uniquement (extrait de GNAT): Get : saisie dune chane de caractres de taille xe. Put : afchage dune chane de caractres. New_Line : retour chariot Put_Line : Put + New_Line Get_Line : saisie dune chane de caractres de taille variable. Autres types : instancier les paquetages gnriques Float_Io, Integer_Io, Enumeration_Io, ...
UE systmes temps rel, Universit de Brest Page 43/128
Entres/sorties (2)
Spcication de Text_Io: package Ada . Text_IO i s procedure Get ( Item : o u t S t r i n g ) ; procedure Put ( Item : S t r i n g ) ; procedure Get_Line ( Item : o u t S t r i n g ; Last : out Natural ) ; procedure Put_Line ( Item : S t r i n g ) ; procedure New_Line ( Spacing : P o s i t i v e _ C o u n t : = 1 ) ; generic ty p e Num i s range < >; package I n t e g e r _ I O i s . . . generic ty p e Num i s range < >; package Enumeration_IO i s . . .
Entres/sorties (3)
Exemple du gnrique Integer_Io: generic ty p e Num i s range < >; package Ada . Text_IO . I n t e g e r _ I O i s D e f a u l t _ W i d t h : F i e l d : = Num Width ; Default_Base procedure Put ( Item Base : Num; : Number_Base : = Default_Base ) ; Width : F i e l d : = D e f a u l t _ W i d t h ; procedure Get ( Item : o u t Num; Last : out P o s i t i v e ) ; end Ada . Text_IO . I n t e g e r _ I O ; : Number_Base : = 1 0 ;
Entres/sorties (4)
Exemple dutilisation de Integer_Io: w i t h t e x t _ i o ; use t e x t _ i o ; procedure I n t i o i s ty p e te m p e r a tu r e i s new i n t e g e r range 300..300; package t e m p e r a t u r e _ i o i s new t e x t _ i o . i n t e g e r _ i o ( te m p e r a tu r e ) ; t1 , t 2 : te m p e r a tu r e ; begin Put ( " S a i s i r te m p e r a tu r e 1 : " ) ; t e m p e r a t u r e _ i o . Get ( t 1 ) ; New_Line ; Put ( " S a i s i r te m p e r a tu r e 2 : " ) ; t e m p e r a t u r e _ i o . Get ( t 2 ) ; New_Line ; Put ( " Somme = " ) ; t e m p e r a t u r e _ i o . Put ( t 1 + t 2 ) ; New_Line ; exception when Da ta _ E r r o r => P u t _ l i n e ( " Donnee s a i s i e non conforme au ty p e temperature " ) ; end I n t i o ;
UE systmes temps rel, Universit de Brest Page 46/128
Entres/sorties (5)
Exercice 3 :
crire un programme qui permet de saisir des entiers et afche la somme des valeurs saisies. Le programme doit sarrter lorsque lutilisateur saisie le chiffre zro et doit sarrter et afcher une erreur lorsque les donnes saisies ne sont pas entires.
: Integer P2 , P3 ,
: = 110; P4 : I n t e g e r _ P t r ;
procedure A f f i c h e (A : i n Personne ) i s
package Ma_Liste i s new L i s t e s ( Personne , A f f i c h e ) ; use Ma_Liste ; Une_Liste : L i e n ; P begin P: = new Personne ; A j o u t e r ( Une_Liste , P ) ; A f f i c h e r ( Une_Liste ) ; ...
UE systmes temps rel, Universit de Brest Page 54/128
: Ma_Liste . Element_Ptr ;
p o i n t e u r s u r une personne
Concurrence
Tche Synchronisation et communication par rendez vous. Communication par objets protgs.
Tche (1)
Une tche Ada est constitue :
Dune spcication qui dcrit son interface. Partie visible. Dune implmentation qui contient le code excut par la tche. Partie cache. ventuellement dun type. Dans le cas contraire, on parle de tche anonyme.
Une tche Ada est dclare par :
Les instructions task/task type (spcication de la tche) et task body (implantation de la tche). La procdure principale est aussi une tche.
UE systmes temps rel, Universit de Brest Page 56/128
Tche (2)
Exemple dune tche anonyme, alloue statiquement :
w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_anonyme i s t a s k Ma_Tache ; t a s k body Ma_Tache i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Ma_Tache ; begin null ; end Tache_anonyme ;
Tche (3)
Exemple de tches types, alloues statiquement :
w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_type i s t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Un_Type ; T1 , T2 : Un_Type ; T : a r r a y ( 1 . . 1 0 ) o f Un_Type ; begin null ; end Tache_type ;
Tche (4)
Exemple de tches types, alloues dynamiquement :
w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_dynam i s t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Un_Type ; ty p e Un_Type_Ptr i s access Un_Type ; T : a r r a y ( 1 . . 3 ) o f Un_Type_Ptr ; begin f o r i i n 1 . . 3 loop T ( i ) : = new Un_Type ; end l o o p ; end Tache_dynam ;
UE systmes temps rel, Universit de Brest Page 59/128
Tche (5)
Une tche peut tre : active, avorte, acheve, termine. Rgles dactivation : Tche alloue statiquement: au dbut de bloc o la tche est dnie. Tche alloue dynamiquement : lors de lallocation dynamique. Rgles de terminaison : Sur exception: lexception est perdue si non rattrape. Lorsque toutes les tches de niveau infrieur sont termine. Avortement : grce linstruction abort x, avec x le nom de la tche.
Tche (6)
Ce programme est faux. Pourquoi ?
procedure T a c h e _ i n c o r r e c t e i s cpt : integer :=0; t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop c p t : = c p t +1; delay 1 . 0 ; end l o o p ; end Un_Type ; T1 , T2 : Un_Type ; begin delay 3 . 0 ; c p t : = c p t +1; a b o r t T1 ; a b o r t T2 ; end T a c h e _ i n c o r r e c t e ;
UE systmes temps rel, Universit de Brest Page 61/128
Tche (7)
Exercice 4 :
Dites pour les exemples de programme des pages 57, 58 et 59 quand les tches sont actives et quand elles sont termines.
Tche (8)
Exercice 5 :
crire un programme qui contient deux tches. La premire tche calcule et afche les lments de la suite Un = Un1 2 avec U0 = 1. La tche doit attendre une seconde entre le calcul/afchage de deux lments successifs. La deuxime tche calcule et afche les lments de la suite Un = Un1 +2 avec U0 = 0. La tche doit attendre deux secondes entre le calcul/afchage de deux lments successifs.
Concurrence
Tche Synchronisation et communication par rendez vous. Communication par objets protgs.
Le rendez vous est un mcanisme : Asymtrique : tche appelante et tche appele. Qui permet de synchroniser deux tches : le rendez vous ncessite que les deux tches soient simultanment prtes. Qui permet lchange de donnes entre deux tches.
UE systmes temps rel, Universit de Brest Page 65/128
Notion dentre: point de rendez vous dclar dans la spcication de la tche. Interface de la tche. Spcication de tche : peut comporter plusieurs entres. Instruction accept : permet une tche dattendre un rendez vous sur lune de ses entres, puis, dexcuter une squence dinstructions pendant le rendez vous. Appelants : se placent en position de rendez vous en rfrenant lentre voulue.
Clause select : permet dattendre simultanment sur plusieurs entres. Clause terminate : utilise conjointement avec select, permet dinterompre proprement une instruction accept Entre garde : condition boolenne dligibilit de lentre. Clause else : attente non bloquante sur les entres. ...
Concurrence
Tche Synchronisation et communication par rendez vous. Communication par objets protgs.
Fonctions : peuvent tre excutes de faon concurrente car ne change pas ltat des variables protges par lobjet protg: lecture des variables seulement. Procdures : excutes en exclusion mutuelle sur les variables protges.
= Verrous fonctions et procdures = lecteurs/rdacteurs.
Entres : idem procdure + garde boolenne. Une entre dont la garde est false ne peut tre excute (blocage de la tche), mme si aucune procdure/entre utilise lobjet.
UE systmes temps rel, Universit de Brest Page 74/128
!!");
package Lecteurs_Redacteurs i s protected ty p e Lecteur_Redacteur i s e n t r y Debut_Lecture ; procedure F i n _ L e c t u r e ; entry Debut_Ecriture ; procedure F i n _ E c r i t u r e ; private Nb_Lecteurs : N a t u r a l : = 0 ; Nb_Redacteurs : N a t u r a l : = 0 ; end Lecteur_Redacteur ; end l e c t e u r s _ R e d a c t e u r s ;
Temps rel
Services temps rel disponibles via les standards:
ISO/IEC Ada 1995/2005 : et en particulier les annexes C (Systems programming) et D (Real-Time) [TAF 06]. "Binding" Ada POSIX 1003 [BUR 07, GAL 95]. ARINC 653 [ARI 97]. ...
Temps rel
Avec Ada 2005, services temps rel offerts via des pragmas et des paquetages spciques:
Comment implanter une tche priodique : 1. Reprsenter le temps (paquetage Ada.Real_Time). 2. Implanter les rveils priodiques (instruction delay). 3. Affecter des priorits (pragma). Comment activer un protocole dhritage de priorit (pour des objets/types protgs). Comment slectionner un ordonnanceur (RM, EDF, ...). ...
Ada.Real_Time est un paquetage qui offre une horloge haute rsolution and documente, ainsi que des sous-programmes pour la manipuler.
Time implmente un date absolue. Ce type doit permettre dexprimer des dates de 50 ans au moins. Time_Span reprsente une dure. Time_Unit la plus petite unit de temps reprsentable par le type Time. Dni par limplmentation, mais doit tre infrieur ou gal 20 micro-secondes. Clock retourne le temps coul depuis epoch.
Sous-programmes pour convertir des donnes temporelles en Time_Span : Nanoseconds, Microseconds, ...
UE systmes temps rel, Universit de Brest Page 86/128
1. delay expr : bloque une tche pendant au moins expr units de temps. 2. delay until expr : bloque une tche jusquau moins la date expr.
Une tche ne peut pas tre rveille avant le dlai/date spci par linstruction delay. Mais une tche peut trs bien tre rveille aprs le dlai/date spci par linstruction delay. Une borne maximale doit tre documente par lditeur du compilateur.
i s A n y _ P r i o r i t y range
System.Priority doit offrir au moins 30 niveaux de priorit, mais plus, cest mieux pour lanalyse de lordonnancement.
Priorit de Base = priorit affecte statiquement. Priorit active = priorit hrite (accs aux objets protgs).
UE systmes temps rel, Universit de Brest Page 89/128
Toute tche a une priorit par dfaut (voir le paquetage System). Le pragma Priority peut tre employ dans la spcication dune tche. Le pragma Priority peut tre employ dans une procdure principale. Sans pragma, toute tche hrite de la priorit de la tche qui la instancie.
Tache
Tdisplay Tengine Tspeed
Priorit plafond dun objet protg = maximum des priorits de base des tches qui lemploient. Priorit active dune tche = maximum entre sa priorit de base et la priorit plafond de tous les objets protgs quil a verrouill.
pragma L o c k i n g _ P o l i c y ( C e i l i n g _ L o c k i n g ) ;
Comment implanter une tche priodique : 1. Reprsenter le temps (paquetage Ada.Real_Time). 2. Implanter les rveils priodiques (instruction delay). 3. Affecter des priorits (pragma). Comment activer un protocole dhritage de priorit (pour des objets/types protgs). Comment slectionner un ordonnanceur (RM, EDF, ...). ...
Une le dattente pour chaque niveau de priorit. Toutes les tches prtes de mme priorit sont insres dans la mme le dattente. Chaque le dattente a une politique (ou dispatching policy ). Deux niveaux dordonnancement: 1. Choisir la le dattente de priorit maximale avec au moins un tche. 2. Choisir la tche excuter parmi les tches de la le dattente slectionn en (1), et selon la politique de la le.
Exemple de la politique dordonnancement premptive priorit xe (politique FIFO_Within_Priorities) : Quand une tche devient prte, elle est insre la queue de le associe sa priorit. La tche en tte de le obtient le processeur quand sa le est la le de plus haute priorit avec une tche prte. Quand la tche en cours dexcution passe ltat bloque ou termine, alors elle quitte la le. = Il est facile dappliquer les tests de faisabilit (cf. cours sur Rate Monotonic), si les priorits sont correctement affectes (priorits uniques et selon la priode).
Autres politiques dordonnancement dAda 2005 : 1. Ordonnancement non premptif priorits xes :
pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( Non_Preemptive_FIFO_Within_Priorities ) ;
Cohabitation de tches critiques et non critiques grce des politiques diffrentes selon les niveaux de priorit :
pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( FIFO_Within_Priorities , 3 , 31); pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( EDF_Across_Priorities , 2 , 2 ) ; pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( Round_Robin_Within_Priorities , 0 , 1 ) ;
UE systmes temps rel, Universit de Brest Page 102/128
pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( F I F O _ W i t h i n _ P r i o r i t i e s ) ; pragma L o c k i n g _ P o l i c y ( C e i l i n g _ L o c k i n g ) ;
Ravenscar = sous-ensemble dAda compatible avec les tests de faisabilit. Ravenscar = prol dni par le standard Ada 2005. Prol = ensemble de restrictions, exprimes par des pragmas et vries par le compilateur, et donc assures lexcution. Activation de Ravenscar :
pragma p r o f i l e ( Ravenscar ) ;
No _ S p e c i fi c _ T e r m i n a ti o n _ Ha n d l e r s , No_Task_Allocators ,
Temps rel
Services temps rel disponibles via les standards :
ISO/IEC Ada 1995 and 2005 : et en particulier les annexes C (Systems programming) et D (Real-Time) [TAF 06]. Binding Ada POSIX 1003 [BUR 07, GAL 95]. ARINC 653 [ARI 97]. ...
Ordonnancement premptif priorits xes. Au moins 32 niveaux de priorits. Files dattente de tches prtes pour chaque priorit. Ordonnancement deux niveaux : 1. Choisir la le dattente de priorit maximale avec au moins une tche (prte). 2. Choisir la tche de la le slectionne en (1) selon une politique.
UE systmes temps rel, Universit de Brest Page 107/128
Politiques POSIX : 1. SCHED_FIFO : identique FIFO_Within_Priorities. La tche quitte la tte de le si : Terminaison de la tche. Blocage de la tche (E/S, attente dun dlai) => remise en queue. Libration explicite => remise en queue. 2. SCHED_RR : idem SCHED_FIFO mais en plus, la tche en tte de le est dplace en queue aprs expiration dun quantum (round robin). 3. SCHED_OT HERS : fonctionnement non normalis.
UE systmes temps rel, Universit de Brest Page 108/128
Sched_Other : c o n s t a n t S c h e d u l i n g _ P o l i c y : = . . . ty p e Scheduling_Parameters i s p r i v a t e ;
UE systmes temps rel, Universit de Brest Page 109/128
Sommaire
1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.
Runtime RTEMS : RTEMS : systme dexploitation temps rel/GNU GPL pour applications C et Ada critiques de faible envergure. Disponible pour de nombreux BSP (dont processeur Leon : 32 bits, VHDL open-source. SMP ou AMP, compatible SPARC, applications aronautiques/spatials). Compilateur GNAT/Ada 2005 (socit AdaCore). Compilation croise : compilation sur Linux, excution sur Leon.
UE systmes temps rel, Universit de Brest Page 117/128
sparcrtems4.8nm coucou . o b j >coucou . num # f i l e coucou . o b j coucou . o b j : ELF 32 b i t MSB executable , SPARC, v e r s i o n 1 (SYSV) , s t a t i c a l l y linked , not s tr i p p e d # f i l e / bin / l s / b i n / l s : ELF 32 b i t LSB executable , I n t e l 80386 , v e r s i o n 1 (SYSV) ,
ty p e B i t _ O r d e r i s ( H i g h _ O r d e r _ F i r s t , Low_Order_First ) ; Default_Bit_Order : constant Bit_Order := High_Order_First ; P r i o r i t y r e l a t e d D e c l a r a t i o n s (RM D. 1 ) RTEMS p r o v i d e s 0 . . 2 5 5 p r i o r i t y l e v e l s Max_Priority subtype A n y _ P r i o r i t y subtype P r i o r i t y : constant P o s i t i v e := 30; is Integer range 0 . . 31; 0 . . 30; M a x _ I n t e r r u p t _ P r i o r i t y : constant P o s i t i v e := 31; i s A n y _ P r i o r i t y range
ty p e B i t _ O r d e r i s ( H i g h _ O r d e r _ F i r s t , Low_Order_First ) ; D e f a u l t _ B i t _ O r d e r : c o n s t a n t B i t _ O r d e r : = Low_Order_First ; P r i o r i t y r e l a t e d D e c l a r a t i o n s (RM D. 1 ) L i n u x p r o v i d e s 0 . . 9 9 p r i o r i t y l e v e l s ( 0 f o r SCHED_OTHER, 1_99 f o r SCHED_FIFO /SCHED_RR Max_Priority subtype A n y _ P r i o r i t y subtype P r i o r i t y : constant P o s i t i v e := 97; is Integer range 0 . . 98; 0 . . 97; M a x _ I n t e r r u p t _ P r i o r i t y : constant P o s i t i v e := 98; i s A n y _ P r i o r i t y range
Sommaire
1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.
Rsum
Pourquoi Ada : abilit, abstractions temps rel, compilation spare, portabilit (modulo les capacits/caractristiques de la runtime). Concurrence, synchronisation et communication : tches Ada, rendez vous et objets protgs. Implanter une tche priodique : priorits, rveils priodiques, instant critique tre compatible avec les mthodes analytiques dordonnanabilit. Notions de compilation croise et de runtime.
Sommaire
1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.
Rfrences
[ARI 97] Arinc. Avionics Application Software Standard Interface. The Arinc Committee, January 1997. [BUR 07] A. Burns and A. Wellings. Concurrent and Real Time programming in Ada. 2007. Cambridge University Press, 2007. [GAL 95] B. O. Gallmeister. POSIX 4 : Programming for the Real World . OReilly and Associates, January 1995. [J. 93] J. M. Rifet. La programmation sous UNIX. Addison-Wesley, 3rd edition, 1993. [LES 10] D. Lesens. Using Static Analysis in Space. Why doing so ? . pages 5170. Proceedings of the SAS 2010 conference, Springer Verlag, LNCS, volume 6337, September 2010. [RIF 95] J. M. Rifet. La communication sous UNIX : applications rparties. Ediscience International, 2rd edition, 1995.
Rfrences
[TAF 06] S. T. Taft, R. A. Duff, R. L. Brukardt, E. Ploedereder, and P. Leroy. Ada 2005 Reference Manual. Language and Standard Libraries. International Standard ISO/IEC 8652/1995(E) with Technical Corrigendum 1 and Amendment 1. LNCS Springer Verlag, number XXII, volume 4348., 2006. [TIM 00] M. Timmerman. RTOS Market survey : preliminary result . Dedicated System Magazine, (1):68, January 2000. [VAH 96] U. Vahalia. UNIX Internals : the new frontiers. Prentice Hall, 1996.