Java TM & Real-Time Advantages, Limitations, & RTSJ



Similar documents
Tutorial: Getting Started

Design Pattern for the Adaptive Scheduling of Real-Time Tasks with Multiple Versions in RTSJ

Validating Java for Safety-Critical Applications

Crash Course in Java

Outline of this lecture G52CON: Concepts of Concurrency

The Design and Performance of Real-Time Java Middleware

Scheduling of the Distributed Thread Abstraction with Timing Constraints using RTSJ

OBJECT ORIENTED PROGRAMMING LANGUAGE

PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design

Built-in Concurrency Primitives in Java Programming Language. by Yourii Martiak and Mahir Atmis

Real Time Programming: Concepts

An Overview of Java. overview-1

CS11 Java. Fall Lecture 7

Predictable response times in event-driven real-time systems

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

02 B The Java Virtual Machine

Tasks Schedule Analysis in RTAI/Linux-GPL

Real-Time Java for Latency Critical Banking Applications. Bertrand Delsart JavaRTS Technical Leader Author of Sun's RTGC technology

Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner.

Object Oriented Software Design II

CPU Scheduling Outline

Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding

How to create/avoid memory leak in Java and.net? Venkat Subramaniam

General Introduction

Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming

Replication on Virtual Machines

Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture

Real-Time Systems Prof. Dr. Rajib Mall Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur

Threads & Tasks: Executor Framework

Monitors, Java, Threads and Processes

Threads 1. When writing games you need to do more than one thing at once.

JVM Tool Interface. Michal Pokorný

Java Interview Questions and Answers

Cloud Computing. Up until now

picojava TM : A Hardware Implementation of the Java Virtual Machine

Scheduling recurring tasks in Java applications

CSCI E 98: Managed Environments for the Execution of Programs

Developing Embedded Software in Java Part 1: Technology and Architecture

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

Jorix kernel: real-time scheduling

Performance Comparison of RTOS

Multiprocessor Scheduling and Scheduling in Linux Kernel 2.6

Getting Started with the Internet Communications Engine

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Real- Time Scheduling

Chapter 1 Java Program Design and Development

Restraining Execution Environments

Java Coding Practices for Improved Application Performance

1. What are Data Structures? Introduction to Data Structures. 2. What will we Study? CITS2200 Data Structures and Algorithms

Embedded Systems. 6. Real-Time Operating Systems

Java (12 Weeks) Introduction to Java Programming Language

Fundamentals of Java Programming

The Java Virtual Machine and Mobile Devices. John Buford, Ph.D. Oct 2003 Presented to Gordon College CS 311

Operating Systems Concepts: Chapter 7: Scheduling Strategies

JAVA - MULTITHREADING

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

Resource Utilization of Middleware Components in Embedded Systems

Tomcat Tuning. Mark Thomas April 2009

A Comparative Study on Vega-HTTP & Popular Open-source Web-servers

IBM SDK, Java Technology Edition Version 1. IBM JVM messages IBM

Monitoring Java enviroment / applications

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages. Nicki Dell Spring 2014

STM32JAVA. Embedded Java Solutions for STM32

Java Memory Model: Content

Threads Scheduling on Linux Operating Systems

Chapter 5: CPU Scheduling. Operating System Concepts 8 th Edition

Can You Trust Your JVM Diagnostic Tools?

Java Programming Fundamentals

An Incomplete C++ Primer. University of Wyoming MA 5310

Thomas Fahrig Senior Developer Hypervisor Team. Hypervisor Architecture Terminology Goals Basics Details

Fachbereich Informatik und Elektrotechnik SunSPOT. Ubiquitous Computing. Ubiquitous Computing, Helmut Dispert

Java Troubleshooting and Performance

Effective Java Programming. measurement as the basis

Production time profiling On-Demand with Java Flight Recorder

What is best for embedded development? Do most embedded projects still need an RTOS?

An Implementation Of Multiprocessor Linux

Virtual Machine Learning: Thinking Like a Computer Architect

4. Fixed-Priority Scheduling

