Top Banner
Wind River Systems, Inc. 1997 Chapter - 5 Chapter - 5 Real-Time Multitasking
53

Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

Dec 29, 2015

Download

Documents

Harry Perkins
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

Wind River Systems, Inc. 1997

Chapter - 5 Chapter - 5

Real-Time Multitasking

Page 2: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-2

Real-Time Multitasking

Introduction

Task Basics

Task Control

Error Status

System Tasks

Page 3: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-3

What is Real-Time ?

• A system is described as being deterministic if its response time is predictable.

• Real-time denotes the ability of the control system to keep up with the system being controlled.

• 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.

Page 4: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-4

Requirements of a Real-time System

• Ability to control many external components:

• Fast response• High speed execution:

• Low overhead

• Independent components• Asynchronous components• Synchronous components

• A late answer is a wrong answer.• Deterministic operation:

Page 5: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-5

Design Options

shoulder

elbow

wrist

knuckle1

knuckle2

Page 6: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-6

Unitasking Approach

• One task controlling all the components in a loop. arm () {

for (;;){

if (shoulder needs moving)moveShoulder();

if (elbow needs moving)moveElbow();

if (writst needs moving)moveWrist();

.}

}

Page 7: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-7

Multitasking Approach

• Create a separate task to manipulate each joint:

Joint (){

for (;;) {

wait; /* until this joint needs moving */moveJoint();

}}

• Each task alternates between “ready” and “waiting”.

• VxWorks allows a task to wait for:• A specific time delay.• An event (e.g., an interrupt).

Page 8: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-8

Task States

PENDED

SUSP &

PENDEDSUSPENDED

SUSP &

DELAYED

DELAYEDREADY /

EXEC

Page 9: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-9

Multitasking Kernel

• Manages tasks.

• Transparently interleaves task execution, creating the appearance of many programs executing simultaneously and independently.

• Uses Task Control Blocks (TCBs) to keep track of tasks.• One per task.• Defined by 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 e.g., PC, SP, CPU registers,FPU registers

Page 10: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-10

Kernel Function

Kernel

TCB TCBTCB

TCB TCB TCB

Suspended

Pended

TCB

Delayed

TCB

Ready

CPU

Executing

Page 11: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-11

Context Switch

• To schedule a new task to run, the kernel must:

• Complete context switch must be very fast.

• Save context of old executing task into associated TCB.

• Restore context of next task to execute from associated TCB.

Page 12: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-12

Priority Scheduling

• Different application jobs may have different precedences, which should be observed when allocating the CPU.

• Preemptive scheduling is based on task priorities chosen to reflect job precedence..

• The highest priority task ready to run (not pended or delayed) is allocated the CPU.

• Rescheduling can occur at any time as a result of:• Kernel calls

• Interrupts (e.g.,System clock tick)

• Context switch latency is minimized by invoking scheduler when state transitions occur.

Page 13: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-13

Priority Based Preemption

High Priority Task A

Medium Priority Task B

Low Priority Task C

• Equal priority tasks won’t preempt each other (by default).

Event Event

Page 14: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-14

Round-Robin Scheduling

A

BC

D

Time Slice Period(Constant - Programmable)

BC

D

A

Page 15: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-15

Kernel Time Slicing

• To allow equal priority tasks to preempt each other, time slicing must be turned on:

kernelTimeSlice (ticks) If ticks = 0, time slicing turned off.

• Priority scheduling always takes precedence.• Round-robin only applies to tasks of the same priority.

• Priority based rescheduling can happen any time.• Round-robin rescheduling can only happen every few clock ticks.

Page 16: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-16

Performance Enhancements

•All tasks reside in a common address space.

•All tasks run in supervisor (privileged) mode.

text

data

bss

RAM fooLib

int fooVal;

void fooSet (int x){ fooVal = x;}

fooSet (4)

tTaskA

fooSet (99)

tTaskB

Page 17: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-17

Multitasking Facilities

Interrupt

Device Device Network

Task ISR Task

Interrupt

Task

Buffer

Task

Page 18: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-18

How VxWorks Operating SystemMeets Real-time Requirements

• High speed execution• Tasks are cheap (light-weight).

• Deterministic operation.• Preemptive priority scheduling assures response for high priority tasks.

• Able to control many external components.• Multitasking allows solution to mirror the problem.• Independent functions are assigned to different tasks.• Intertask communication allows tasks to cooperate.

• Fast context switch reduces system overhead.

Page 19: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-19

Real-Time Multitasking

Introduction

Task Basics

Task Control

Error Status

System Tasks

Page 20: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-20

Overview

• Low level routines to create and manipulate tasks are found in taskLib.

• Do not confuse executable code with the task(s) which execute it.

• A VxWorks task consists of:• A stack (for local storage of automatic variables and parameters passed to routines).• A TCB (for OS control)

• Code is downloaded before tasks are spawned.• Several tasks can execute the same code (e.g., printf()).

Page 21: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-21

Creating a Task

taskSpawn

foo (){ ...}

StackTCB

PC

Page 22: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-22

