| Hum, sounds familier. Check this out. note that any referance
to mscp serving is a myth at this time. Send me mail if you want
the rest. putting the source in the notes file was a mistake (I
changed the code).
FDDRIVER.MEM
11-Jun-1986
NOTE: This tool is an in house, experimental
program for your use on Digital internal machines.
FDDRIVER implements a memory based pseudo disk for VAX/VMS
systems. It has been shown to run on VMS V4.4 although any version of
VMS after 4.0 should be able to run FDDRIVER with no problems. The
primary advantage of a memory based disk is that there are no disk
latency times involved and all transfers happen at CPU speed. Files
that are often accessed can benefit greatly from this driver due to
the performance gains over a physical disk.
Background on the driver as it exists can be found by looking at
SYS$UPDATE:STABACKIT.COM as distributed with VMS V4.4. Basically, a
chunk (user specified size) of nonpaged pool is allocated by the
driver (with a QIO format command to the driver). Then, the "disk"
can be initialized, mounted, and accessed as a real disk device. The
original PDDRIVER (that this code is stolen from) used a loop in IOC$
routines to perform byte transfers to and from the user's buffer at
fork IPL. Needless to say, there is significant overhead in doing
things this way.
And, as can be guessed, this new version does MOVC3 transfers of
up to one page at a time. One page at a time is the current limit
because a single mapping register is used to map the user's buffer
into system space. The data transfer happens at elevated IPL, so this
mapping is required. A special case is the first page where the
buffer may start at a non page boundary and could be less than one
page long.
Contained are three pieces of code. The first program is called
FDSETSIZE.MAR and is used to tell the driver how much pool to allocate
(remember, 1 page is 512 bytes of nonpaged pool). This program would
be run once after the driver is loaded. The next piece of code is the
driver proper (FDDRIVER.MAR). It is assembled and linked and then
loaded with SYSGEN. Finally, FDDRIVERSTARTUP.COM can be called from
SYSTARTUP.COM to load the driver, configure the device and mount it.
Operation typically will procede as follows: Once the driver is
loaded, the set size program is run. The user is prompted for the
need device size in pages. Assuming sufficient nonpaged pool is
available, the pool is allocated and the program returns to DCL. If
memory is not available, the driver returns an error and the device is
left with no pages. After the device is sized, it may be accessed as
any other disk device. The device may be set MSCP served before it is
mounted if needed.
Page 2
As far as I know this code is safe. It has not crashed a system
in quite a while of active use. But, given the choice, I'd make your
initial tests on a little used machine or after hours...
Release notes:
11-Jun-1986: This version implements two changes: First, the
device may not be formatted with the format command while it is
mounted. This helps prevent system crashes when the device is resized
while mounted. Second, the device type is changed from RX01 to FD8
(foreign disk type 8). This change allows the device to be set MSCP
served. The SET DEVICE/SERVED code excludes RX01's, RX02's and RX04's
(don't as me).
Please let me know if you find changes to be made (ie. make them
and let me know). Good luck!
Norman Lastovica
Customer Support Center/Colorado Springs - TSSG
DUNE::LASTOVICA
CX03 1/M12
|