Real Time Operating System Concepts


Published on

This slideshow discusses the basics concepts of the RTOS

Published in: Technology

Real Time Operating System Concepts

  1. 1. Real Time Operating Systems Sanjiv Malik
  2. 2. Topics • Real Time Systems • Real Time Operating Systems & VxWorks • Application Development • Loading Applications • Testing Applications
  3. 3. Real Time Systems • Real-time is the ability of the control system to respond to any external or internal events in a fast and deterministic way. • We say that a system is deterministic if the response time is predictable.
  4. 4. Real Time Systems • The lag time between the occurrence of an event and the response to that event is called latency • Deterministic performance is key to Real-time performance. performance.
  5. 5. Real Time System • High speed execution: – Fast response – Low overhead • Deterministic operation: – A late answer is a wrong answer.
  6. 6. Real Time Systems Memory Mgmt Kernel Device Network Drivers Stack
  7. 7. vxWorks • What is vxWorks ? – vxWorks is a networked RTOS which can also be used in distributed systems. – vxWorks topics • Hardware Environment Requirements • Development tools • Testing
  8. 8. Hardware requirements • vxWorks runs on range of platforms • MC680x0 • MC683xx • Intel i960 • Intel i386 • R3000 • SPARC based systems
  9. 9. What is a real time OS • A real time OS is a operating system which will help implement any real time system
  10. 10. RTOS Requirements • Multitasking • Intertask communications • Deterministic response • Fast Response • Low Interrupt Latency
  11. 11. Uni tasking • Sample Application
  12. 12. Uni tasking • One task controlling all the components is a loop. • arm ( ) { for (;;) { if (shoulder needs moving) moveShoulder( ) ; if (elbow needs moving) moveElbow( ); if (wrist need moving) moveWrist( ); .... } }
  13. 13. Multitasking Approach • Create a separate task to manipulate each joint: joint ( ) { for (;;) { wait; /* Until this joint needs moving */ moveJoint ( ); } }
  14. 14. Multitasking and Task Scheduling • Task State Transition Pending Ready Delayed Suspended taskInit()
  15. 15. Multitasking and Task Scheduling
  16. 16. Multitasking and Task Scheduling • Manages tasks. • Transparently interleaves task execution, creating the appearance of many programs executing simultaneously and independently.
  17. 17. Multitasking and Task Scheduling • Uses Task Control Blocks (TCBs) to keep track of tasks. – One per task. – WIND_TCB data structure defined in taskLib.h – O.S. control information • e.g. task priority, • delay timer, • I/O assignments for stdin, stdout, stderr – CPU Context information • PC, SP, CPU registers, • FPU registers FPU registers
  18. 18. Multitasking and Task Scheduling • Task Context. – Program thread (i.e) the task program counter – All CPU registers – Optionally floating point registers – Stack dynamic variables and functionals calls – I/O assignments for stdin, stdout and stderr – Delay timer – Timeslice timer – Kernel control structures – Signal handlers – Memory address space is not saved in the context
  19. 19. Multitasking and Task Scheduling • To schedule a new task to run, the kernel must: : – Save context of old executing task into associated TCB. – Restore context of next task to execute from associated TCB. • Complete context switch must be very fast
  20. 20. Multitasking and Task Scheduling • Task Scheduling – Pre-emptive priority based scheduling – CPU is always alloted to the “ready to run” highest priority task – Each task has priority numbered between 0 and 255 – It can be augmented with round robin scheduling.
  21. 21. Priority Scheduling • Work may have an inherent precedence. • Precedence must be observed when allocating CPU. • Preemptive scheduler is based on priorities. • Highest priority task ready to run (not pended or delayed) is allocated to the CPU
  22. 22. Priority Scheduling • Reschedule can occur anytime, due to: – Kernel calls. – System clock tick
  23. 23. Priority based pre-emption •Priority t3 completes t3 preempts t2 t2 completes Task t3 t2 preempts t1 Task t2 Task t2 Task t1 Task t1 TIME
  24. 24. Round Robin Scheduling t4 completes t4 preempts t2 Task t4 t1 t2 t3 t1 t2 t2 t3 TIME
  25. 25. Kernel Time Slicing • To allow equal priority tasks to preempt each other, time slicing must be turned on: – kernelTimeSlice (ticks) – If ticks is 0, time slicing turned off • Priority scheduling always takes precedence. – Round-robin only applies to tasks of the same priority..
  26. 26. Performance Enhancements • All task reside in a common address space Common Subroutine tTaskA TASK STACKS TaskA() { doComFunc(10) 10 } doCommFunc ( int data) tTaskB { TaskB() { …… 20 doComFunc(20) } }
  27. 27. VxWorks Real Time System RAM fooLib tTaskA fooSet(10) int fooVal; text void fooSet(int x) tTaskB { data fooVal = x; bss fooSet(10) }
  28. 28. Performance Enhancements • All tasks run in privileged mode
  29. 29. How real time OS meets the real time requirements. • Controls many external components. – Multitasking allows solution to mirror the problem. – Different tasks assigned to independent functions. – Inter task communications allows tasks to cooperate.
  30. 30. How real time OS meets the real time requirements. • High speed execution – Tasks are cheap (light-weight). – Fast context switch reduces system overhead. • Deterministic operations – Preemptive priority scheduling assures response for high priority tasks.
  31. 31. RTOS Requirements • Small Codesize • Run mostly on single card system
  32. 32. Overview of Multitasking • Low level routines to create and manipulate tasks are found in taskLib.. • A VxWorks task consists of: – A stack (for local storage such as automatic variables and parameters passed to routines). – A TCB (for OS control).is not specific to a task.
  33. 33. Overview of Multitasking • Code is not specific to a task. – Code is downloaded before tasks are spawned. – Several tasks can execute the same code (e.g., printf( ))
  34. 34. Creating a Task taskSpawn foo ( ) { Stack TCB …. }
  35. 35. Creating a Task int taskSpawn ( name , priority, options, stackSize, entryPt, arg1, … arg10) – name Task name – priority Task priority (0-255) – options Task Options eg VX_UNBREAKABLE – stackSize size of stack to be allocated – entryPt Address of code to execute ( initial PC ) – arg1 … arg10 Arguments to entry point routine. arguments to entry point routine.
  36. 36. Task IDs • Assigned by kernel when task is created. • Unique to each task. • Efficient 32 bit handle for task. • May be reused after task exits. • If tid is zero, reference is to task making call (self).
  37. 37. Task IDs • Relevant taskLib routines: – taskIdSelf( ) Get ID of calling task – taskIdListGet( ) Fill array with Ids of all existing tasks. – taskIdVerifty( ) Verify a task ID is valid
  38. 38. Task Names • Provided for human convenience. – Typically used only from the shell (during development). – Use task Ids programmatically. • Should start with a t. – Then shell can interpret it as a task name. – Default is an ascending integer following a t.
  39. 39. Task Names • Doesn’t have to be unique (but usually is). • Relevant taskLib routines: routines: – taskName( ) Get name from tid. – taskNameToId( ) Get tid from task name.
  40. 40. Task Priorities • Range from 0 (highest) to 255 (lowest). • No hard rules on how to set priorities. There are two (often contradictory) “rules of thumb”: – More important = higher priority. – Shorter deadline = higher priority. • Can manipulate priorities dynamically with: – taskPriorityGet (tid, &priority) – taskPrioritySet (tid, priority)
  41. 41. Task Delete taskDelete (tid) • Deletes the specified task. • Deallocates the TCB and stack.
  42. 42. Task Delete exit (code) • Analogous to a taskDelete( ) of self. of Code parameter gets stored in the TCB field exitCode. • TCB may be examined for post mortem debugging by: – Unsetting the VX_DELLOC_STACK option or, – Using a delete hook. Using a delete hook.
  43. 43. Resource reclamation • Contrary to philosophy of system resources sharable by all tasks. • User must attend to. Can be expensive. • TCB and stack are the only resources automatically reclaimed..
  44. 44. Resource reclamation • Tasks are responsible for cleaning up after themselves. – Deallocating memory. – Releasing locks to system resources. – Closing files which are open. – Deleting child/client tasks when parent/server exists.
  45. 45. Task Control taskRestart (tid) • Task is terminated and respawned with original arguments and tid. • Usually used for error recovery.
  46. 46. Task Suspend and Resume taskSuspend (tid) • Makes task ineligible to execute. • Can be added to pended or delayed state. taskResume (tid) • Removes suspension. • Usually used for debugging and development
  47. 47. Intertask Communications • Shared Memory • Semaphores: Timeout and queues mechanism can be specified – Binary Semaphore – Mutual Exclusion Semaphores – Counting Semaphores
  48. 48. Shared Memory taskA() foo.h { extern char buffer[512]; … extern int fooSet(); fooSet(); extern char *fooGet(); …. } foo.c taskB() #include foo.h { char buffer[512]; fooSet … fooGet() { … } } fooGet() { }
  49. 49. Semaphores Int semTake (SEMID) if a task calls this function – this function will return if the semaphore is not taken already – this function will block if the semaphore is taken already Int semGive (SEMID) if a task call this function and – there is a task which blocked that task will continue – if there is no task blocked the semaphore is free
  50. 50. Semaphores taskB taskA Semaphore Time
  51. 51. Intertask Communications • Message Queues – Any task including the interrupt handler can send message to message queues. – Any task can get message from message queues(excl. interrupt context). – Full duplex communications between 2 tasks requires two message queues – Timeout can be specified for reading writing and urgency of message is selectable
  52. 52. Intertask Communications • Message Queues – MSG_Q_ID msgQCreate (maxMsgs, maxMsgLength, Options ) – maxMsgs • max number of messages in the queue. – maxMsgLength • max size of messages – options • MSG_Q_FIFO or MSG_Q_PRIORITY
  53. 53. Intertask Communications • STATUS msgQSend (msgQId, buffer, nBytes, timeout, priority) • int msqQReceive (msgQId, buffer, nBytes, timeout ) • STATUS msgQDelete (msgQId );
  54. 54. Intertask Communications • Pipes – Named I/O device – Any task can read from/write to a PIPE – an ISR can write to a PIPE – select () can used on a pipe • N/W Intertask Communication – Sockets (BSD 4.3) – RPC
  55. 55. Features VxWorks supports • Interrupt handling Capabilities • Watchdog Timer • Memory management
  56. 56. Interrupt Handling • Interrupt Service routines – They can bound to user C code through intConnect. – intConnect takes I_VEC, reference to ISR and 1 argument to ISR
  57. 57. Don’t’s of ISR • All ISR use a common stack verify through checkStack() • Interrupts have no task control block and they do not run in a regular task context.
  58. 58. Donts of ISR(cont) • ISR must not invoke functions that might cause blocking of caller like – semTake(), malloc(), free(), msgQRecv() – No I/O through drivers • floating point co-processors are also discouraged as the floating point registers are not saved or restored.
  59. 59. Exceptions at Interrupt level • Stores the discriptions of the exception in a special location in memory. • System is restarted • In boot ROM the presence of the exception description is tested, if present it prints it out. • For re displaying ‘e’ command in the boot ROM can be used.
  60. 60. Errors and Exceptions • ‘errno’ is a global int defined as a macro in “errno.h” • This return the last error status • Default expection handler of the OS merely suspends the task that caused it and displays the saved state of the task in stdout
  61. 61. Errors and Exceptions (cont) • ti and tt can be used to probe into the status • Unix compatible signals() facility is used to tackle exception other than that of the OS
  62. 62. Watchdog Timers • Mechanism that allows arbitary C functions to be executed after specified delay • function is executed as an ISR at the inrrupt level of the system clock • All restrictions of ISR applies
  63. 63. Watchdog Timers • Creation of a WD timer is through wdCreate() • Deletion of a WD timer through wdDelete() • Start a WD timer through wdStart() • Cancel a WD timer through wdCancel()
  64. 64. Network Capablities in vxWorks • Normally uses Internet protocol over standard ethernet connections • Transperency in access to other vxWorks/Unix systems thro’ Unix compatible sockets • Remote command execution • Remote Login
  65. 65. Network Capabilities in vxWorks • Remote Procedure calls • Remote debugging • Remote File access • Proxy ARP
  66. 66. Software development Environment Target Platform Development Host RS-232 Ethernet LAN
  67. 67. Libraries • vxWorks routines are grouped into libraries • Each library has corresponding include files • Include files • Library • Routine – taskLib.h – taskLib – taskSpawn – stdlib.h – memPartLib – malloc – semLib.h – semLib – semTake – lstLib.h – lstLib – lstGet – types.h, – sockLib – send sockets.h, sockLib.h
  68. 68. Host Machine • Any workstation (could run Unix) • OS should support networking • Cross/Remote Development Software • Unix platform – Edit, Compile, Link programmes – Debug using vxWorks Shell or gdb
  69. 69. Target Machine • Any H/W which is supported by vxWorks. • Could be Custom Hardware also. • Individual object code (.o files) downloaded dynamically. • Finished application could be burnt into ROM or PROM or EPROM.
  70. 70. Loader and System Symbol Table • Global system symbol table • Dynamic loading and unloading of object modules • Runtime relocation and linking.
  71. 71. Shared Code and reentrancy • A single copy of code executed by multiple tasks is called shared code • Dynamic linking provides a direct advantage • Dynamic stack variables provide inherent reentrancy. Each task has ints own task. Eg linked list in lstLib
  72. 72. Shared Code and reentrancy • Global and static variables that are inherently non-reentrant, mutual exclusion is provided through use of semaphores eg. semLib and memLib • Task variables are context specific to the calling task. 4 byte task vars are added to the task’s context as required by the task.
  73. 73. The Shell • Command Line interpreter allows execution of C language expressions and vxWorks functions and already loaded functions • Symbolic evaluations of variables
  74. 74. The Shell • -> x=(6+8)/4 – x=0x20ff378: value=12=0xc • -> nelson = “Nelson” • new symbol “name” added to symbol table • -> x – x=0x20ff378: value=12=0xc
  75. 75. The Shell • Commands -> lkup ( “stuff”) stuff 0x023ebfffe bss value = 0 = 0x0 -> lkup(“Help”) _netHelp 0x02021a90 text _objHelp 0x02042fa0 text value = 0 = 0x0
  76. 76. The Shell • Commands * sp creates a task with default options * td deletes a task * ts/tr Suspend/resume a task *b set/display break points *s single step a task *c continue a task * tt Trace a tasks stack * i/ti give (detailed) task information * ld load a module * unld unload a module
  77. 77. The Shell • Commands * period * repeat * cd (“/u/team3”); the quotes are required * ll shows directory contents * ls() same as ll
  78. 78. The Shell • Commands Shell redirection -> < script shell will use the input as from the file -> testfunc() > testOutput shell will execute the function and the output will be stored in a file “testOutput”
  79. 79. Debugging in vxWorks • vxWorks provides Source level debugging • Symbolic disassembler • Symbolic C subroutine traceback • Task specific break points • Single Stepping • System Status displays
  80. 80. Debugging in vxWorks • Exception handlers in hardware • User routine invocations • Create and examine variable symbolically
  81. 81. The Shell based Debugging • Shell based debugging commands * b funcName() will set a break point in the beginning of the function funcName() * b 0xb08909f will set a break point at the address 0xb08909f * bd funcName() will delete the breakpoint at the beginning of the function funcName() * l will disassemble the code
  82. 82. System Tasks • tUsrRoot – 1st task to be executed by the kernel • File: usrConfig.c • Spawns tShell, tLogTask, tExecTask, tNetTask and tRlogind • tShell – The Application development support task
  83. 83. System Tasks • tLogTask – Log message hander task • tNetTask – Network support task • tTelnetd – Telenet Support task
  84. 84. System Tasks • tRlogind – Rlogin support for vxWorks. Supports remote user tty interface through terminal driver • tPortmapd – RPC Server support • rRdbTask – RPC server support for remote source level debugging.
  85. 85. Why use RTOS? • Unix – except QNX, most unices don’t live up to the expectation of Real Time situations – Present day unix kernel scheduler do support Realtime requirements – So Unix kernel can prioritize realtime processes – a flag to indicate a RT process is often provided to this effect
  86. 86. vxWorks Vs Unix • vxWorks does not provide resource reclamation – Deviation: user must write their own routine when need. • vxWorks has a smaller context switch and restore – Hence time taken to change context is much smaller.
  87. 87. vxWorks Vs Unix(contd) • vxWorks requires special care to be taken when writing multitasking code – Semaphore are used to achieve reentrancy • vxWorks has a minimal interrupt latency
  88. 88. vxWorks Vs Unix(contd) • vxWorks execute threads in a flat memory architechure as part of OS • vxWorks has no processes. The so-called tasks are actually threads • vxWorks scheduling could be on round- robin time slicing or pre-emptive scheduling with priorities.
  89. 89. vxWorks Vs Unix • vxWorks networking is completely Unix compatible. Portable to BSD4.2/4.3 Unix supporting TCP/IP • vxWorks support BSD sockets • vxWorks does not distinguish between kernal mode and user mode execution – Hence minimal mode change overhead on a give hardware • vxWorks has Virtual memory model
  90. 90. vxWorks Vs Unix • vxWorks is not “Realtime Unix” OS or even a variant of Unix • vxWorks and Unix enjoy a symbiotic relationship • vxWorks can use Unix as application development platform