250 likes | 443 Vues
Real-Time Operating Systems. Suzanne Rivoire November 20, 2002. http://www.stanford.edu/~skrufi/rtospres.ppt. Motivating Example. void main() { do forever{ check keypad; measure temperature; control oven power; decrement timer; update display;
E N D
Real-Time Operating Systems Suzanne Rivoire November 20, 2002 http://www.stanford.edu/~skrufi/rtospres.ppt
Motivating Example void main() { do forever{ check keypad; measure temperature; control oven power; decrement timer; update display; wait for clock tick; } }
Motivating Example - 2 void main() { do forever{ check keypad; measure temperature; check keypad; control oven; check keypad; } }
Presentation Outline • Definition of real-time • Characteristics of RTOS’s • Examples • c-OS • AvrX • RTLinux • QNX Neutrino
What is real-time? • Correctness of output depends on timing as well as result • Hard vs. soft real-time • Are Windows and Linux real-time?
In a Hard RTOS… • Thread priorities can be set by the client • Threads always run according to priority • Kernel must be preemptible or bounded • Interrupts must be bounded • No virtual memory
In a Soft RTOS… • Like a hard RTOS: • Priority scheduling, with no degradation • Low dispatch latency • Preemptible system calls • No virtual memory (or allow pages to be locked) • Linux: guarantees about relative timing of tasks, no guarantees about syscalls
Basic RTOS References • http://www.dedicated-systems.com/encyc/publications/faq/rtfaq.htm • http://www.steroidmicros.com/mtkernel.html • http://www.qnx.com/developer/articles/dec1200b/ • Silberschatz and Galvin, Operating System Concepts.
Example RTOS’s • Micrium c-OS II http://www.ucos-ii.com/ • AvrX http://www.barello.net/avrx/ • RTLinux http://fsmlabs.com/developers/man_pages/ • QNX Neutrino http://www.qnx.com/
c-OS II • Features • Sample main() function • Calling OSTaskCreate() • Creating a task
C-OS II • Ports to the AVR, ATmega103 • Comes with book: Micro-C OS: The Real-Time Kernel by Jean Labrosse ($52) • Features • Semaphores and mutexes • Event flags • Message mailboxes and queues • Task management (priority settings)
C-OS Sample Code void main (void) { /* Perform Initializations */ ... OSInit(); ... /* Create at least one task by calling OSTaskCreate() */ OSStart(); }
C-OS Sample Code INT8U OSTaskCreate ( void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);
C-OS Sample Code void UserTask (void *pdata) { pdata = pdata; /* User task initialization */ while (1) { /* User code goes here */ /* You MUST invoke a service provided by µC/OS-II to: */ /* ... a) Delay the task for ‘n’ ticks */ /* ... b) Wait on a semaphore */ /* ... c) Wait for a message from a task or an ISR */ /* ... d) Suspend execution of this task */ }}
AvrX • Specs • Internal structures • Sample code: task creation
AvrX Specs • Code size: 500-700 words (2x bigger with debug monitor) • 16 priority levels • Overhead: 20% of CPU • Version 2.3 for assembly code, 2.6 for C interface
AvrX Internals • Routine _Prolog saves state, _Epilog restores it • Task info stored in a PID block and a task control block • Modules for timers, semaphores, etc.
An AvrX Task AVRX_TASKDEF(myTask, 10, 3){ TimerControlBlock MyTimer; while (1) { AvrXDelay(&MyTimer, 10); // 10ms delay AvrXSetSemaphore(&Timeout); }} Arguments: task name, additional stack bytes, priority
RTLinux • Additional layer between Linux kernel and hardware • Worst-case dispatch latency on x86: 15 s
QNX Neutrino • Powerful hard RTOS • Includes GUI • Memory protection and fault tolerance
Summary • Hard real-time, soft real-time • Characteristics of an RTOS • Example RTOS’s • Specs • Internal structure/ideas • Sample code