|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectjava.lang.Thread
autohit.vm.VMProcessAutomat
A stand alone VM process context. It will wrap a VM in a thread and do all the thread-safe kinda stuff. A context will handle successive VM runs, so you can use them in a thread pool.
BE SURE to .init() and .start() this Thread BEFORE any other threads access its methods (particularly execute()). Failure to heed this warning COULD result in a race condition... :-)
There are four "commands" to a VM : - PAUSE will hold execution - RESUME will restart execution - STOP will stop execution of the VM and dump it - KILL will stop the execution and let this process die !
EPG - Rewrite - 15May03
EPG - moved context passing to the process, rather than the loader - 23Jul03| Field Summary | |
protected VM |
rVM
A runnable VM. |
| Fields inherited from class java.lang.Thread |
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY |
| Constructor Summary | |
VMProcessAutomat()
Constructor. |
|
| Method Summary | |
boolean |
execute(VM aVM)
Load and Execute a VM. |
int |
getPID()
Get's the PID for this process |
java.lang.String |
getRootProgram()
Get's root program |
int |
getState()
A simple request for state. |
SystemContext |
getSystemContext()
Get my system context. |
void |
init(SystemContext sctx,
int setpid)
Initialize the process controller. |
void |
joinIt()
Join the process. |
boolean |
kill()
Kill this context. |
java.lang.Object |
processAttribute(java.lang.String name)
Get a registered process attribute. |
void |
run()
Run the context |
int |
verifyState()
Verify the state of the VM. |
boolean |
vmPause()
Pause the vm. |
boolean |
vmResume()
Resume the vm. |
boolean |
vmStop()
Stop the vm. |
| Methods inherited from class java.lang.Thread |
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface autohit.vm.VMProcess |
start |
| Field Detail |
protected VM rVM
| Constructor Detail |
public VMProcessAutomat()
| Method Detail |
public void init(SystemContext sctx,
int setpid)
throws VMException
init in interface VMProcesssctx - a ready SystemContext. This will be fed to all controlled
processes.setpid - the pid
VMException - is the process goes badVMpublic boolean execute(VM aVM)
This method can be called by any thread. It will clear the request flags.
execute in interface VMProcessaVM - A fully implimented derived-class of VM.
VMpublic boolean vmPause()
There is no rendezvous; the method will not block. All successive requests count as the same request until the context services it. There is no guarentee on the timing of the service. The Context will not check for requests until AFTER the current instruction is complete. So, if the vm is executing a long wait instruction, it could indeed be some time before the request is serviced.
If you need to make sure that the request worked, then use the verifyState() method to get the definative state of the VM/Context.
As for the return value, "success" merely means that the request was successfully posted and not that the action was completed.
One last thaught: this is not a robust OS implimentation of a thread context. You might want to restrict calls to vmPause() and vmResume() to a single external thread. Multiple threads might get confused if they don't cooperate...
vmPause in interface VMProcessVMpublic boolean vmResume()
See the notes for the pause() method.
vmResume in interface VMProcessVMpublic boolean vmStop()
See the notes for the pause() method.
vmStop in interface VMProcessVMpublic int getPID()
getPID in interface VMProcesspublic void joinIt()
joinIt in interface VMProcesspublic boolean kill()
See the notes for the pause() method.
kill in interface VMProcessVMpublic int verifyState()
(And, never EVER call this method from within THIS thread. You'll almost certainly deadlock it.)
The following describes each state:
STATE_NEW = VM is loaded bu not started STATE_RUNNING = VM is actively running.STATE_PAUSED = VM is paused.STATE_DONE = VM finished execution.This is rare, as the VM will be automatically unloaded when finished.STATE_NO_VM = No VM is loaded into this context.
verifyState in interface VMProcessVMpublic int getState()
getState in interface VMProcessVMpublic SystemContext getSystemContext()
getSystemContext in interface VMProcessVMpublic java.lang.Object processAttribute(java.lang.String name)
processAttribute in interface VMProcessVMpublic void run()
run in interface VMProcesspublic java.lang.String getRootProgram()
getRootProgram in interface VMProcess
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||