Creating a Task

int taskSpawn (name, priority, options, stackSize, entryPt, arg1, ..., arg10)

name Task name, if NULL gives a default name.priority Task priority, 0-255.options Task options e.g. VX_UNBREAKABLE.stackSize Size of stack to be allocated in bytes.entryPt Address of code to start executing (initial PC)arg1, ..., arg10 Up to 10 arguments to entry point routine.

• Returns a task id or ERROR if unsuccessful.

Page 23: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-23

Task ID’s

• Efficient 32-bit handle for task.

• Assigned by kernel when task is created.

• May be reused after task exists.

• A task id of zero refers to task making call (self).

• Relevant taskLib routines:taskIdSelf() Get ID of calling task.taskIdListGet() Fill array with ID’s of all

existing tasks.taskIdVerify() Verify a task ID is valid.

• Unique to each task.

Page 24: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-24

Task Names

• Provided for human convenience.• Typically used only from the shell (during development).• Within programs, use task Ids.

• By convention, start with a t.

• Default is an ascending integer following a t.• Promotes interpretation as a task name.

• Doesn’t have to be unique (but usually is).

• Relevant taskLib routines.taskName() Get name from tid.taskNameToId() Get tid from task name.

Page 25: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-25

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”:

• Shorter deadline = higher priority.• More important = higher priority.

• Can manipulate priorities dynamically with:taskPriorityGet (tid, &priority)taskPrioritySet (tid, priority)

Page 26: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-26

Task Stacks

• Allocated from memory pool when task is created.

• Fixed size after creation.

• The kernel reserves some space from the stack, making the stack space actually available slightly less than the stack space requested.

• Exceeding stack size (“stack crash”) causes unpredictable system behavior.

Page 27: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-27

Stack Overflows

•Press the check-stack button:•To check for a stack overflow use the Browser.

•Examine the high-water mark indicator in the stack display window.

High-water Mark Indicator (UNIX)

Note: In the PC Browser Stack Check Window, the high water makr triangles are not present. Instead, the number displayed inside each stack bar is that stack’s high water mark. The filled portion of the bar indicates the current stack usage graphically.

Page 28: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-28

Task Options

• Can be bitwise or’ed together when the task is created.

VX_FP_TASK Add floating point support. VX_NO_STACK_FILL Don’t fill stack with 0xee’s. VX_UNBREAKABE Disable breakpoints. VX_DEALLOC_STACK Deallocate stack and TCB

when task exists (automaticallyset for you).

• Use taskOptionsGet() to inquire about a task’s options.

• Use taskOptionsSet() to unset VX_DEALLOC_STACK.

Page 29: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-29

Task Creation

• During time critical code, task creation can be unacceptably time consuming.

• To reduce creation time, a task can be spawned with the VX_NO_STACK_FILL option bit set.

• Alternatively, spawn a task at system start-up, which blocks immediately, and waits to be made ready when needed.

Page 30: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-30

Task Deletion

• Deletes the specified task.• Deallocates the TCB and stack.

• Analogous to a taskDelete() of self.exit (code)

• code parameter gets stored in the TCB field exitCode.• TCB may be examined for post-mortem debugging by

• Unsetting the VX_DEALLOC_STACK option or,• Using a delete hook.

taskDelete(tid)

Page 31: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-31

Resource Reclamation

• Contrary to the philosophy of sharing system resources among all tasks.

• Can be an expensive process, which must be the application’s responsibility.

• TCB and stack are the only resources automatically reclaimed.

• 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 exits.

Page 32: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-32

Real-Time Multitasking

Introduction

Task Basics

Task Control

Error Status

System Tasks

Page 33: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-33

Task Restart

taskRestart (tid)

• Task is terminated and respawned with original arguments and tid.

• Usually used for error recovery.

Page 34: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-34

Task Suspend / Resume

taskSuspend (tid)

• Can be added to pended or delayed state.

taskResume (tid)

• Removes suspension.• Usually used for debugging and development purposes.

Page 35: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-35

Task Delay

• To delay a task for a specified number of system clock ticks.

• To poll every 1/7 second:FOREVER {

taskDelay (sysClkRateGet() / 7);...

}

STATUS taskDelay (ticks)

• Use sysClkRateSet() to change the clock rate.

• Accurate only if clock rate is a multiple of seven ticks / seconds.• Can suffer from “drift.”

Page 36: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-36

Reentrancy and Task Variables

• If tasks access the same global or static variables, the resource can become corrupted (called a race condition).

• Possible Solutions:

• Task Variables cause a 32-bit value to be saved and restored on context switchs, like a register.

• Use only stack variables in applications.• Protect the resource with a semaphore.• Use task variables to make the variable private to a task

• Caveat: task variables increase context switch times.

• See the taskVarLib manual pages for details.

Page 37: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-37

Task Hooks

• User-defined code can be executed on every context switch, at task creation, or at task deletion:

taskSwitchHookAdd ()taskCreateHookAdd ()taskDeleteHookAdd ()

• VxWorks uses a switch hook to implement task variables.

