MJVMK is a lightweight multi-tasking real-time micro kernel for embedded platforms. It has an optional add-on which is a java micro-edition CLDC virtual machine.
MJVMK has a very small footprint.
Any combination of native and java applications can be executed by the system, allowing system-critical tasks to be written in native code if required, running seamlessly with generically written java-based tasks.
The programming of the micro-operating system can more easily be changed through the use of the JVM.
Characteristics
The MJVMK is small, efficient and fully self contained, easily portable to an embedded system.
The operating system possesses a dual-purpose heap, one that allows for explicit memory release as well as exact garbage collection. Semaphores provide mutual exlusion and synchronization. Monitors with conditional variables provide for mutual exclusion, synchronization, and wait lists with notification and timeouts. Priority-based scheduling and weighted time-sharing allow for explicit control of processor use and interrupt handling. The kernel is flexibly designed for the addition of required interrupt drivers. Threads/tasks may be run at 64 different priorities, with any number of threads running at a specific priority, and with tasks at specific priorities garnering a configurable and variable amount of CPU time with respect to the other tasks at the same priority.
Java Capability
With the CLDC java virtual machine, MJVMK can run java byte-code on an embedded microprocessor, since the operating system provides all the support required for the Java language, such as the java threading model and garbage collection. The JVM is fine-tuned for embedded platforms by providing such features as a process model (multiple applications in the same virtual machine with entirely separate memory spaces), Java stacks that are optionally fixed-length or growable, romizing support and other performance optimizations.
Further details regarding java support
Several Possible Configurations
Even when running the java virtual machine, tasks running on the O/S may run inside the kernel, entirely separate from the virtual machine, making use of the kernel's API for synchronization, thread management, memory management and other functions. Alternatively, applications may be written in java, making use of the CLDC API. The two application models may be mixed as desired for optimal use of the platform's resources.
A typical configuration for MJVMK
The JVM has an additional built-in scheduler that allows it to run on top of an existing operating system much like a standard JVM. This can be especially useful for debugging purposes.