1 / 21

Roadmap

Introduction Concurrent Programming Communication and Synchronization Completing the Java Model Overview of the RTSJ Memory Management Clocks and Time. Scheduling and Schedulable Objects Asynchronous Events and Handlers Real-Time Threads Asynchronous Transfer of Control

terisa
Télécharger la présentation

Roadmap

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction Concurrent Programming Communication and Synchronization Completing the Java Model Overview of the RTSJ Memory Management Clocks and Time Scheduling and Schedulable Objects Asynchronous Events and Handlers Real-Time Threads Asynchronous Transfer of Control Resource Control Schedulability Analysis Conclusions Roadmap

  2. Resource Sharing Lecture aims: • To introduce the notion of priority inversion • To illustrate simple priority inheritance and priority ceil emulation inheritance • To show the RTSJ Basic Model

  3. Introduction and Priority Inversion • In Java, communication and synchronization is based on a monitor-like construct • All synchronization mechanisms that are based on mutual exclusion suffer from priority inversion • This is where a low-priority thread (schedulable object) enters into a mutual-exclusion zone (synchronized method or statement) which it shares with a high-priority thread • A medium-priority thread then becomes runnable, pre-empts the low-priority thread and performs a computationally-intensive algorithm • At the start of this algorithm, a high-priority thread becomes runnable, pre-empts the medium-priority thread and tries to enter the mutual-exclusion zone

  4. Priority Inversion Continued • As the low-priority thread currently occupies the zone, the high-priority thread is blocked • The medium-priority thread then runs, thereby indirectly blocking the progression of the high-priority thread for a potentially unbounded period of time • It is this blocking that makes it very difficult to analyse the timing properties of schedulable objects

  5. Priority Inversion • To illustrate an extreme example of priority inversion, consider the executions of four periodic threads: a, b, c and d; and two resources (synchronized objects) : Q and V thread Priority Execution Sequence Release Time a 1 EQQQQE 0 b 2 EE 2 c 3 EVVE 2 d 4 EEQVE 4 • Where E is executing for one time unit, Q is accessing resource Q for one time unit, V is is accessing resource V for one time unit

  6. Example of Priority Inversion thread d c b a 0 2 4 6 8 10 12 14 16 18 Preempted Executing Executing with Q locked Blocked Executing with V locked

  7. Solutions to Priority Inversion • Priority Inheritance • Non-blocking communication

  8. Priority Inheritance • If thread p is blocking thread q, then q runs with p's priority Process d c b a 0 2 4 6 8 10 12 14 16 18

  9. The RTSJ Basic Model • Priority inversion can occur whenever a schedulable object is blocked waiting for a resource • In order to limit the length of time of that blocking, the RTSJ requires the following: • All queues maintained by the system to be priority ordered (e.g. the queue of schedulable objects waiting for an object lock • Where there is more than one schedulable object in the queue at the same priority, the order should be first-in-first-out (FIFO) • Similarly, the queues resulting from calling the wait method in the Object class should be priority ordered • Facilities for the programmer to specify different priority inversion control algorithms • By default, the RTSJ requires simple priority inheritance to occur whenever a schedulable object is blocked waiting for a resource

  10. Monitor Control package javax.realtime; public abstract class MonitorControl { // constructors protected MonitorControl(); // methods public static voidsetMonitorControl( MonitorControl policy); public static voidsetMonitorControl( Object monitor, MonitorControl policy); // also get methods }

  11. Priority Inheritance package javax.realtime; public class PriorityInheritance extends MonitorControl { // methods public static PriorityInheritance instance(); }

  12. Blocking and Priority Inheritance • If a thread has m critical sections that can lead to it being blocked then the maximum number of times it can be blocked is m • Priority ceiling emulation attempts to reduce the blocking

  13. Priority Ceiling Emulation • Each thread has a static (base) default priority assigned (perhaps by the deadline monotonic scheme). • Each resource has a static ceiling value defined, this is the maximum priority of the threads that use it. • A thread has a dynamic (active) priority that is the maximum of its own static priority and the ceiling values of any resources it has locked • As a consequence, a thread will only suffer a block at the very beginning of its execution • Once the thread starts actually executing, all the resources it needs must be free; if they were not, then some thread would have an equal or higher priority and the thread’s execution would be postponed

  14. Priority Ceiling Emulation Inheritance thread d c b a 0 2 4 6 8 10 12 14 16 18

  15. Priority Ceiling Emulation package javax.realtime; public class PriorityCeilingEmulation extends MonitorControl { // methods publicstatic PriorityCeilingEmulation instance(int ceiling); public intgetCeiling(); ... }

  16. NOTE • Generally, the code used inside a synchronized method (or statement) should be kept as short as possible, as this will dictate the length of time a low priority schedulable object can block a high one • It is only possible to limit the block if the code doesn’t contain: • unbounded loops, • arbitrary-length blocking operations that hold the lock, for example an arbitrarily-length sleep request

  17. Ceiling Violations • Whenever a schedulable object calls a synchronized method (statement) in an object which has the Priority-CeilingEmulation policy in force, the real-time virtual machine will check the active priority of the caller • If the priority is greater than the ceiling priority, the uncheck CeilingViolationException is thrown

  18. Communication between heap-using and no-heap using schedulable objects I • One of the main driving forces behind the RTSJ was to make real-time Java applications more predictable • Hence, schedulable objects which need complete predictability can be defined not to reference the heap • This means that they can pre-empt any garbage collection that might be occurring when the schedulable objects are released.

  19. Communication between heap-using and no-heap using schedulable objects II • Most large real-time systems will consists of a mixture of heap-using and no-heap schedulable objects • There will be occasions when they need to exchange information • To ensure that no-heap schedulable objects are not indirectly delayed by garbage collection requires • all no-heap schedulable object should have priorities greater than heap-using schedulable objects, • priority ceiling emulation should be used for all shared synchronized objects, • all shared synchronized object should have their memory requirements pre-allocated (or dynamically allocated from scoped or immortal memory areas), and • objects passed in any communication should be primitive types passed by value (int, long, boolean etc) or be from scoped or immortal memory • If these conditions are fulfilled, then there will be no unwanted interference from the garbage collector at inopportune moments

  20. Summary • Priority inversion is where a high priority thread is blocked by the execution of a lower priority thread • Priority inheritance results in the lower priority thread inheriting the priority of the high priority thread whilst it is blocking the high priority thread • Whilst priority inheritance allows blocking to be bounded, a block still occurs for every critical section • Priority ceiling emulation allows only a single block • The alternative to using priority inheritance algorithms is to use wait free communication (see book)

  21. Further Reading and Exercises

More Related