[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