[Info-vax] C... the only winning move is not to play...
David Froble
davef at tsoft-inc.com
Tue Feb 18 09:56:43 EST 2014
Johnny Billquist wrote:
> On 2014-02-14 15:16, VAXman- @SendSpamHere.ORG wrote:
>> In article <ldk1qs$s7v$2 at Iltempo.Update.UU.SE>, Johnny Billquist
>> <bqt at softjar.se> writes:
>>> On 2014-02-13 23:06, VAXman- @SendSpamHere.ORG wrote:
>>>> In article <ldjc2s$f1b$1 at dont-email.me>, David Froble
>>>> <davef at tsoft-inc.com> writes:
>>>>> {...snip...}
>>>>>
>>>>> What I meant was the data is read into an internal I/O buffer, and the
>>>>> desired data record is then moved into a user's pre-defined record
>>>>> buffer. In a write of the data record, RMS moves it back into the
>>>>> internal I/O buffer, then writes the I/O buffer.
>>>>>
>>>>> If the data in the I/O buffer is locked, then is should not be stale.
>>>>
>>>> OK. I reread. You were talking about the locate and move modes of
>>>> the RMS
>>>> buffers. Locate mode is only valid using a $GET and it's
>>>> unavailable when
>>>> the record crosses a block boundary, file access is set UPDATE,
>>>> compressed
>>>> records (in the case of indexed files), global buffers have been
>>>> specified
>>>> or multiple streams access the file.
>>>
>>> Really? Are locate mode not available for writes in VMS. They are in
>>> RSX. When you open the file, you tell what the maximum size you might
>>> write is, and RMS will return a pointer to where you should be writing
>>> your data. It might be a bounce buffer, but it might also be the actual
>>> disk buffer directly.
>>> And each $PUT will update the write pointer for the next write to be
>>> done.
>>
>> RTFM: 7.3.1 Record Transfer Modes
>>
>> For synchronous and asynchronous record operations, RMS
>> provides two record transfer modes: move mode and locate
>> mode.
>>
>> In move mode, RMS copies a record from an I/O buffer into a
>> buffer that you specify. For input operations, data is first
>> read into the I/O buffer from a peripheral device (such as a
>> disk), then moved to your application program buffer for
>> processing. For output operations, you first build the
>> record in your application program buffer; then RMS moves
>> the record to the I/O buffer that is used to transfer the
>> record to disk.
>>
>> In locate mode, RMS allows the application program to access
>> records in an I/O buffer by providing the address of the
>> returned record as the internal buffer location instead of
>> an application program buffer location (field RAB$L_RBF).
>> Usually, this reduces program overhead because records can
>> be processed directly within the I/O buffer. Locate mode is
>> only available for input operations. Because it may not
>> always be possible to use locate mode, you must supply an
>> application program buffer for cases in which move mode must
>> be used, even though you specify locate mode (see the
>> OpenVMS Record Management Services Reference Manual).
>>
>> Other RMS facilities allow programs to control I/O buffer
>> space allocation or to leave space management to RMS. The
>> following sections describe buffering.
>
> Thanks. I wouldn't know where to search through the VMS manuals to find
> this, but it does surprise me, since locate mode is possible in RMS on
> RSX. And conceptually it's easy to see how to do it. Hmm, are the RMS
> internal buffers mapped read-only from the application program perhaps?
> That would explain why it would be only for reads in VMS...
>
> Oh well... RSX - still an improvement on VMS... ;-)
>
> Johnny
>
Not RTFM, but from old memory (and we all know how doubtful that may be).
I believe RMS runs in supervisor mode, and the RMS buffers are not
accessable from user mode.
More information about the Info-vax
mailing list