[Simh] several SIMH instances

Vince Mulhollon vlm at mulhollon.com
Sun Dec 3 10:32:30 EST 2006


On Thu, Nov 30, 2006 at 07:17:06PM +0100, Michael Unger wrote:
> On 2006-11-30 16:44, "Kevin Handy" wrote:
> 
> > Patches are being worked on that will monitor the
> > emulated CPU, and when it detects it in an idle loop,
> > will cause the emulation to sleep. This can
> 
> Which mechanism is used to detect an "idle loop"? In the "MicroVAX 3900

A better idea would be a cap for the execution rate.

If the simulated CPU has executed 10 million instructions over the
elapsed time of the simulator (at this moment, perhaps, 100 seconds) 
that means no more processing, sleep until the ratio drops due to 
larger elapsed time.

Possible config parameter:
set instructions_per_second = 10000

Bad psuedocode:
next_run_time = total_executed_instructions/instructions_per_second;
while (next_run_time < total_elapsed_seconds_function()) {
  sleep;
}

Seconds is probably too granular.  But the general idea stands.

Also there's no need to do floating point math to check each and every
instruction execution vs elapsed time.  However, it's probably fair to 
have this regulation code outside a for loop that runs 1000 or maybe 
10000 instructions.

Execution would look like this:

Run 1000 instructions
Wait for real time to catch up to emulated time
Run 1000 instructions
Wait for real time to catch up to emulated time
repeat ....

For a machine thats "too slow" to run at real speed, it will never
wait.

This would have the benefit of being simple, applicable to any OS or 
emulated hardware, and also possibly reusable code for I/O devices.

Also, the speed of the host machine would have no effect on the speed 
of the emulated machine, which I found quite a hassle when I was trying 
to use kermit on an emulated pdp-8 (the timers in the emulated kermit 
ran so fast that it essentially instantly timed out).  I vaguely remember 
successfully doing this on my 386 but it won't work due to the timeout 
issue on my new AMD64...  The idle loop patch would not fix this 
problem.




More information about the Simh mailing list