Port-vax archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RE: disklabel MAXPARTITIONS reversal (was: installboot is broken)



On Saturday, March 30, 2013 at 11:38 AM, Martin Husemann wrote:
> P.P.S.: it would be realy cool if simh would not busy-poll stdin for console
> input - this voids the effort spent on idle detection.

Hi Martin,

I realized I never responded to the above P.P.S....

I'm not 100% sure what you want here.  

Currently simh idles the simulator (i.e. sleeps) when the simulated OS is in 
its own idle loop.  The simulated OS won't be exiting that idle loop until some 
external event happens (i.e. data arrives from the outside, or a clock tick 
occurs).  Simh sleeps for the amount of time necessary to satisfy the events 
which it can predict.  The predictable event it knows about is the simulated 
clock tick, so the time until the next simulated clock tick is the sleep time.  
When a simulated clock tick happens, other potential sources of external events 
are polled to determine if data has arrived.  These include console and/or 
other simulated multiplexer and network input.  So, the console and any other 
configured multiplexer devices will be polled 100 times a second.  

The above describes the behavior of all of the released versions of simh (V3.9 
and earlier).

I wouldn't quite call this a 'busy poll of stdin', but I admit that the vast 
majority of those 100 polls a second don't produce useful results.  They don't 
interfere with idling, but they certainly are extra overhead which might be 
avoided.

The next 'release' of simh which is visible in the repository at 
https://github.com/simh/simh changes some of the above behaviors and adds 
asynchronous threads which perform disk and network I/O and have the ability to 
awaken a simulator which is otherwise idling when I/O completes.  This is 
better, but the multiplexer I/O is still polled on the simulated clock ticks.  
The current codebase has latent functionality (turned off by #ifdefs) to wait 
for multiplexer data arrival (with select()) in a separate thread, which will 
awaken an idling simulator when real data has arrived.  This will remove the 
100 times a second polling overhead.  This code is currently disabled since the 
goal of its implementation was to add this different behavior without changing 
any of the many simulated multiplexer devices which are part of the package.  
Much testing is required to assure consistent simulator behavior with various 
combinations of devices in different states.  This will come in a future 
release.

Please feel free to suggest other improvements.

Thanks.

- Mark



Home | Main Index | Thread Index | Old Index