• See manual pages on taskHookLib for details.

Page 38: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-38

Task Information

• Like i(), but also displays:

• Can also use show ():-> show (tNetTask, 1)

• Stack information• Task options• CPU registers• FPU registers (if the VX_FP_TASK option bit is set)

ti (taskNameOrId)

Page 39: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-39

Task Browser

• To obtain information about a specific task, click on the task’s summary line in the main target browser.

Page 40: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-40

What is POSIX ?

• Originally, an IEEE committee convened to create a standard interface to UNIX for:

• VxWors supports almost all of the 1003.1b POSIX Real-time Extensions.

• Increased portability.• Convenience.

• Context switch times are very fast.• Text, data, and bss are stored in a common, global address space.

• The POSIX real-time extensions are based on implicit assumptions about the UNIX process model which do not always hold in VxWorks. In VxWorks,

Page 41: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-41

What does VxWorks support ?

Library Description

aioPxLib Asynchornous I/OsemPxLib POSIX SemaphoresmqPxLib POSIX Message QueuesmmanPxLib POSIX Memory ManagementschedPxLib POSIX Scheduler InterfacesigLib POSIX SignalstimerLib, clockLib POSIX Timer/Clock InterfacedirLib File/Directory Information

Page 42: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-42

Real-Time Multitasking

Introduction

Task Basics

Task Control

Error Status

System Tasks

Page 43: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-43

Error Status

•Global integer errno used to propagate error information:

• Low level routines detecting an error, sets errno.• Calling routine can examine errno to discover why the routine failed.

Page 44: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-44

Errno and Context Switches

At each context switch, the kernel saves and restoresthe value of errno.

Page 45: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-45

Setting Errno

• Lowest level routine to detect an error sets errno and returns ERROR:

STATUS myRoutine (){

...if (myNumFlurbishes >= MAX_FLURBISH) {

errno = s_myLib_TOO_MANY_FLURBISHES;return (ERROR);

}…pMem=malloc(sizeof(myStruct));if ( pMem== NULL) {

/* malloc() sets errno - don’t redefine it */return (ERROR);

}...

}

Page 46: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-46

Examining Errno

• Examine errno to find out why a routine failed.

if (reactorOk() == ERROR) {switch (errno)

{case S_rctorLib_TEMP_DANGER_ZONE:

startShutDown ();break;

case S_rctorLib_TEMP_CRITICAL_ZONE:logMsg (“Run!”);break;

case S_rctorLib_LEAK_POSSIBLE:checkVessel ();break;

default: startEmergProc ();}

}

• errno is only valid after an error occurs.

Page 47: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-47

Interpreting Errno

• VxWorks uses the 32-bit value errno as follows:

• Module numbers are defined in vwModNum.h.• Each module defines its own error numbers in its header file.

• Module number 0x11 (define in vwModNum.h to be memLib) and• Error number 0x01 (defined in memLib.h to be “not enough memory”).

• For example, an errno of 0x110001 would be:

module error number

31 15 0

Page 48: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-48

Error Messages

• VxWorks uses an error symbol table (statSymTbl) to convert error numbers to error messages.

• To print the error message for the current task’s error status to STD_ERR: -> perror (“darn”) darn: S_netDrv_NO_SUCH_FILE_OR_DIR

• To print the error message associated with an error number to the WindSh console : -> printErrno (0x110001) S_memLib_NOT_ENOUGH_MEMORY

Page 49: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-49

User-Defined Error Codes

To get perror( ) to print your error messages:1. Create a user header file directory, e.g.target/config/bspName/h.

2. Create a file xxModNum.h in the user header directory:#define M_myLib (501 << 16)

3. Define error macros in your header file (which must bein the user header directory):

#define S_myLib_BAD_STUFF (M_myLib|1)

4. Rebuild the system error table, statTbl.o.

5. Rebuild VxWorks with the new error table linked in.

Page 50: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-50

Real-Time Multitasking

Introduction

Task Basics

Task Control

Error Status

System Tasks

Page 51: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-51

System Tasks

Task Name Priority Function

tUsrRoot 0 Initial task. Configures the system, spawns the shell, then exits.

tLogTask 0 Message logging.

tExecTask 0 Exeption handling.

tWdbTask 3 WDB running agent.

tNetTask 50 Task-level network functions.

tFtpdTask 55 FTP server.

Page 52: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-52

Summary

• Real-time multitasking requirements:• Preemptive priority-based scheduler.• Low overhead.

• taskSpawn() lets you specify intrinsic properties :• Priority• Stack size• Options

• Task properties stored in task’s TCB.• OS control information (priority, stack size, options, state, ...).• CPU context (PC, SP, CPU registers, ...).

Page 53: Wind River Systems, Inc. 1997 Chapter - 5 Real-Time Multitasking.

5-53

• Additional task context :• errno

• Task hooks

• Task manipulation routines in taskLib:• taskSpawn / taskDelete• taskDelay• taskSuspend / taskResume

• Task information• ti / show• Task Browser

• Task variables

Summary