The Monotonizer

Description
-----------
The Monotonizer is performs Rate Monotonic Analysis to determine if a set of
tasks can be guarenteed to meet its deadlines. It supports global RMA analysis,
analysis of task utilization, and calculating response times with arbitrary
deadlines and blocking. Different types of blocking are supported, including
user-ented blocking, and resource-determined Priority Ceiling Protocol. 
Complete with print preview.

Installation
------------

1. Create a program directory (eg c:/RMA)

2. Copy the following files into the target program directory:
	RMA_SH.EXE		-- Program file
	RMA.HLP			-- Help File
	*.VTS 			-- Example files

3. Copy the following files into your \Windows\System directory
	*.dll
	*.vbx

4. Add RMA_SH.EXE to your favorite program group and run it!

Limitations
-----------
The Shareware version of the Monotonizer is limited to 5 tasks and 3 shared
resources. All functions work, including print preview; the ability to add
tasks has been disabled and the ability to add resources is limited to 3.

The full version has no such limitations -- it has been used to analyze large
systems with over 200 tasks sharing 20 resources.

What if I don't Know about RMA?
-------------------------------
RMA is a mathematical technique developed by Liu and Layland ("Scheduling
Algorithms for Multiprogramming in a Hard Real-Time Environment" Journal of
the ACM 20, 1, January 1973: pp 40-61), and subsequently elaborted by these 
authors and others. Based on certain assumptions about the tasks, it is
possible to prove schedulability of those tasks. 

The Global method (1973) is provided as technique 1 by The Monotonizer. It
assumes that the deadlines are equal to the period of each task, that each time
takes less than or equal to its period to execute, and that the tasks are 
scheduled using the Rate Monotonic Scheduling (RMS) method. In RMS, tasks
are infinitely preemptable; when a higher priority task becomes available to
run, it will preempt any lower priority task running. In addition, RMS specifies
that the priority of tasks is solely determined by the period of the tasks --
the shorter the period the higher the task. In the Monotonizer, the priority
column may be specifically specified, but remember, the lower the numeric value
of the priority, the higher the priority! A Priority of 10 will preempt a
task of Priority 15. The Monotonizer identifies this method as Technique 1.

The global method is very strict, so that it can (and does) happen that this
method may fail to show that a set of tasks is schedulable even though it is
(false negative). However, if it says the tasks are schedulable, then they 
always are (no false positives). If the set of tasks fails the first test,
you might want to run one of the subsequent methods if the computed utilization
is less than about 0.80.

The second method ("Technique 2") checks task-by-task. It requires more
processing time to determine, and can show that some subset of the tasks can
in fact, meet all their deadlines, even if not all can. It calculates utilization
on a task-by-task basis. It has basically the same assumptions as the Global method.

The third method ("Technique 5") is more general than the other two, but can
require more processing time, especially for large numbers of tasks. In this
case, deadlines can be longer than the period.

Blocking is the amount of time a task is prohibited from running by a lower
priority task. This can happen, for example, if two tasks share a resource
that is protected by a mutex semaphore. If the lower priority task owns the
resource when the higher priority task is ready to run, the higher priority
task cannot run because it needs the resource. 

The monotonizer allows different means for handling blocking. The simpliest
way is to identify the blocking yourself and enter it in the Blocking column.
When you do this, be sure to use the Options/RMA Options dialog to set the
Blocking option to User Entered Blocking. 

The other way to handling blocking is to have The Monotonizer figure out the
blocking for you. In this case, add resources (Edit/Add Resources) with the
amount of time the task uses that resource in that resource column. The
program will then compute the blocking from these resource utilizations.

Simple blocking just assumes that it will "never happen" that you have unbounded
priority inversion (UPI). UPI can occur, for example, with three tasks 1, 2,
and 3 (1 has the highest priority and 3 the lowest). If
task 1 and 3 share resource A, and task 2 and 3 share resource B, it can
happen that task 3 blocks task 1 (because it is using "A"), but task 2 can run
because as long as task 3 is not currently using "B". Now we task 2 must
finish before task 3 can run, and task 3 must finish before task 1 can run. 

Priority Ceiling Protocol (along with some other methods, such as Highest
Locker) use dynamic task priority elevation to stop priority inversion. If
your system supports this, then use the the Priority Ceiling Protocol blocking
determination method.

See the help file for more information and references.

Example Files
-------------
3 examples are provided, one for each RMA technique supported. 

To find out how to set the RMA options, check the Note (Options menu,
Text Note item) and it will list the relevant options to set. To set the
RMA options, select the RMA Options dialog (Options Menu, RMA Options Item)
and click on the appropriate items.

Upgrading
---------
The Monotonizer costs $299.99 + $5.00 for shipping in the US ($10 overseas).
Please contact A Priori Software by CIS (70673,2715), internet 
(70673.2715@compuserve.com), or by mail (Bruce Douglass, c/o Ohmeda,
PO Box 7550, Madison, WI 53707). In Europe, we can be contacted at
Dachsklingeweg 17, Sindelfingen, Germany.

Upgrading by Compuserve
-----------------------
You can upgrade on Compuserve by typing GO SWREG, and entering the product number
5611.

Tech Support
------------
If you have any questions, you may contact Tech Support on our CIS account,
as mentioned above, or by mail. If voice support is required, set it up
using one of these methods first.






										  