csci1600: embedded and real time software lecture 18: real time languages steven reiss, fall 2015

24
CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Upload: jewel-berry

Post on 17-Jan-2016

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

CSCI1600: Embedded and Real Time SoftwareLecture 18: Real Time Languages

Steven Reiss, Fall 2015

Page 2: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Programming Language Wars

Page 3: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Programming Languages

For real-time and embedded programming

Choices Assembler

C/C++ (low-level language)

Java/C# (high-level language)

Data flow languages (FPGA)

Other

How should we choose?

Page 4: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Criteria for Choosing Small footprint for embedded systems

Ability to write small code

Ability to make efficient use of memory

High performance

Predictable performance

Real time features Interrupts

Scheduling tasks or threads

Synchronization

Page 5: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Criteria For Choosing

Low Power consumption

Other factors Fault tolerance

Writing reliable code (verifiable, testable, understandable)

Writing secure code

Code understandability

Page 6: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

C versus C++ versus Assembler Footprint

Performance

Real time features (interrupts, synchronization, scheduling control)

Fault tolerance

Reliability

Security

Understandability

Page 7: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Why Not Java

What are the pros and cons?

Page 8: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

What about Java

Not what Java was designed for

Potential problems Java has the reputation of being slow & unpredictable

Java programs are large

Garbage collection and run time checks seem a bad idea

Interpreted languages are too slow

Page 9: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Reasons to Use Java

Don’t want to give up a language we are used to

Java programs are more reliable Many errors caught at source/run time level

More secure

Safety is critical

Easier to verify

Exceptions, threads, synchronization built in

Data structures that are thread safe

Page 10: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Using Java

Two efforts under way Address embedding issues

Address real time issues

Understanding these helps understanding Embedded and real time programming in general

Page 11: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Embedded Java

Basic Problems VM, JIT compiler, libraries are big (64M, 256M)

Scheduling abstraction used for threads is not fixed priority

Java emphasizes device independence

No access to physical memory (IO)

How can these problems be addressed?

Page 12: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Java ME and pJava Attempts to address size & independence issues

Organized in terms of configurations Configuration = broad range of similar devices

Determines what libraries to include

Determines JVM features to include

Scalable OS Select the features needed for the application

Can run in 64k in smallest configuration

No verification, finalization, class loader, thread groups, reflection

Limited I/O, error handling

Limited data types (no 64 bit, no multidimensional arrays)

Page 13: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

J2ME Configurations

Connected Devise Configuration Limited set of library classes

32 bit, 4MB memory required

Most code sits in ROM

Connected Limited Device Configuration Even more limited

512K memory required

Page 14: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

J2ME Profiles Support sets of similar devices

Mobile Information Device Profile

Touch screen or keypad, 96x54 or larger display

Wireless networking

Runs with 32k ram, 8k eeprom, 128k flash

Used in PDAs, mobile phones, pagers

Optional packages

Mobile Media API support multimedia applications

Other Embedded Javas

Java Card – applet on a smart card

Java TV – for set top boxes

Page 15: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Java Real Time

Embedding is easy Just pare down the language and libraries

Real time requirements are more difficult Affect the execution model of the language

Nothing in Java spec makes wall-clock guarantees

Garbage collection pauses do not affect the semantics

Thread priorities exist but aren’t well defined

Page 16: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Compiled Approach

Fiji VM

Precompile Java to C OS includes the garbage collector

Overhead about 30% over straight C code

Max time of about 10% long

But this is experimental, not a guarantee

Page 17: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

JSR1: Real Time Java Specification

Thread scheduling and dispatch (tasks)

Memory management

Synchronization and resource sharing

Asynchronous event handling

Asynchronous transfer of control

Asynchronous thread termination

Physical memory access

Page 18: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Thread Scheduling Basic real-time scheduler is included

Priority based and preemptive

At least 28 priority level

Can define your own schedulers

Schedulable Objects

RealtimeThread :: uses real time scheduler

NoHeapRealtimeThread :: may not allocate or reference normal heap

Can run in preference to GC

GC can be preempted

Page 19: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Memory Management

Garbage collection is a problem Not that it exists, but that it makes response time

unpredictable

Why not just interrupt the garbage collector

Needs to lock all of memory?

Actually needs to lock all of garbage collected memory

Hence create memory areas that are separate

Page 20: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Memory Management Memory Areas

Regions of memory outside of traditional Java heap

Don’t have to e garbage collected

Scoped Memory

For objects that have a lifetime defined by the scope

Physical memory

Specific regions for specific purposes

Immortal memory

Never collected

Budgeted allocation

Limit allocation for a schedulable objet

Can be preallocated

Page 21: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Synchronization Problems

Synchronized data structures

Interactions with scheduling

Blocking times as part of max response time

Wait Queues as a primitive class

Dealing with priority problems

Priority inheritance supported

Priority ceiling emulation supported

Wait-free classes for non-blocking shared access

Fixed upper bound on entering an unlocked synchronized block

Page 22: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Asynchronous Event Handling

Bind handlers to internal and external events

External events Signals, timers, interrupts (classes to support these)

Page 23: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Asynchronous Transfer of Control

Can you interrupt or stop a thread in Java? What do Thread.interrupt() and Thread.stop() do?

Schedulable objects Can declare throws AsynchronouslyInterruptedException

These can be safely interrupted

When interrupted, interruptAction() is invoked

Can stop a thread through implicit exceptions

Page 24: CSCI1600: Embedded and Real Time Software Lecture 18: Real Time Languages Steven Reiss, Fall 2015

Homework

For next week (10/26) Present you project to the class

Plans, progress to date

Project model

Tasks and model(s) for each task

Hand this in

Can be part of presentation