Socket-based Network Communication in J2SE and J2ME

Objectif. Participant. Prérequis. Remarque. Programme. C# 3.0 Programming in the.net Framework. 1. Introduction to the.

Evolution of the Major Programming Languages

A Look through the Android Stack

CS 111 Classes I 1. Software Organization View to this point:

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

SYSTEM ecos Embedded Configurable Operating System

Chapter 6, The Operating System Machine Level

CSC 551: Web Programming. Spring 2004

STORM. Simulation TOol for Real-time Multiprocessor scheduling. Designer Guide V3.3.1 September 2009

Mutual Exclusion using Monitors

Real-Time Component Software. slide credits: H. Kopetz, P. Puschner

Exception Handling. Overloaded methods Interfaces Inheritance hierarchies Constructors. OOP: Exception Handling 1

Multithreaded Programming

Practical Performance Understanding the Performance of Your Application

Introduction to Java

Transcription:

Java TM & Real-Time Advantages, Limitations, & Christos.Kloukinas@imag.fr Verimag (http://www-verimag.imag.fr/) Grenoble, France École IN2P3 d informatique: Temps Réel 29 May 2003 p.1/56

Java is a language with lots of merits We will examine: Its advantages for Real-Time programming; Its disadvantages for Real-Time programming; and, The proposal. École IN2P3 d informatique: Temps Réel 29 May 2003 p.2/56

Java is: Object-Oriented; Type-Safe; Portable; Library-Rich; and, has automatic Garbage Collection. École IN2P3 d informatique: Temps Réel 29 May 2003 p.3/56

Java versus C/C++ O-O helps with structuring code and decreasing code dependencies. Increased type-safety, bound-checks and lack of pointer-arithmetic increase overall safety and allow for aggressive compiler optimisations. Built-in exceptions, threads & synchronisation means that the compiler knows how to do The Right Thing. Built-in GC means no more dangling pointers & a lot fewer memory leaks. Fixed size and byte order of basic types helps with porting your software. École IN2P3 d informatique: Temps Réel 29 May 2003 p.4/56

Structures now become Classes and have associated Methods. Easier to tell what functions can have access to a structure. No need to check the kind of structure another function passed you - the O-O internal mechanisms do this automatically. O-O: How to let your compiler write your switches... École IN2P3 d informatique: Temps Réel 29 May 2003 p.5/56

- II Controlling access to methods, fields & classes themselves: public private protected packages (only one class can be public in a package) Other modifiers: abstract / static / final / strictfp synchronized (equivalent to a synchronized(this)) École IN2P3 d informatique: Temps Réel 29 May 2003 p.6/56

- III unions & enums don t exist - use polymorphism (or compile time constants if it s not worth the abstraction) multiple inheritance - use interfaces or composition Reflection - getclass, getmethods, getpackage, isinstance École IN2P3 d informatique: Temps Réel 29 May 2003 p.7/56

- III unions & enums don t exist - use polymorphism (or compile time constants if it s not worth the abstraction) multiple inheritance - use interfaces or composition Reflection - getclass, getmethods, getpackage, isinstance Unlike C++, there are no object destructors! Cannot control when finalizers will be executed (if they ever are... ) École IN2P3 d informatique: Temps Réel 29 May 2003 p.7/56

Concurrent Programming with Java Java has: Threads (& Condition Variables) École IN2P3 d informatique: Temps Réel 29 May 2003 p.8/56

Threads in Java Threads implement the Runnable interface, i.e., provide a run method Threads have priorities: from MIN_PRIORITY to MAX_PRIORITY, default is NORM_PRIORITY Threads have lower priority than the GC (always) Resource allocation is not (necessarily) priority-based Stack size can be declared, but it can also be ignored... École IN2P3 d informatique: Temps Réel 29 May 2003 p.9/56

Threads in Java - II Dæmon threads (cannot keep an application running) Have methods: holdslock, interrupt, join, yield, sleep, destroy (not implemented) No longer have: resume, stop, suspend : Threads poll for interrupts with one of: wait, sleep, join, isinterrupted The target thread can poll whenever it wants École IN2P3 d informatique: Temps Réel 29 May 2003 p.10/56

Starting a Thread class ERR { static public void pr(string msg){ System.err.println(Thread. currentthread().tostring()+": "+msg) ;}} class MyThread extends Thread { Thread parent; public MyThread() {parent = Thread. currentthread();} public void run() { ERR.pr("Hello"); } } École IN2P3 d informatique: Temps Réel 29 May 2003 p.11/56

Starting a Thread - II class Main { public static void main(string[] argv) { MyThread athread = new MyThread(); ERR.pr("this is main"); athread.start(); // calls run() try {athread.join();} catch (InterruptedException ie){err.pr ("Un-joinable"+ie);} finally {ERR.pr("Bye");} } } École IN2P3 d informatique: Temps Réel 29 May 2003 p.12/56

Interrupting a Thread class MyThread extends Thread { // As before... public void run() { ERR.pr("Hello"); try {this.sleep(2);} catch ( InterruptedException ie) {} parent.interrupt(); } } École IN2P3 d informatique: Temps Réel 29 May 2003 p.13/56

Interrupting a Thread - II class Main { public static void main(string[] argv) throws InterruptedException { MyThread athread = new MyThread(Thread.currentThread()); ERR.pr("this is main"); athread.start(); // calls run() try { athread.join(); École IN2P3 d informatique: Temps Réel 29 May 2003 p.14/56

Interrupting a Thread - III } } if (Thread.currentThread(). isinterrupted()) { ERR.pr("Was interrupted"); throw new InterruptedException(" Suicide...");} } catch (InterruptedException ie) { ERR.pr("Un-joinable:" + ie); throw ie; } finally {ERR.pr("Bye");} ERR.pr("Never printed..."); École IN2P3 d informatique: Temps Réel 29 May 2003 p.15/56

Each Java object has its own semaphore and its own condition variable. We use the synchronized(object){} construct to denote a critical region block protected by a monitor on the semaphore of the object. Inside a monitor, we use wait() & notify() to wait on a condition & to flag it. Can also use wait(/*timeout*/) and notifyall(). A break, continue, return, throw inside a monitor will exit it after having unlocked the object. Are you sure you do so in C/C++? École IN2P3 d informatique: Temps Réel 29 May 2003 p.16/56

- II Entering a monitor is not priority-based. A timed wait can wait for more than the timeout specified. Choosing a thread to notify is not priority-based. No priority-sorted wait queues. No priority-inversion avoidance protocol. École IN2P3 d informatique: Temps Réel 29 May 2003 p.17/56

java.lang.timer & java.util.timertask One-time execution; Repeated execution. fixed-delay n th execution starts period milliseconds after the (n 1) th execution (delays are therefore additive) fixed-rate n th execution starts n period milliseconds after the first execution (try to keep a constant rate - may execute many times in rapid succession to catch up) École IN2P3 d informatique: Temps Réel 29 May 2003 p.18/56

- II No Real-Time guarantees! Using wait(/*timeout*/) If a timer task takes too long, it can delay future executions. Not a dæmon thread by default (can keep an application from terminating) When should I run if no delays? scheduledexecutiontime() A timer can be associated with many timer tasks A timer task can be associated with many timers cancel() a timer or a timer task École IN2P3 d informatique: Temps Réel 29 May 2003 p.19/56

Timer Example class MyTimerTask extends TimerTask { private int MAX_TARDINESS = 15; public void run() { ERR.pr(toString()+": Started"); if (System.currentTimeMillis() - scheduledexecutiontime() >= MAX_TARDINESS) return; // Too late ERR.pr(toString()+": running @ " + System.currentTimeMillis()); } École IN2P3 d informatique: Temps Réel 29 May 2003 p.20/56

} Timer Example - II public static void main(string[] argv) { MyTimerTask atimertask = new MyTimerTask(); Timer atimer = new Timer(false); // Not a daemon timer // Start=10 ms, period=30 ms atimer.scheduleatfixedrate(atimertask, 10L, 20L); // atimer.cancel(); } École IN2P3 d informatique: Temps Réel 29 May 2003 p.21/56

Native Interface Example - Java class HelloWorld { private native void print(); static { System.loadLibrary("HelloWorld"); } public static void main(string[] args) { Thread.currentThread().setName("The Main from Java"); new HelloWorld().print(); } } École IN2P3 d informatique: Temps Réel 29 May 2003 p.22/56

Native Interface Declaring methods as native Loading them up at start-up using static blocks Finding out signatures using javap -s class École IN2P3 d informatique: Temps Réel 29 May 2003 p.23/56

Type Signatures void V boolean Z char C byte B short S int I long J float F double D Object of class X : LX; Array of type X : [X ret foo(args) : (args)ret String[] foo(thread[] arr, int i, long j):? École IN2P3 d informatique: Temps Réel 29 May 2003 p.24/56

Type Signatures void V boolean Z char C byte B short S int I long J float F double D Object of class X : LX; Array of type X : [X ret foo(args) : (args)ret String[] foo(thread[] arr, int i, long j): ([Ljava/lang/Thread;IJ)[Ljava/lang/String; École IN2P3 d informatique: Temps Réel 29 May 2003 p.24/56

Can do lock/unlock, new, etc. It s heavy - all queries use strings Cannot optimise code written with it Java threads are not necessarily system threads May have to use a finalizer It will be run before the memory is reused... École IN2P3 d informatique: Temps Réel 29 May 2003 p.25/56

Used with GCJ (front-end of GCC) Java classes are C++ classes (not vice versa) Faster & can be optimised A lot simpler to write code École IN2P3 d informatique: Temps Réel 29 May 2003 p.26/56

Java is slow; Java s memory model is convoluted (Under revision); The GC is unpredictable; is unpredictable; can suffer from priority-inversion; Notification is not priority-based; are not accurate; Design for portability Cannot use any special OS mechanisms École IN2P3 d informatique: Temps Réel 29 May 2003 p.27/56

It s not Java, it s the implementations; One can use a JIT or an AOT compiler; It s easier to optimise Java than C/C++ No (wild) casts, pointer-arithmetic, etc.. École IN2P3 d informatique: Temps Réel 29 May 2003 p.28/56

JIT: can do anything a JVM does; works on bytecodes; needs resources; cannot optimise much; is unpredictable. AOT: can do aggressive optimisations; no need for extra resources at the target system; is predictable; can always add a JVM for loading classes. École IN2P3 d informatique: Temps Réel 29 May 2003 p.29/56

Interruptible, low latency, s exist Usually meant for large or non-critical systems But there is also the memory region technique. École IN2P3 d informatique: Temps Réel 29 May 2003 p.30/56

Thread & Dispatching Management Physical Access & Resource Sharing Event Handling Transfer of Control Thread Termination École IN2P3 d informatique: Temps Réel 29 May 2003 p.31/56

Preemptive, Priority-based by default At least 28 different priorities RealtimeThread Can access the heap Lower priority than the GC NoHeapRealtimeThread No heap accesses Higher priority than the GC AsyncEventHandler Depends on the noheap arg Can be unbound or bound to a particular thread It can block (holding resources) École IN2P3 d informatique: Temps Réel 29 May 2003 p.32/56

- II Need to have a reference to a Scheduler obj. A Scheduler has params for priority, importance, memory, etc. PeriodicParameters, AperiodicParameters, SporadicParameters Processing group to treat non-periodic threads as a single periodic one Max. Execution time, Deadline & overrun handlers The execution overrun handler may be ignored & use the duration only as a hint to the feasibility algorithm. École IN2P3 d informatique: Temps Réel 29 May 2003 p.33/56

- III Scheduler.addToFeasibility(Schedulable) to add another task in the feasibility analysis performed by the scheduler. Scheduler.isFeasible() to find out if the current system can be indeed scheduled Changing the parameters of a task at run-time through the setiffeasible(schedulable, ReleaseParameters, Parameters) waitfornextperiod() for periodic tasks. École IN2P3 d informatique: Temps Réel 29 May 2003 p.34/56

Scedulable Objects setscheduler( Scheduler sched, Parameters sched_params, ReleaseParameters release_params, Parameters mem_params, ProcessingGroupParameters group) defines the PriorityScheduler, with two final int fields, MAX_PRIORITY and MIN_PRIORITY. École IN2P3 d informatique: Temps Réel 29 May 2003 p.35/56

Parameters defines two kinds of parameters: PriorityParameters(int priority) and an additional one for declaring the importance of the threads along with their priority ImportanceParameters(int priority, int importance) École IN2P3 d informatique: Temps Réel 29 May 2003 p.36/56

Release Parameters - Periodic PeriodicParameters( HighResolutionTime start, /* null = start when released */ RelativeTime period, RelativeTime cost, RelativeTime deadline, /* use period when null */ AsyncEventHandler overrunhandler, AsyncEventHandler misshandler) École IN2P3 d informatique: Temps Réel 29 May 2003 p.37/56

Release Parameters - Aperiodic AperiodicParameters( RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunhandler, AsyncEventHandler misshandler) École IN2P3 d informatique: Temps Réel 29 May 2003 p.38/56

Release Parameters - Sporadic SporadicParameters( RelativeTime mininterarrival, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunhandler, AsyncEventHandler misshandler) École IN2P3 d informatique: Temps Réel 29 May 2003 p.39/56

Parameters Parameters( long maxarea, // or Parameters.NO_MAX (units= bytes) long maximmortal, // or NO_MAX (units=bytes) long allocationrate) // or NO_MAX (units=bytes/sec) École IN2P3 d informatique: Temps Réel 29 May 2003 p.40/56

Thread Group ProcessingGroupParameters( HighResolutionTime start, RelativeTime period, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunhandler, AsyncEventHandler misshandler) École IN2P3 d informatique: Temps Réel 29 May 2003 p.41/56

Creating a R-T Thread Scheduler sched= new PriorityScheduler(); PeriodicParameters pp = new PeriodicParameters( new RelativeTime(0,0),//when released new RelativeTime(100, 10), // period new RelativeTime(30, 0), // cost new RelativeTime(60, 0), // deadline null, // no Overrun Handler null); // no Miss Period Handler ImportanceParameters prio = new ImportanceParameters(MAX_PRIORITY, 3); Area ma = new LT(1024, 1024); École IN2P3 d informatique: Temps Réel 29 May 2003 p.42/56

Creating a R-T Thread - II Parameters mp = new Parameters(Parameters. NO_MAX,Parameters.NO_MAX); ProcessingGroupParameters gp = null; RealtimeThread rt = new RealtimeThread(prio, pp, mp, ma, gp, new Runnable () {/*the run method...*/ }); rt.setscheduler(sched); if (!rt.getscheduler().isfeasible()) throw new Exception("Not feasible"); rt.start(); // Release the thread École IN2P3 d informatique: Temps Réel 29 May 2003 p.43/56

Finding a New Scheduler class SchedExample { public static Scheduler findsched(string policy) { String classname = System.getProperty(" javax.realtime.scheduler."+policy); Class clazz; try { if (null!= classname && null!= (clazz = Class.forName(className))) return (Scheduler) clazz.getmethod(" instance",null).invoke(null,null); } catch (/* lots of exceptions */) {} return null; } École IN2P3 d informatique: Temps Réel 29 May 2003 p.44/56

Finding a New Scheduler - II Scheduler sched = findsched("edf"); if (null!= sched) { RealtimeThread rt = new RealtimeThread( /*...*/); rt.setscheduler(sched); if (!rt.getscheduler().isfeasible()) throw new Exception("Not feasible"); rt.start(); // Release the thread } École IN2P3 d informatique: Temps Réel 29 May 2003 p.45/56

Management Execution Stack, Heap & Scopes Scopes give bounds to the lifetime of objects allocated within them Objects of a scope collected en masse after its Runnable exits A scope is collected before being reused (not when exited, so finalizers still a problem) Hierarchy of scopes - inner, outer (or unrelated) Immortal memory : top-most scope, collected when the JVM exits Objects surviving current scope need be allocated to the top-most scope which contains a reference to these objects École IN2P3 d informatique: Temps Réel 29 May 2003 p.46/56

Management - II LT versus VT Allocation in LT is linear with respect to object s size. A VT may be separately GC ed and may be augmented if it s not big enough Assignment Rules Refs Heap Immortal Scoped Heap Yes Yes No Immortal Yes Yes No Scoped Yes Yes Yes, if same or higher scope École IN2P3 d informatique: Temps Réel 29 May 2003 p.47/56

Management - III LTPhysical, VTPhysical, ImmortalPhysical SizeEstimator & reserve(class, instances) RawAccess - Accessing a region interpreted as byte, short, int, long or as an array of such RawFloatAccess - Same but for float & double Maximum preemption latency of a Real-Time thread due to the GC is given by: RealtimeSystem.currentGC(). getpreemptionlatency() (returns a RelativeTime) École IN2P3 d informatique: Temps Réel 29 May 2003 p.48/56

Priority inheritance protocol supported by default Given the GC it s impossible to implement PIP! 3 Wait-free queues for avoiding this. WaitFreeWriteQueue (non-blocking write), WaitFreeReadQueue (non-blocking read), WaitFreeDequeue (non-blocking write & read) Real-Time part of queue never blocks - no need for PIP. If action is not possible (e.g., queue is full) you decide (overwrite old value, ignore the new one) École IN2P3 d informatique: Temps Réel 29 May 2003 p.49/56

Events AsyncEvent, AsyncEventHandler, handleasyncevent() run() bindto(string), addhandler(), fire() Data-less events Can have multiple handlers per event, events per handler Behave like RealtimeThread, or like NoHeapRealtimeThread if given a scoped region Can block POSIXSignalHandler if OS supports POSIX École IN2P3 d informatique: Temps Réel 29 May 2003 p.50/56

Transfer of Control Java s longjmp A method must declare lyinterruptedexception, otherwise it is postponed Don t break code which doesn t expect to be interrupted Also postponed if in a synchronized block Don t leave shared objects in an inconsistent state Use happened() to find out if the AIE you got is the one you expected dointerruptible() if it is, propagate it if not École IN2P3 d informatique: Temps Réel 29 May 2003 p.51/56

ATC - II Class Timed for Real-Time timers (throws an AIE) Timer restarted after dointerruptible() resettime() to use another duration disable, enable, fire, propagate, isenabled, happened Blocking java.io.* classes must know of AIE (unblock, raise IOException, or complete normally... ) École IN2P3 d informatique: Temps Réel 29 May 2003 p.52/56

Asynch. Termination Allowing it everywhere, always is unsafe So we use ATC to do it An AIE is treated as a normal exception, but a catch( ALL ) doesn t catch it, unless we specifically test for the AIE with happened École IN2P3 d informatique: Temps Réel 29 May 2003 p.53/56

RTCE & HIP- from the J-Consortium.org Ravenscar-Java- from the Ada community JTRON- from Japan Java 2, Micro Edition (J2ME) - from SUN, for embedded systems École IN2P3 d informatique: Temps Réel 29 May 2003 p.54/56

Easier to write correct code (threads, monitors, exceptions) Many libraries Strongly typed No out-of-bound accesses, dangling pointers Automatic GC- no more leaks Easier to have it optimised It has all the buzzwords... École IN2P3 d informatique: Temps Réel 29 May 2003 p.55/56

Why Others are already using it Tools are getting better (and more) Using C/C++ is tedious, error-prone, difficult to maintain and to have it validated Embedded systems is a huge market Software is replacing hardware Too complex for todays tools and languages Java promises to help us Cannot fight a dream... So join it! École IN2P3 d informatique: Temps Réel 29 May 2003 p.56/56