EDFOMAI                    Daniele Bellavista, Luca Mella, Luca Ricci                 University of Bologna, Scuola di Ing...
Outline I1   Architettura      I-Pipe      RT-Nucleus      Skin      RTDM Skin      Real-Time Tasks2   Esempi su Xenomai3 ...
Outline II4   Esempi di implementazione su EDFOMAI5   Mapping SFC in Xenomai6   References     (University of Bologna)    ...
Architettura di Xenomai   (University of Bologna)   7/12/2012   4 / 74
Architettura: I-Pipe I    La pipeline di interrupt ` una astrazione software per la gestione degli                        ...
Architettura: I-Pipe II    Xenomai utilizza una pipeline a 3 domini: Il primo dominio (primary    domain) ` per RTOS Core,...
Architettura: I-Pipe III    (University of Bologna)   7/12/2012   7 / 74
Architettura: RTOS Core (RT-Nucleus) I   RT-Nucleus ` il nano-kernel di Xenomai che fornisce:               e   Supporto m...
Architettura: Native Skin I    Le Skin sono moduli linux che forniscono interfacce di pi` alto livello                    ...
Architettura: Native Skin II    Gestione dispositivi I/O: le API forniscono semplici meccanismi per                  gesti...
Architettura: Skin RTDM IReal-Time Driver Model ` un livello di astrazione che permette di unificare                       ...
Architettura: Skin RTDM II   Uniforma la creazione di device definendo dei device profile. Ognuno   di essi ha come propriet...
Xenomai Real Time Task II task realtime non sono associati ai processi Linux, ma sono gestitiindipendentemente e possono e...
Xenomai Real Time Task IISecondary mode (dominio Linux)I task hanno accesso a tutte le syscall di Linux ma al prezzo di ri...
Xenomai Real Time Task III   (University of Bologna)   7/12/2012   15 / 74
Esempi di implementazione su Xenomai I    Esempio di due task one-shot che utilizzano due semafori.1   s t a t i c RT TASK...
Esempi di implementazione su Xenomai II    Tasck incrementatore:1   v o i d taskOne ( v o i d ∗ a r g ) {2          int i ...
Esempi di implementazione su Xenomai III    Task decrementatore:1   v o i d taskTwo ( v o i d ∗ a r g ) {2          int i ...
Esempi di implementazione su Xenomai IV    Esempio di tre task periodici.1   RT TASK d e m o t a s k ; RT SEM s ;2   i n t...
Esempi di implementazione su Xenomai V12   v o i d demo ( v o i d ∗ a r g ) {3          RTIME p = 1 e9 ; RT TASK INFO c u ...
EDFOMAIIl Progetto    Lo scopo del progetto ` quello di implementare un meccanismo che                          e    perme...
EDFOMAI - Percorso di lavoro: Setup ambiente IProblemi iniziali    Avendo bisogno dei sorgenti del kernel e di xenomai per...
EDFOMAI - Percorso di lavoro: Setup ambiente IISoluzione    Abbiamo scelto di installare una ubuntu-12.04.1, dove la patch...
EDFOMAI - Implementazione di EDF su Xenomai IEDF scheduling e Xenomai   Xenomai non ha il concetto di deadline associato a...
EDFOMAI - Implementazione di EDF su Xenomai II                        Figura: Modello del sistema con EDFOMAI   (Universit...
EDFOMAI - Interfaccia I   (University of Bologna)   7/12/2012   26 / 74
EDFOMAI - Strutture dati IDeadlineIl concetto di DeadLine ` stato aggiunto creando una struttura dati che                 ...
EDFOMAI - Strutture dati II1        typedef struct rt deadline task {2          unsigned long deadline ;3          unsigne...
EDFOMAI - API Utente I                           Avvio di un task specificando la deadline.1       int edf task start (2   ...
EDFOMAI - API Utente II   (University of Bologna)   7/12/2012   30 / 74
EDFOMAI - API Utente III                                 Attesa fino al prossimo periodo1      e d f t a s k w a i t p e r ...
EDFOMAI - API Utente IV   (University of Bologna)   7/12/2012   32 / 74
EDFOMAI - Under the Hood IKernel space. . .Per fornire il supporto EDF ed agire sullo scheduling senza modificareNucleus, `...
EDFOMAI - Under the Hood II   Il modulo kernel deve reagire agli eventi di schedulazione, quindi viene   registrato un hoo...
EDFOMAI - Under the Hood III   Le corse critiche per strutture dati fra il modulo ed il task sono gestite   da un rtdm mut...
EDFOMAI - Under the Hood: Problematiche I   La procedura registrata sull’hook deve accedere a strutture dati   condivise p...
EDFOMAI - Under the Hood: Driver I        Il device virtuale ` un named device non realtime gestito a stream,             ...
EDFOMAI - Under the Hood: Driver II5        . d r i v e r n a m e = ”EDFOMAI” ,6        . d r i v e r v e r s i o n = RTDM...
EDFOMAI - Under the Hood: Driver III         Una scrittura sul device di un EDFMessage comporta l’acquisizione         del...
EDFOMAI - Under the Hood: Hook I         L’Hook ` creato all’avvio del device driver ed attaccato agli eventi di          ...
EDFOMAI - Under the Hood: EDF Service I       Alla creazione, EDF Service si mette in attesa dell’event creato dal       m...
EDFOMAI - Under the Hood: Deadline Miss Managment ISupporto Attuale    Ogni volta che viene ricalcolata la priorit`, viene...
EDFOMAI - Under the Hood: Deadline Miss Managment IIUnder Development. . .    Creazione di un watchdog per ogni task (RT A...
EDFOMAI - Under the Hood: Logs I1   Edfomai : [ @ d t c r e a t e ]      c r e a t i n g d t a s k ( T1 ) w i t h d e a d ...
EDFOMAI - Under the Hood: Logs II1   ...2   E d f o m a i : [ @ r e s e t d e a d l i n e ] r e s e t t i n g d e a d l i ...
Esempi di implementazione su EDFOMAI I    Semplice esempio di implementazione di un task periodico su edfomai.1   RT TASK ...
Esempi di implementazione su EDFOMAI II7                 e d f t a s k s t a r t (& demo task , p e r i o d s [ 2 ] ,8    ...
Esempi di implementazione su EDFOMAI III1   v o i d demo ( v o i d ∗ a r g ) {2           RT TASK INFO c u r t a s k i n f...
Esempi di implementazione su EDFOMAI IV    Esempio di implementazione di un Mars Rover, composto da 4 task    periodici se...
Esempi di implementazione su EDFOMAI V4        w a i t f o r c t r l c () ;5        r t p r i n t f ( ” c l o s i n g . . ...
Esempi di implementazione su EDFOMAI VI    Questa funzione inizializza il sistema Xenomai ed EDFOMAI.1   void init edfomai...
Esempi di implementazione su EDFOMAI VII    Questa funzione inizializza e fa partire i task.1   void startup () {2       /...
Esempi di implementazione su EDFOMAI VIII7        e d f t a s k s t a r t (& t a s k , params [ 1 ] [ 2 ] ∗ t , &p r o c e...
Esempi di implementazione su EDFOMAI IX    Funzione del task actuator.1   void act ( void ∗ arg ) {2       int i , res ;3 ...
Esempi di implementazione su EDFOMAI X6                 }7                 s h a r e d=r e s ;8                 r t t a s ...
Esempi di implementazione su EDFOMAI XI    Funzione del task processing.1   void process ( void ∗ arg ) {2            int ...
Esempi di implementazione su EDFOMAI XII6                 r t s e m v (& e x L o c k ) ;7                 r t s e m v (& p...
Esempi di implementazione su EDFOMAI XIII    Funzione del task sensing.1   void sense ( void ∗ arg ) {2       int i , res ...
Esempi di implementazione su EDFOMAI XIV6                 r t s e m v (& s e n s i n g D o n e ) ;7                 r t t ...
Esempi di implementazione su EDFOMAI XV    Funzione del task communicator.1   void comunicate ( void ∗ arg ) {2       int ...
Esempi di implementazione su EDFOMAI XVI    DMESG log1     [ 2 3 6 3 6 . 0 9 1 5 8 9 ] E d f o m a i : [ @ d t r c a l c p...
Esempi di implementazione su EDFOMAI XVII2   [ 2 3 6 3 6 . 1 6 1 9 3 1 ] Edfomai :     [ @dt rcalcp   ] r e c a l c u l a ...
Proposta di mapping SFC in Xenomai IProposal     Parte finale del progetto, non implementato.     Il framework deve offire me...
Proposta di mapping SFC in Xenomai IICiclo di campionamentoDopo aver inizializzato i data structure il framework inizia il...
Proposta di mapping SFC in Xenomai III   (University of Bologna)               7/12/2012   65 / 74
Proposta di mapping SFC in Xenomai IVModello di uno stepUno step ` composto da una struttura di collegamento, che lo colle...
Proposta di mapping SFC in Xenomai VStrutture di collegamentoSono strutture che collegano gli step predecessori con i succ...
Proposta di mapping SFC in Xenomai VI   (University of Bologna)              7/12/2012   68 / 74
Proposta di mapping SFC in Xenomai VII   (University of Bologna)               7/12/2012   69 / 74
Proposta di mapping SFC in Xenomai VIII   (University of Bologna)                7/12/2012   70 / 74
Proposta di mapping SFC in Xenomai IXAzioniLe azioni sono mappate in task xenomai e sono abilitate all’attivazionedello st...
Proposta di mapping SFC in Xenomai XQualificatori di azioniNon Stored: task periodico che termina con la disattivazione del...
References I   Adaptive Domain Enviroment for Operaring Systems   Karim Yaghmour   Xenomai APIs   Xenomai.org, http://www....
References II   Xenomai - Implementing a RTOS emulation framework on   GNU/Linux   Philippe Gerum, 2004   The Real-Time Dr...
Domande                            ?  (University of Bologna)       7/12/2012   75 / 74
Upcoming SlideShare
Loading in …5
×

Xenomai overview and Edfomai

846 views

Published on

Edf scheduling policy implemented as a module over Xenomai real time system.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
846
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Xenomai overview and Edfomai

  1. 1. EDFOMAI Daniele Bellavista, Luca Mella, Luca Ricci University of Bologna, Scuola di Ingegneria ed Architettura Laurea Magistrale in Ingegneria Informatica Corso di Sistemi e Tecnologie per l’Automazione LM Anno Accademico: 2012/2013 {daniele.bellavista,luca.mella,luca.ricci14}@studio.unibo.it 7/12/2012(University of Bologna) 7/12/2012 1 / 74
  2. 2. Outline I1 Architettura I-Pipe RT-Nucleus Skin RTDM Skin Real-Time Tasks2 Esempi su Xenomai3 EDFOMAI Percorso di lavoro Descrizione Interfaccia Under the Hood Device Hook EDF Service Deadline Miss Logs (University of Bologna) 7/12/2012 2 / 74
  3. 3. Outline II4 Esempi di implementazione su EDFOMAI5 Mapping SFC in Xenomai6 References (University of Bologna) 7/12/2012 3 / 74
  4. 4. Architettura di Xenomai (University of Bologna) 7/12/2012 4 / 74
  5. 5. Architettura: I-Pipe I La pipeline di interrupt ` una astrazione software per la gestione degli e interrupt trap implementata da Adeos (Adaptive Domain Environment for Operating Systems). Adeos gestisce una pipeline di domini ai quali ` possibile associare e degli interrupt handler, gestendo in questo modo l’ordine di temporale di ricezione degli interrupt. Adeos permette di stallare un interrupt in un certo dominio impedendo l’attraversamento della pipeline. (University of Bologna) 7/12/2012 5 / 74
  6. 6. Architettura: I-Pipe II Xenomai utilizza una pipeline a 3 domini: Il primo dominio (primary domain) ` per RTOS Core, il terzo (secondary domain) per il kernel e Linux. Grazie a questa separazione, Xenomai riceve gli interrupt prima del kernel in modo da avere una priorit` maggiore di esecuzione. a Il secondo dominio, chiamato Interrupt Shield serve per stallare gli eventi diretti al kernel, evitando che Task RT subiscano preemption non volute. (University of Bologna) 7/12/2012 6 / 74
  7. 7. Architettura: I-Pipe III (University of Bologna) 7/12/2012 7 / 74
  8. 8. Architettura: RTOS Core (RT-Nucleus) I RT-Nucleus ` il nano-kernel di Xenomai che fornisce: e Supporto multithreading: priorit` e priority inerithance, possibilit` di a a limitare il wait su una risorsa, round-robin scheduling per task con la medesima priorit`. a Supporto sincronizzazione: fornisce un semplice oggetto xnsynch, che supporta priortiy inversion, attese time-bounded e forcible deletion. Gestione del timing e del clock: il Nucleus si interfaccia con il timer hardware e permette la gestione oneshot (hardware riprogrammato ad ogni tick) o periodic (utile se si dispone di un Programmable Interrupt Timer). Supporto per l’allocazione della memoria: gestione basilare di uno heap real-time. (University of Bologna) 7/12/2012 8 / 74
  9. 9. Architettura: Native Skin I Le Skin sono moduli linux che forniscono interfacce di pi` alto livello u scritte in vari standard (nativo, POSIX, VxWorks, RTAI, . . . ) Le API definiscono 6 categorie di syscall utilizzabii in kernel space, user space o in entrambi: Gestione Task: API che permettono la gestione dei task e della loro schedulazione. Servizi Timing: API per accedere ai servizi di timing di basso livello. Inoltre forniscono gli Alarm, ovvero watchdog per uso generale. Servizi Sincronizzazione: semafori, mutex, condition variable e event flag group. Comunicazione: comunicazione inter-task sincrona a messaggi, code di messaggi, memoria heap condivisa e messagge pipe per lo scambio di dati con processi Linux. (University of Bologna) 7/12/2012 9 / 74
  10. 10. Architettura: Native Skin II Gestione dispositivi I/O: le API forniscono semplici meccanismi per gestire interrupt e I/O. Una gestione pi` avanzata u richiete l’utilizzo dell’interfaccia RTDM (Real-Time Driver Model). Registri: i registri sono componenti che permettono di indicizzare strutture dati per poter essere riferite da qualunque spazio di esecuzione. (University of Bologna) 7/12/2012 10 / 74
  11. 11. Architettura: Skin RTDM IReal-Time Driver Model ` un livello di astrazione che permette di unificare ele interfacce per lo sviluppo di driver. In Xenomai ` implementata come euna skin. (University of Bologna) 7/12/2012 11 / 74
  12. 12. Architettura: Skin RTDM II Uniforma la creazione di device definendo dei device profile. Ognuno di essi ha come propriet`: a Caratteristica: device named (open()/close()) o protocol (socket()/close()). Operazioni: insieme delle operazioni supportate (eg: read(), write(), ioctl(), send msg(),. . . ), specificando il contesto di invocazione (rt o non rt) e il significato del valore di ritorno. Tipi di dato e costanti: definizione di tutte le strutture e dati necessari per il device (eg: le sock addr per le socket). Permette di registare device con un unica interfaccia e assegnarli un contesto: real-time o non real-time. (University of Bologna) 7/12/2012 12 / 74
  13. 13. Xenomai Real Time Task II task realtime non sono associati ai processi Linux, ma sono gestitiindipendentemente e possono essere in esecuzione su due differentiexecution mode:Primary mode (dominio Xenomai)I task risiedono in user-space e sono schedulati da Xenomai, dunque si hauna protezione della memoria e una latency estremamente bassa, poich´ lo escheduler di Xenomai non ` legato alle attivit` del kernel Linux. e a (University of Bologna) 7/12/2012 13 / 74
  14. 14. Xenomai Real Time Task IISecondary mode (dominio Linux)I task hanno accesso a tutte le syscall di Linux ma al prezzo di risentire delnon-determinismo introdotto dallo scheduler del kernel. Il problema si risolve abilitando l’interrupt shield, bloccando in questo modo la preemption del task fintanto che ` in stato di running: e l’intero kernel linux eredita la sua priorit`. a Questa soluzione soffre di priority inversion: tutti i thread in primary che aspettano un interrupt rimangono bloccati. Si risolve creando interrupt con RTDM che sono diretti per il dominio Adeos Xenomai. (University of Bologna) 7/12/2012 14 / 74
  15. 15. Xenomai Real Time Task III (University of Bologna) 7/12/2012 15 / 74
  16. 16. Esempi di implementazione su Xenomai I Esempio di due task one-shot che utilizzano due semafori.1 s t a t i c RT TASK t1 , t 2 ; RT SEM s e m G l o b a l 1 , s e m G l o b a l 2 ;2 int global = 0;3 i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) {4 // I n i t t h e p r o c e s s non−r t o u t p u t b u f f e r5 r t p r i n t a u t o i n i t (1) ;6 // D i s a b l e l i n u x on−demand p a g i n g scheme7 m l o c k a l l (MCL CURRENT | MCL FUTURE) ;8 r t s e m c r e a t e (& s e m G l o b a l 1 , ” semaphore1 ” , 1 , S FIFO ) ;9 r t s e m c r e a t e (& s e m G l o b a l 2 , ” semaphore2 ” , 0 , S FIFO ) ;0 r t t a s k c r e a t e (& t1 , ” taskOne ” , 0 , 1 0 , 0 ) ;1 r t t a s k c r e a t e (& t2 , ” taskTwo ” , 0 , 1 0 , 0 ) ;2 r t t a s k s t a r t (& t1 ,& taskOne , NULL) ;3 r t t a s k s t a r t (& t2 ,& taskTwo , NULL) ; } (University of Bologna) 7/12/2012 16 / 74
  17. 17. Esempi di implementazione su Xenomai II Tasck incrementatore:1 v o i d taskOne ( v o i d ∗ a r g ) {2 int i ;3 f o r ( i =0; i <ITER ; i ++){4 r t s e m p (& s e m G l o b a l 1 , 0 ) ;5 r t p r i n t f ( ” I ’m taskOne and g l o b a l = %d . . . n” ,6 ++g l o b a l ) ;7 r t s e m v (& s e m G l o b a l 2 ) ;8 }9 } (University of Bologna) 7/12/2012 17 / 74
  18. 18. Esempi di implementazione su Xenomai III Task decrementatore:1 v o i d taskTwo ( v o i d ∗ a r g ) {2 int i ;3 f o r ( i =0; i <ITER ; i ++){4 r t s e m p (& s e m G l o b a l 2 , 0 ) ;5 r t p r i n t f ( ” I ’m taskTwo and g l o b a l = %d−−−n” ,6 −−g l o b a l ) ;7 r t s e m v (& s e m G l o b a l 1 ) ;8 }9 } (University of Bologna) 7/12/2012 18 / 74
  19. 19. Esempi di implementazione su Xenomai IV Esempio di tre task periodici.1 RT TASK d e m o t a s k ; RT SEM s ;2 i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) {3 char s t r [ 1 0 ] ; i n t periods [ 3 ] ; i n t i ;4 r t p r i n t a u t o i n i t (1) ;5 m l o c k a l l (MCL CURRENT | MCL FUTURE) ;6 r t p r i n t f ( ” [ Main ] : s t a r t t a s k n” ) ;7 f o r ( i =0; i <3; i ++){8 s p r i n t f ( s t r , ” Task−%d” , i ) ;9 p e r i o d s [ i ]= i +1;0 r t t a s k c r e a t e (& demo task , s t r ,10 ,50+ i , 0 ) ;1 r t t a s k s t a r t (& demo task ,&demo ,& p e r i o d s [ i ] ) ;2 }3 r t p r i n t f ( ” end program by CTRL−Cn” ) ; p a u s e ( ) ;4 } (University of Bologna) 7/12/2012 19 / 74
  20. 20. Esempi di implementazione su Xenomai V12 v o i d demo ( v o i d ∗ a r g ) {3 RTIME p = 1 e9 ; RT TASK INFO c u r t a s k i n f o ;4 int retval = r t t a s k i n q u i r e ( r t t a s k s e l f () ,5 &c u r t a s k i n f o ) ; // i n q u i r e c u r r e n t t a s k6 r e t v a l = ∗ ( i n t ∗ ) a r g ; p ∗= r e t v a l ;7 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, p∗ r e t v a l ) ;8 while (1) {9 r t t i m e r s p i n ( p / 2 ) ; // Busy Wait0 r t p r i n t f ( ”[% s ] %d s p e r i o d i c n” ,1 c u r t a s k i n f o . name , r e t v a l ) ;2 r t t a s k w a i t p e r i o d (NULL) ;3 }4 } (University of Bologna) 7/12/2012 20 / 74
  21. 21. EDFOMAIIl Progetto Lo scopo del progetto ` quello di implementare un meccanismo che e permetta lo scheduling EDF su Xenomai. Successivamente, l’implementazione ` da testare sviluppando appositi e esempi. Abbiamo chiamato il progetto EDFOMAISorgentihttps://github.com/dbellavista/edfomai/ (University of Bologna) 7/12/2012 21 / 74
  22. 22. EDFOMAI - Percorso di lavoro: Setup ambiente IProblemi iniziali Avendo bisogno dei sorgenti del kernel e di xenomai per poter implementare driver, abbiamo provato ad installare l’ultima versione di Xenomai su Debian 6. Adeos non supporta il kernel stabile di Debian 6, quindi abbiamo dovuto installare una versione successiva. Dopo numerevoli tentativi abbiamo abbandonato l’idea: non riuscivamo a far funzionare il sistema. L’unica macchina che funzionasse era una virtual machine trovata sul web con installato Debian 4 e Xenomai 2.4 (ora ` stabile la 2.6). e La virtual machine non possedeva gli header e i sorgenti di xenomai e del kernel e non siamo riusciti ad installarli. (University of Bologna) 7/12/2012 22 / 74
  23. 23. EDFOMAI - Percorso di lavoro: Setup ambiente IISoluzione Abbiamo scelto di installare una ubuntu-12.04.1, dove la patch adeos, xenomai ed alcuni utili script sono disponibili direttamente dai repository (Xenomai v2.5.6) In seguito sono stati scaricati e patchati i sorgenti di linux 2.6.35.7. Infine abbiamo compilato il kernel patchato e pacchettizzato sia binanari che headers in comodi e riutilizzabili .deb (University of Bologna) 7/12/2012 23 / 74
  24. 24. EDFOMAI - Implementazione di EDF su Xenomai IEDF scheduling e Xenomai Xenomai non ha il concetto di deadline associato ad un task: implementazione banale di EDF ` dunque impossibile. e La strada seguita in[Santos et.all,2009] ` stata quella di modificare e direttamente Nucleus per implementare direttamente API e strutture dati necessarie. Visto il tempo e gli strumenti a disposizione e l’impossibilit` di a compilare il nucleus abbiamo ritenuto necessario utilizzare un approccio pi` versatile: u EDFOMAI ` un layer logico costruito sopra la skin nativa. e I task RT utilizzano EDFOMAI per inizializzazione, configurazione ed attesa. (University of Bologna) 7/12/2012 24 / 74
  25. 25. EDFOMAI - Implementazione di EDF su Xenomai II Figura: Modello del sistema con EDFOMAI (University of Bologna) 7/12/2012 25 / 74
  26. 26. EDFOMAI - Interfaccia I (University of Bologna) 7/12/2012 26 / 74
  27. 27. EDFOMAI - Strutture dati IDeadlineIl concetto di DeadLine ` stato aggiunto creando una struttura dati che emantiene il riferimento ad un RT TASK con al suo interno campi utili peril ricalcolo della priorit`. Inoltre ` stato predisposto spazio sufficiente per a eospitare una struttura RT TASK INFO, che contiene utili informazionicome la priorit` corrente. aInsieme al concetto di DeadLine ` previsto un meccanismo di Miss eDeadLine: l’utente specifica un handler che ` richiamato in caso di emancata terminazione del task entro la deadline prefissata. (University of Bologna) 7/12/2012 27 / 74
  28. 28. EDFOMAI - Strutture dati II1 typedef struct rt deadline task {2 unsigned long deadline ;3 unsigned long remain ;4 unsigned long r e l a t i v e d e a d l i n e ;5 RT TASK ∗ t a s k ;6 RT TASK INFO t a s k i n f o ; } RT DEADLINE TASK ; Tempi ed unit` di misura a Da notare che a seconda che il timer di sistema sia programmato in oneshot o periodic mode, la deadline ` espressa in nanosecondi o jiffies. e . . . Quindi attenzione a come compilate Xenomai! (University of Bologna) 7/12/2012 28 / 74
  29. 29. EDFOMAI - API Utente I Avvio di un task specificando la deadline.1 int edf task start (2 RT TASK ∗ t a s k ,3 unsigned long deadline ,4 v o i d (∗ procedure ) ( v o i d ∗ arg ) , v o i d ∗ arg ) ; (University of Bologna) 7/12/2012 29 / 74
  30. 30. EDFOMAI - API Utente II (University of Bologna) 7/12/2012 30 / 74
  31. 31. EDFOMAI - API Utente III Attesa fino al prossimo periodo1 e d f t a s k w a i t p e r i o d ( unsigned long ∗ overruns ) (University of Bologna) 7/12/2012 31 / 74
  32. 32. EDFOMAI - API Utente IV (University of Bologna) 7/12/2012 32 / 74
  33. 33. EDFOMAI - Under the Hood IKernel space. . .Per fornire il supporto EDF ed agire sullo scheduling senza modificareNucleus, ` stato necessario implementare un modulo/driver, capace di elavorare al livello del kernel Xenomai. (University of Bologna) 7/12/2012 33 / 74
  34. 34. EDFOMAI - Under the Hood II Il modulo kernel deve reagire agli eventi di schedulazione, quindi viene registrato un hook allo scheduler (rt task add hook). Le strutture rt deadline task sono memorizzate all’interno di una HASHMAP per consentire un tempo di accesso O(1). Un task di servizio (EDF Service) viene creato per servire le richieste di ricalcolo priorit`. a Il calcolo della priorit` ha complessit` O(N). a a La priorit` viene ricalcolata ad ogni a creazione di task switch di contesto set/reset di deadline cancellazione di task La comunicazione con driver gestita attraverso delle write sul device: il modulo legge un EDFMessage ed aggiorna le strutture dati. (University of Bologna) 7/12/2012 34 / 74
  35. 35. EDFOMAI - Under the Hood III Le corse critiche per strutture dati fra il modulo ed il task sono gestite da un rtdm mutex. Gli RT TASK vengono recuperati grazie al registro (xnregistry bind,xnregistry fetch), attraverso API utilizzabili solo a livello Kernel E’previsto il supporto alle notifiche di deadline-miss attraverso RT QUEUE accessibili anche in user-space. (University of Bologna) 7/12/2012 35 / 74
  36. 36. EDFOMAI - Under the Hood: Problematiche I La procedura registrata sull’hook deve accedere a strutture dati condivise per aggiornarne lo stato, ma non pu` usare dei lock, poich´ o e ` eseguito nel contesto di un interrupt (non preemptable). e Dunque ` necessario usare un task di servizio (EDF Service), che e attenda appositi rtdm event e che si preoccupi dell’accesso alle strutture. La presenza del task/servizio ` inoltre motivata dalla non e compatibilit` nella alterazione delle politiche di scheduling all’interno a di un hook dello scheduler stesso (rt task set priority pu` causare o rescheduling). Quindi, quando l’hook ` richiamato l’event ` segnalato e EDF Service e e ricalcola le priorit` in base alle deadline. a (University of Bologna) 7/12/2012 36 / 74
  37. 37. EDFOMAI - Under the Hood: Driver I Il device virtuale ` un named device non realtime gestito a stream, e descritto dal seguente profilo:1 s t a t i c struct rtdm device device = {2 . s t r u c t v e r s i o n = RTDM DEVICE STRUCT VER ,3 . d e v i c e f l a g s = RTDM NAMED DEVICE ,4 . context size = sizeof ( context t ) ,5 . d e v i c e n a m e = DEVICE NAME ,6 . open nrt = edf rtdm open nrt ,7 . ops = {8 . close nrt = edf rtdm close nrt ,9 . read nrt = edf rtdm read nrt ,0 . write nrt = edf rtdm write nrt ,1 },2 . d e v i c e c l a s s = RTDM CLASS EXPERIMENTAL ,3 . d e v i c e s u b c l a s s = SOME SUB CLASS ,4 . profile version = 1, (University of Bologna) 7/12/2012 37 / 74
  38. 38. EDFOMAI - Under the Hood: Driver II5 . d r i v e r n a m e = ”EDFOMAI” ,6 . d r i v e r v e r s i o n = RTDM DRIVER VER ( 0 , 0 , 1 ) ,7 . p e r i p h e r a l n a m e = ”EDFOMAI−SCHED−SVC” ,8 . p r o v i d e r n a m e = ” Luca M e l l a ” ,9 . proc na m e = d e v i c e . d e v i c e n a m e ,0 }; (University of Bologna) 7/12/2012 38 / 74
  39. 39. EDFOMAI - Under the Hood: Driver III Una scrittura sul device di un EDFMessage comporta l’acquisizione del lock sulla struttura dati dei task e l’esecuzione di una funzione su di essi:1 static ssize t edf rtdm write nrt (2 s t r u c t rtdm dev context ∗ context ,3 rtdm user info t ∗ user info ,4 c o n s t v o i d ∗ buf , s i z e t n b y t e ) {5 ...6 s w i t c h ( message−>command ) {7 c a s e CREATE TASK :8 mtx acquire () ;9 r t d t a s k c r e a t e ( t a s k , message−>d e a d l i n e ) ;0 mtx release () ;1 break ;2 ...}...} (University of Bologna) 7/12/2012 39 / 74
  40. 40. EDFOMAI - Under the Hood: Hook I L’Hook ` creato all’avvio del device driver ed attaccato agli eventi di e scheduling. Quando lo scheduler effettua un cambio di contesto o un nuovo task ` inserito, l’hook ` richiamato. e e Al suo interno, l’hook segnala l’evento, svegliando il task EDF Service.1 void edf startswitch hook ( void ∗ cookie ){2 RT TASK ∗ t a s k ;3 t a s k=T DESC ( c o o k i e ) ;4 r t d m e v e n t s i g n a l (& e d f e v e n t ) ;5 } (University of Bologna) 7/12/2012 40 / 74
  41. 41. EDFOMAI - Under the Hood: EDF Service I Alla creazione, EDF Service si mette in attesa dell’event creato dal modulo. L’event ` segnalato dall’hook al verificarsi di eventi di scheduling. e Al risveglio, EDF Service esegue il calcolo dinamico della priorit`. a NOTA: ` importante che EDF Service abbia priorit` maggiore dei task e a di cui ricalcola la priorit`. a1 void e d f s e r v i c e ( void ∗ arg ) {2 int ret ;3 f o r ( ; ; ) { r t d m e v e n t w a i t (& e d f e v e n t ) ;4 r e t= m t x a c q u i r e ( ) ;5 i f ( ret ) continue ;6 r t d t a s k r e c a l c u l a t e p r i o () ;7 r e t= m t x r e l e a s e ( ) ;8 r t d m e v e n t c l e a r (& e d f e v e n t ) ; } } (University of Bologna) 7/12/2012 41 / 74
  42. 42. EDFOMAI - Under the Hood: Deadline Miss Managment ISupporto Attuale Ogni volta che viene ricalcolata la priorit`, viene controllato lo stato a della deadline. Se un task non ha rispettato la sua deadline il modulo Edfomai (deadline missed) invia tempestivamente la notifica nella RT QUEUE “EDF-DMISSED-Q” Lato utente occorre prima “bindare” la coda di messaggi (rt queue bind) ed in seguito attendere la ricezione delle notifiche di deadline miss (rt queue read). La priorit` del task con deadline-miss rimane alta. a (University of Bologna) 7/12/2012 42 / 74
  43. 43. EDFOMAI - Under the Hood: Deadline Miss Managment IIUnder Development. . . Creazione di un watchdog per ogni task (RT ALARM) che se non resettato notifica immediatamente la deadline-miss. Il watchdog viene resettato prima che il task esegua una wait period, e riattivato al risveglio. Questo approccio pu` diminuire i tempi di reazione ad una o deadline-miss, nel caso precedente potrebbero esserci latenze non predicibili. API di supporto per deadline-miss monitoring. (University of Bologna) 7/12/2012 43 / 74
  44. 44. EDFOMAI - Under the Hood: Logs I1 Edfomai : [ @ d t c r e a t e ] c r e a t i n g d t a s k ( T1 ) w i t h d e a d l i n e 2000002 ...3 Edfomai : [ @ d t c r e a t e ] c r e a t i n g d t a s k ( T2 ) w i t h d e a d l i n e 3500004 ...5 Edfomai : [ @ d t c r e a t e ] c r e a t i n g d t a s k ( T3 ) w i t h d e a d l i n e 2500006 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s of 3 tasks7 Edfomai : [ @ r e c a l c p r i o ] t a s k ( T1 ) o l d P ( 5 0 ) newP ( 5 0 ) r e m a i n ( 1 0 3 4 3 5 ) maxRem ( 3 0 0 0 6 0 ) minRem =(103435)8 Edfomai : [ @ r e c a l c p r i o ] t a s k ( T2 ) o l d P ( 0 ) newP ( 0 ) r e m a i n ( 3 0 0 0 6 0 ) maxRem ( 3 0 0 0 6 0 ) minRem =(103435)9 Edfomai : [ @ r e c a l c p r i o ] t a s k ( T3 ) o l d P ( 2 5 ) newP ( 1 6 ) r e m a i n ( 2 4 1 0 0 3 ) maxRem ( 3 0 0 0 6 0 ) minRem =(103435)0 ... Listing 1: Edfomai logs (dmesg), aggiustamento priorit` a (University of Bologna) 7/12/2012 44 / 74
  45. 45. EDFOMAI - Under the Hood: Logs II1 ...2 E d f o m a i : [ @ r e s e t d e a d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k T13 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s o f 3 t a s k s4 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T1 ) o l d P ( 5 0 ) newP ( 0 ) r e m a i n ( 1 9 9 8 3 5 2 ) maxRem ( 1 9 9 8 3 5 2 ) minRem =(390050)5 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T2 ) o l d P ( 0 ) newP ( 2 0 ) r e m a i n ( 1 3 7 3 5 1 7 ) maxRem ( 1 9 9 8 3 5 2 ) minRem =(390050)6 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T3 ) o l d P ( 2 5 ) newP ( 5 0 ) r e m a i n ( 3 9 0 0 5 0 ) maxRem ( 1 9 9 8 3 5 2 ) minRem =(390050)7 E d f o m a i : [ @ w r i t e ] s e r v i n g r e q u e s t f o r t a s k ( T3 )8 E d f o m a i : [ @ w r i t e ] t a s k r e s e t d e a d l i n e ( T3 )9 E d f o m a i : [ @ r e s e t d e a d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k T30 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s o f 3 t a s k s1 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T1 ) o l d P ( 0 ) newP ( 3 2 ) r e m a i n ( 1 4 7 0 9 1 7 ) maxRem ( 2 4 9 8 3 4 9 ) minRem =(846082)2 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T2 ) o l d P ( 2 0 ) newP ( 5 0 ) r e m a i n ( 8 4 6 0 8 2 ) maxRem ( 2 4 9 8 3 4 9 ) minRem =(846082)3 E d f o m a i : [ @ r e c a l c p r i o ] t a s k ( T3 ) o l d P ( 5 0 ) newP ( 0 ) r e m a i n ( 2 4 9 8 3 4 9 ) maxRem ( 2 4 9 8 3 4 9 ) minRem =(846082)4 ... Listing 2: Edfomai logs (dmesg), deadline reset (University of Bologna) 7/12/2012 45 / 74
  46. 46. Esempi di implementazione su EDFOMAI I Semplice esempio di implementazione di un task periodico su edfomai.1 RT TASK d e m o t a s k ;2 i n t main ( i n t argn , c h a r ∗∗ a r g v ) {3 char s t r [ 1 0 ] ;4 unsigned long periods [ 3 ] [ 3 ] ;5 i n t i ; r t p r i n t a u t o i n i t (1) ;6 m l o c k a l l (MCL CURRENT | MCL FUTURE) ;7 e d f i n i t () ;8 // [ p e r i o d , timeUsed , d e a d l i n e ]9 periods [0][0]=8; periods [0][1]=2; periods [0][2]=8;0 periods [1][0]=16; periods [1][1]=3; periods [1][2]=16;1 periods [2][0]=12; periods [2][1]=5; periods [2][2]=12;2 r t p r i n t f ( ” [ Main ] : s t a r t t a s k n” ) ;3 f o r ( i =0; i <3; i ++){4 s p r i n t f ( s t r , ” Task−%d” , i ) ;5 p e r i o d s [ i ]= i +1;6 r t t a s k c r e a t e (& demo task , s t r , 1 0 , 5 0 , 0 ) ; (University of Bologna) 7/12/2012 46 / 74
  47. 47. Esempi di implementazione su EDFOMAI II7 e d f t a s k s t a r t (& demo task , p e r i o d s [ 2 ] ,8 &demo , p e r i o d s [ i ] ) ;9 }0 r t p r i n t f ( ” end program by CTRL−Cn” ) ;1 pause () ;2 } (University of Bologna) 7/12/2012 47 / 74
  48. 48. Esempi di implementazione su EDFOMAI III1 v o i d demo ( v o i d ∗ a r g ) {2 RT TASK INFO c u r t a s k i n f o ;3 u n s i g n e d l o n g ∗ params ; int i ;4 i n t r e t v a l= r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;5 i f ( r e t v a l <0){6 r t p r i n t f ( ” i n q u i r i n g e r r o r %d:% s n” ,7 −r e t v a l , s t r e r r o r (− r e t v a l ) ) ; }8 params = ( i n t ∗ ) a r g ; RTIME p = 1 e8 ; // 0 . 1 s9 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, params [ 0 ] ∗ p ) ;0 while (1) {1 r t p r i n t f ( ”[% s ] %d s p e r i o d i c n” ,2 c u r t a s k i n f o . name , r e t v a l ) ;3 r t t i m e r s p i n ( param [ 1 ] ∗ p ) ;4 r t t a s k w a i t p e r i o d (NULL) ;5 }} (University of Bologna) 7/12/2012 48 / 74
  49. 49. Esempi di implementazione su EDFOMAI IV Esempio di implementazione di un Mars Rover, composto da 4 task periodici sensor, processing, actuator e communicator con diversa priorit`, a periodo e deadline. La funzione main() inizializza e fa partire il sistema.1 RTIME t ;2 RT TASK t a s k , s p a w n e r ;3 RT SEM s e n s i n g D o n e , p r o c e s s i n g D o n e , e x L o c k ;4 short stopped = 0;5 i n t sharedResoruce , shared = 0;6 u n s i g n e d l o n g param [ 4 ] [ 3 ] ;78 i n t main ( i n t argn , c h a r ∗∗ a r g v ) {9 init edfomai () ;0 r t p r i n t f ( ” i n i t i a l i z e d . n” ) ;1 r t p r i n t f ( ” s t a r t i n g up . . . n” ) ;2 startup () ;3 r t p r i n t f ( ” w a i t i n g C t r l+Cn” ) ; (University of Bologna) 7/12/2012 49 / 74
  50. 50. Esempi di implementazione su EDFOMAI V4 w a i t f o r c t r l c () ;5 r t p r i n t f ( ” c l o s i n g . . . n” ) ;6 cleanup () ;7 return 0;8 } (University of Bologna) 7/12/2012 50 / 74
  51. 51. Esempi di implementazione su EDFOMAI VI Questa funzione inizializza il sistema Xenomai ed EDFOMAI.1 void init edfomai () {2 r t p r i n t a u t o i n i t (1) ;3 // A v o i d s memory s w a p p i n g f o r t h i s program4 m l o c k a l l (MCL CURRENT | MCL FUTURE) ;5 // I n i t i a l i z e e d f6 i f ( e d f i n i t () ) e x i t (1) ;7 } (University of Bologna) 7/12/2012 51 / 74
  52. 52. Esempi di implementazione su EDFOMAI VII Questa funzione inizializza e fa partire i task.1 void startup () {2 // [ p e r i o d , busy , d e a d l i n e3 params [ 0 ] [ 0 ] = 1 1 ; params [ 0 ] [ 1 ] = 2 ; params [ 0 ] [ 2 ] = 3 ;4 params [ 1 ] [ 0 ] = 1 1 ; params [ 1 ] [ 1 ] = 3 ; params [ 1 ] [ 2 ] = 7 ;5 params [ 2 ] [ 0 ] = 1 1 ; params [ 2 ] [ 1 ] = 2 ; params [ 2 ] [ 2 ] = 1 0 ;6 params [ 3 ] [ 0 ] = 6 6 ; params [ 3 ] [ 1 ] = 6 ; params [ 3 ] [ 2 ] = 6 5 ;7 t = timeUnit ;8 r t s e m c r e a t e (& s e n s i n g D o n e ,9 ” s e n s o r S e m ” , 0 , S PRIO ) ;0 r t s e m c r e a t e (& p r o c e s s i n g D o n e ,1 ” p r o c e s s o r S e m ” , 0 , S PRIO ) ;2 r t s e m c r e a t e (& exLock , ” s h a r e d R e s o u r c e ” , 1 , S PRIO ) ;3 r t t a s k c r e a t e (& t a s k , ” s e n s o r ” , 0 , 9 0 , 0 ) ;4 e d f t a s k s t a r t (& t a s k , params [ 0 ] [ 2 ] ∗ t , &s e n s e ,5 params [ 0 ] ) ;6 r t t a s k c r e a t e (& t a s k , ” p r o c e s s o r ” , 0 , 8 9 , 0 ) ; (University of Bologna) 7/12/2012 52 / 74
  53. 53. Esempi di implementazione su EDFOMAI VIII7 e d f t a s k s t a r t (& t a s k , params [ 1 ] [ 2 ] ∗ t , &p r o c e s s ,8 params [ 1 ] ) ;9 r t t a s k c r e a t e (& t a s k , ” a c t u a t o r ” , 0 , 8 8 , 0 ) ;0 e d f t a s k s t a r t (& t a s k , params [ 2 ] [ 2 ] ∗ t , &a c t ,1 params [ 2 ] ) ;2 r t t a s k c r e a t e (& t a s k , ” c o m u n i c a t o r ” , 0 , 8 7 , 0 ) ;3 e d f t a s k s t a r t (& t a s k , params [ 3 ] [ 2 ] ∗ t , &c o m u n i c a t e , params [ 3 ] ) ;4 } (University of Bologna) 7/12/2012 53 / 74
  54. 54. Esempi di implementazione su EDFOMAI IX Funzione del task actuator.1 void act ( void ∗ arg ) {2 int i , res ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗ ) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) , &c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d n” , c u r t a s k i n f o . name ) ;8 while ( ! stopped ){9 r t s e m p (& p r o c e s s i n g D o n e ) ;0 r t s e m p (& e x L o c k ) ;1 r e s=s h a r e d R e s o u r c e ;2 r t s e m v (& e x L o c k ) ;3 f o r ( i =0 ; i < param [ 1 ] ; i ++){4 rt timer spin (t) ;5 r t p r i n t ( ”[% s ] e x e c u t i n g n” , c u r t a s k i n f o . name ) ; (University of Bologna) 7/12/2012 54 / 74
  55. 55. Esempi di implementazione su EDFOMAI X6 }7 s h a r e d=r e s ;8 r t t a s k w a i t p e r i o d (NULL) ;9 }0 } (University of Bologna) 7/12/2012 55 / 74
  56. 56. Esempi di implementazione su EDFOMAI XI Funzione del task processing.1 void process ( void ∗ arg ) {2 int i , res ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗ ) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d n” , c u r t a s k i n f o . name ) ;8 while ( ! stopped ){9 r t s e m p (& s e n s i n g D o n e ) ;0 f o r ( i =0 ; i < param [ 1 ] ; i ++){1 rt timer spin (t) ;2 r t p r i n t ( ”[% s ] e x e c u t i n g n” , c u r t a s k i n f o . name ) ;3 }4 r t s e m p (& e x L o c k ) ;5 s h a r e d R e s o u r c e +=1; (University of Bologna) 7/12/2012 56 / 74
  57. 57. Esempi di implementazione su EDFOMAI XII6 r t s e m v (& e x L o c k ) ;7 r t s e m v (& p r o c e s s i n g D o n e ) ;8 r t t a s k w a i t p e r i o d (NULL) ;9 }0 } (University of Bologna) 7/12/2012 57 / 74
  58. 58. Esempi di implementazione su EDFOMAI XIII Funzione del task sensing.1 void sense ( void ∗ arg ) {2 int i , res ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗ ) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d n” , c u r t a s k i n f o . name ) ;8 while ( ! stopped ){9 f o r ( i =0 ; i < param [ 1 ] ; i ++){0 rt timer spin (t) ;1 r t p r i n t ( ”[% s ] e x e c u t i n g n” , c u r t a s k i n f o . name ) ;2 }3 r t s e m p (& e x L o c k ) ;4 s h a r e d R e s o u r c e=s h a r e d ;5 r t s e m v (& e x L o c k ) ; (University of Bologna) 7/12/2012 58 / 74
  59. 59. Esempi di implementazione su EDFOMAI XIV6 r t s e m v (& s e n s i n g D o n e ) ;7 r t t a s k w a i t p e r i o d (NULL) ;8 }9 } (University of Bologna) 7/12/2012 59 / 74
  60. 60. Esempi di implementazione su EDFOMAI XV Funzione del task communicator.1 void comunicate ( void ∗ arg ) {2 int res ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗ ) a r g s ;4 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;5 while ( ! stopped ){6 r t s e m p (& e x L o c k ) ;7 res = sharedResource ;8 r t s e m v (& e x L o c k ) ;9 r t p r i n t f ( ” [ c o m u n i c a t o r ] s e n d i n g : %d” , r e s ) ;0 r t t i m e r s p i n ( param [ 1 ] ∗ t ) ;1 r t p r i n t f ( ” [ c o m u n i c a t o r ] s e n t : %d” , r e s ) ;2 r t t a s k w a i t p e r i o d (NULL) ;3 }4 } (University of Bologna) 7/12/2012 60 / 74
  61. 61. Esempi di implementazione su EDFOMAI XVI DMESG log1 [ 2 3 6 3 6 . 0 9 1 5 8 9 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( p r o c e s s o r ) o l d P ( 5 0 ) newP ( 4 2 ) r e m a i n ( 6 9 9 9 5 3 1 1 ) maxRem ( 3 9 0 9 0 4 6 8 5 ) minRem=(0)2 [ 2 3 6 3 6 . 0 9 1 6 0 9 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( a c t u a t o r ) o l d P ( 4 9 ) newP ( 4 3 ) r e m a i n ( 6 1 3 6 9 6 3 4 ) maxRem ( 3 9 0 9 0 4 6 8 5 ) minRem=(0)3 [ 2 3 6 3 6 . 0 9 1 6 1 8 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( c o m u n i c a t o r ) o l d P ( 5 0 ) newP ( 4 4 ) r e m a i n ( 3 9 0 9 0 4 6 8 5 ) maxRem ( 3 9 0 9 0 4 6 8 5 ) minRem=(0)4 [ 2 3 6 3 6 . 1 4 1 6 1 2 ] Edfomai : [ @wri te ] s e r v i n g r e q u e s t f o r t a s k ( s e n s o r )5 [ 2 3 6 3 6 . 1 4 1 6 2 1 ] Edfomai : [ @wri te ] t a s k r e s e t d e a d l i n e ( s e n s o r )6 [ 2 3 6 3 6 . 1 4 1 6 2 6 ] Edfomai : [ @ d t r e s e t d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k ( s e n s o r )7 [ 2 3 6 3 6 . 1 4 1 6 3 3 ] Edfomai : [ @ d t r c a l c p ] r e c a l c u l a t i n g p r i o r i t i e s o f 4 t a s k s8 [ 2 3 6 3 6 . 1 4 1 6 4 1 ] E d f o m a i : [ @ d t r c a l c p ] #t a s k s ( 4 ) #m i s s e d ( 0 )9 [ 2 3 6 3 6 . 1 4 1 6 4 5 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( s e n s o r ) o l d P ( 5 0 ) newP ( 4 8 ) r e m a i n ( 2 9 9 9 3 2 2 7 ) maxRem ( 3 4 0 7 1 4 6 7 1 ) minRem =(11179620)0 [ 2 3 6 3 6 . 1 4 1 6 9 2 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( p r o c e s s o r ) o l d P ( 4 2 ) newP ( 4 9 ) r e m a i n ( 1 9 8 0 5 2 9 7 ) maxRem ( 3 4 0 7 1 4 6 7 1 ) minRem =(11179620)1 [ 2 3 6 3 6 . 1 4 1 6 9 7 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( a c t u a t o r ) o l d P ( 4 3 ) newP ( 5 0 ) r e m a i n ( 1 1 1 7 9 6 2 0 ) maxRem ( 3 4 0 7 1 4 6 7 1 ) minRem =(11179620)2 [ 2 3 6 3 6 . 1 4 1 7 0 2 ] E d f o m a i : [ @ d t r c a l c p ] t a s k ( c o m u n i c a t o r ) o l d P ( 4 4 ) newP ( 4 0 ) r e m a i n ( 3 4 0 7 1 4 6 7 1 ) maxRem ( 3 4 0 7 1 4 6 7 1 ) minRem =(11179620)3 [ 2 3 6 3 6 . 1 6 1 8 8 4 ] Edfomai : [ @wri te ] s e r v i n g r e q u e s t f o r t a s k ( s e n s o r )4 [ 2 3 6 3 6 . 1 6 1 8 8 7 ] E d f o m a i : [ @ w r i t e ] s t o p p i n g watchdog o f t a s k ( s e n s o r )5 [ 2 3 6 3 6 . 1 6 1 8 8 9 ] E d f o m a i : [ @ d t s t o p w d g ] s t o p p i n g watchdog o f t a s k ( s e n s o r )6 [ 2 3 6 3 6 . 1 6 1 9 0 1 ] Edfomai : [ @wri te ] s e r v i n g r e q u e s t f o r t a s k ( a c t u a t o r )7 [ 2 3 6 3 6 . 1 6 1 9 0 4 ] E d f o m a i : [ @ w r i t e ] s t o p p i n g watchdog o f t a s k ( a c t u a t o r )8 [ 2 3 6 3 6 . 1 6 1 9 0 6 ] E d f o m a i : [ @ d t s t o p w d g ] s t o p p i n g watchdog o f t a s k ( a c t u a t o r )9 [ 2 3 6 3 6 . 1 6 1 9 2 5 ] Edfomai : [ @wri te ] s e r v i n g r e q u e s t f o r t a s k ( a c t u a t o r )0 [ 2 3 6 3 6 . 1 6 1 9 2 7 ] Edfomai : [ @wri te ] t a s k r e s e t d e a d l i n e ( a c t u a t o r )1 [ 2 3 6 3 6 . 1 6 1 9 2 9 ] Edfomai : [ @ d t r e s e t d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k ( a c t u a t o r ) (University of Bologna) 7/12/2012 61 / 74
  62. 62. Esempi di implementazione su EDFOMAI XVII2 [ 2 3 6 3 6 . 1 6 1 9 3 1 ] Edfomai : [ @dt rcalcp ] r e c a l c u l a t i n g p r i o r i t i e s of 4 tasks3 [ 2 3 6 3 6 . 1 6 1 9 3 3 ] Edfomai : [ @dt rcalcp ] #t a s k s ( 4 ) #m i s s e d ( 1 )4 [ 2 3 6 3 6 . 1 6 1 9 3 5 ] Edfomai : [ @dt rcalcp ] t a s k ( s e n s o r ) o l d P ( 5 0 ) newP ( 4 9 ) r e m a i n ( 9 8 1 4 1 0 5 ) maxRem ( 3 2 0 5 3 5 5 4 9 ) minRem=(0)5 [ 2 3 6 3 6 . 1 6 1 9 5 9 ] Edfomai : [ @dt rcalcp ] t a s k ( p r o c e s s o r ) has missed h i s d e a d l i n e (University of Bologna) 7/12/2012 62 / 74
  63. 63. Proposta di mapping SFC in Xenomai IProposal Parte finale del progetto, non implementato. Il framework deve offire metodi e strutture dati per implementare un diagramma SFC su Xenomai.Idee principali: Il framework offre un ciclo di scansione: lettura degli input, aggiornamento dello stato, scrittura degli output. Ogni azione ` un task a cui ` associato un Qualificatore. e e La struttura che unisce due stati ` detta Struttura di Collegamento. e (University of Bologna) 7/12/2012 63 / 74
  64. 64. Proposta di mapping SFC in Xenomai IICiclo di campionamentoDopo aver inizializzato i data structure il framework inizia il main loop: 1 Lettura dei sensori e memorizzazione in memoria condivisa 2 Attivazione degli step sulla base del modello SFC 3 Attesa del tempo di scansione 4 Attivazione degli attuatori (University of Bologna) 7/12/2012 64 / 74
  65. 65. Proposta di mapping SFC in Xenomai III (University of Bologna) 7/12/2012 65 / 74
  66. 66. Proposta di mapping SFC in Xenomai IVModello di uno stepUno step ` composto da una struttura di collegamento, che lo collega allo estep sucessivo, e un set di azioni, che sono composte a loro volta da unqualificatore e dalla procedura che esegue. (University of Bologna) 7/12/2012 66 / 74
  67. 67. Proposta di mapping SFC in Xenomai VStrutture di collegamentoSono strutture che collegano gli step predecessori con i successori.Condizione: abilita lo step successore solo se il predecessore ` attivo e la e condizione ` soddisfatta eSceltaAlternativa: abilita uno step successore solo se il predecessore ` e attivo e la condizione relativa al successore ` soddisfatta eParallelismo: abilita gli step successori se il predecessore ` attivo e la e condizione ` soddisfatta eConvergenza: abilita lo step successore solo se uno dei predecessori ` e attivo e la relativa condizione ` soddisfatta eSincronizzazione: abilita lo step successore solo se tutti i predecessori sono attivi e la condizione ` soddisfatta e (University of Bologna) 7/12/2012 67 / 74
  68. 68. Proposta di mapping SFC in Xenomai VI (University of Bologna) 7/12/2012 68 / 74
  69. 69. Proposta di mapping SFC in Xenomai VII (University of Bologna) 7/12/2012 69 / 74
  70. 70. Proposta di mapping SFC in Xenomai VIII (University of Bologna) 7/12/2012 70 / 74
  71. 71. Proposta di mapping SFC in Xenomai IXAzioniLe azioni sono mappate in task xenomai e sono abilitate all’attivazionedello step che le contiene.In base al qualificatore il framework prevede una differente mappaturadella procedura eseguita dall’azione. (University of Bologna) 7/12/2012 71 / 74
  72. 72. Proposta di mapping SFC in Xenomai XQualificatori di azioniNon Stored: task periodico che termina con la disattivazione dello step. Pulsed: task one-shot eseguito all’abilitarsi di uno step. Set: task periodico. Reset: termina il task periodico a cui ` riferito. eTime Limited: al task ` affiancato un altro che aspetta per il tempo e designato prima di terminarlo.Time Delayed: task che inizia con una wait real-time, interrotto se lo stato si disattiva.Stored Delayed: task Set che inizia con una wait real-time.Delayed Stored: task Set che inizia con una wait real-time, interrotto se lo stato si disattiva.Stored Time-Limited: task Set a cui ` affiancato un altro che aspetta per e il tempo designato prima di terminarlo. (University of Bologna) 7/12/2012 72 / 74
  73. 73. References I Adaptive Domain Enviroment for Operaring Systems Karim Yaghmour Xenomai APIs Xenomai.org, http://www.xenomai.org/documentation/ xenomai-2.5/html/api/index.html Native API Tour Xenomai.org, http://www.xenomai.org/documentation/ branches/v2.4.x/pdf/Native-API-Tour-rev-C.pdf Life with Adeos Xenomai.org, http://www.xenomai.org/documentation/ xenomai-2.3/pdf/Life-with-Adeos-rev-B.pdf (University of Bologna) 7/12/2012 73 / 74
  74. 74. References II Xenomai - Implementing a RTOS emulation framework on GNU/Linux Philippe Gerum, 2004 The Real-Time Driver Model and First Applications J. Kiszka, University of Hannover Hard Real Time Linux using Xenomai on Intel R Multi-Core Processors Amarpreet Singh Ugal, Intel Corporation, 2009 Implementa¸˜o da pol´ ca ıtica EDF no Xenomai Jos´ Augusto Santos , George Lima, Universidade Federal da Bahia e (UFBA), 2009 Xenamai Lab Course Robot LAB, http://www.cs.ru.nl/lab/xenomai (University of Bologna) 7/12/2012 74 / 74
  75. 75. Domande ? (University of Bologna) 7/12/2012 75 / 74

×