[Info-vax] Pointless Nostalgia: System Service Dispatching
VAXman- at SendSpamHere.ORG
VAXman- at SendSpamHere.ORG
Thu Jun 30 15:52:37 EDT 2016
In article <nl3r1k$f2f$1 at Iltempo.Update.UU.SE>, Johnny Billquist <bqt at softjar.se> writes:
>On 2016-06-30 18:55, VAXman- at SendSpamHere.ORG wrote:
>> In article <nl3491$rou$1 at Iltempo.Update.UU.SE>, Johnny Billquist <bqt at softjar.se> writes:
>>> On 2016-06-30 01:05, lawrencedo99 at gmail.com wrote:
>>>> On Wednesday, June 29, 2016 at 11:36:10 PM UTC+12, Johnny Billquist wrote:
>>>>> Consider a $QIOW for example. If you get an AST, you do not want the $QIOW
>>>>> to be reexecuted.
>>>>
>>>> Thatâs not a problem, because there is no actual $QIOW system call.
>>>
>>> There isn't? Did I place the $ on the wrong side or something now? Or
>>> what are you suggesting?
>>
>> SYS$QIOW => SYS$QIO+SYS$SYNCH
>
>Functionally, yes. But does it actually put two different syscalls in
>your instruction stream, one after the other?
In *your* instruction stream meaning the code YOU'VE written? No. There's
a vector you'd call that maintains the 2 system calls.
>On RSX, QIO$ and QIOW$ are two different DICs, even though QIOW$ really
>is the same as a QIO$ followed by a WTEF$
>
>Looking on a VMS system, it's a bit unclear. The $QIO_S and $QIOW_S
>calls different functions. But what those functions do, in turn, I don't
>know. (SYS$QIO and SYS$QIOW)
.MACRO $QIO_S EFN=#0,CHAN,FUNC,IOSB=0,ASTADR=0,ASTPRM=#0,-
P1=0,P2=#0,P3=#0,P4=#0,P5=#0,P6=#0
.GLOBL SYS$QIO
$PUSHTWO P6,P5
$PUSHTWO P4,P3
PUSHL P2
$PUSHADR P1
$QIOPUSH ASTPRM,ASTADR
$PUSHADR IOSB,CONTEXT=Q
MOVZWL FUNC,-(SP)
MOVZWL CHAN,-(SP)
PUSHL EFN
CALLS #12,G^SYS$QIO
.ENDM $QIO_S
.MACRO $QIOW_S EFN=#0,CHAN,FUNC,IOSB=0,ASTADR=0,ASTPRM=#0,-
P1=0,P2=#0,P3=#0,P4=#0,P5=#0,P6=#0
.GLOBL SYS$QIOW
$PUSHTWO P6,P5
$PUSHTWO P4,P3
PUSHL P2
$PUSHADR P1
$QIOPUSH ASTPRM,ASTADR
$PUSHADR IOSB,CONTEXT=Q
MOVZWL FUNC,-(SP)
MOVZWL CHAN,-(SP)
PUSHL EFN
CALLS #12,G^SYS$QIOW
.ENDM $QIOW_S
But that SYS$QIOW looks something like:
.ENTRY SYS$QIOW,0
$QIOWDEF
$SYNCHDEF
CALLG (AP),G^SYS$QIO
BLBC R0,ERROR
PUSHL QIOW$_IOSB(AP)
PUSHL QIOW$_EFN(AP)
CALLS #SYNCH$_NARGS,G^SYS$SYNCH
ERROR: RET
It's actually a bit more elaborate today due to threads but nothing to write
home about.
--
VAXman- A Bored Certified VMS Kernel Mode Hacker VAXman(at)TMESIS(dot)ORG
I speak to machines with the voice of humanity.
More information about the Info-vax
mailing list