On Thu, 22 May 2014 10:26:21 +0000 Rob Scott <
rsc...@rocketsoftware.com>
wrote:
:>Maybe part of the reason that there is not a lot of example source is that a responsible PC routine provider must establish quite a bit of plumbing to ensure system and application integrity that goes beyond just using the ETDEF and LXRES macro services.
:>This is especially true for PC space-switch routines (PC-ss) rather than simple current primary (PC-cp).
:>I suppose a PC-cp could be written to replace a SVC routine more easily than composing a PC-ss to perform some sort of client/server application request (which is the interesting stuff!)
:>IMHO a person embarking on writing a PC routine should be armed with at least the following :
:>(o) Knowledge of how to safely move data between client and server without breaking system integrity. There are so many bad examples of supervisor/key0 code out there in the public domain that just copy data without any due care and attention. Just because your code is in key0 and it is easy to use MVC to return data to your caller not matter the key does not mean that you should. A decent PC routine is always transferring data to and from the caller in the execution key of the caller.
Similar to SVC logic
:>In fact, I recommend a PPT entry in SCHEDxx to declare your server jobstep program to execute in a non-zero system key - key 2 and 4 are currently seen to be available in so much as there is no major z/OS system component famously using them. (1 = JES, 3 =AVM,5=DFP,6=VTAM, 7=DB2, IMS and MQ)
What is the advantage? What is wrong with the standard key8? The (E)CSA
resident blocks do not gain from the PPT entry and the server blocks are not
available to the client code.
:>(o) A method to issue messages, diagnostics and trace events in H<>P<>S environments and other exotic environments
:>(o) The habit of checking the "Environment" section of any service that they call - now that your code could be running H<>P<>S or locked, some of your favourite services may no longer be available to you.
In general, unless you are front ending a system service, you know your
environment.
But if XMEM, certain locks will block other locks,
:>(o) A method to add request blocks onto a queue in server private - for example something using PLO (there have been discussions about this on IBM-Main)
:>(o) Familiarity with SUSPEND/RESUME services so that you caller's request can be handled asynchronously
WAIT is also available. And latches.
:>(o) Task and ASID level resource manager routines to handle both "client gone while SUSPENDed" and "server gone unexpectedly" situations
As well as checking that the server is up before issuing the PC.
:>(o) Decent recovery routine(s) for ESTAE, FRR and ARR environments
:>I do not believe that it is very common these days for anyone working outside of IBM or an ISV to have the sort of skills or experience of all of the above.
:>It is probably even rarer to find someone in a sysprog team who you can go to for local help if you are writing this stuff - things were different back in the 1980s when sysprog teams were larger and assembler knowledge widespread.
:>If you do have a test system to play on and blessing from your employer, I would recommend that you give it a go.
:>There are people on this list (or maybe even better on IBM-Main) who can help when you hit problems.