|
|||||||||||
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 VMProcess
sctx
- a ready SystemContext. This will be fed to all controlled
processes.setpid
- the pid
VMException
- is the process goes badVM
public boolean execute(VM aVM)
This method can be called by any thread. It will clear the request flags.
execute
in interface VMProcess
aVM
- A fully implimented derived-class of VM.
VM
public 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 VMProcess
VM
public boolean vmResume()
See the notes for the pause() method.
vmResume
in interface VMProcess
VM
public boolean vmStop()
See the notes for the pause() method.
vmStop
in interface VMProcess
VM
public int getPID()
getPID
in interface VMProcess
public void joinIt()
joinIt
in interface VMProcess
public boolean kill()
See the notes for the pause() method.
kill
in interface VMProcess
VM
public 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 VMProcess
VM
public int getState()
getState
in interface VMProcess
VM
public SystemContext getSystemContext()
getSystemContext
in interface VMProcess
VM
public java.lang.Object processAttribute(java.lang.String name)
processAttribute
in interface VMProcess
VM
public void run()
run
in interface VMProcess
public java.lang.String getRootProgram()
getRootProgram
in interface VMProcess
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |