GDSX (Extended General Device Support) Manual
DEVICE^HANDLER Example, Design
Extended General Device Support (GDSX) Manual—529931-001
5-3
Task I/O Calls
•
You would no longer have access to nowait I/O tags for application-specific
purposes.
Therefore, in designing GDSX an additional layer of TSCODE software was placed
between USCODE and the Guardian file system, TS/MP server classes, and the TMF
product. This layer of software (called pseudo procedures) allows GDSX to monitor
every I/O operation that is initiated and ensures that each I/O can be properly handled
at completion time. Also, this approach allows GDSX to cancel any I/O operations that
a task has outstanding when the task is stopped.
Given this implementation of I/O, when developing a DEVICE^HANDLER, you must
not use the normal system procedures for I/O (for example, READUPDATE[X],
WRITEREAD[X], FILEINFO). You should use the GDSX pseudo Guardian procedures
(for example, ^READUPDATE[X], ^WRITEREAD[X], ^FILEINFO) that have the
identical functions as the system procedures (with a few exceptions).
For example, instead of sending a WRITEREAD directly to the IOP using the normal
system procedures, a DEVICE^HANDLER task sends it to the file designated by the
file number using the GDSX ^WRITEREAD procedure. Control is then transferred to
TSCODE, which does a Guardian nowaited call on behalf of the task. TSCODE then
returns control to the DEVICE^HANDLER task at the instruction following the
^WRITEREAD.
DEVICE^HANDLER tasks may continue processing while the IOP executes the
^WRITEREAD. Typically, the task issuing the ^WRITEREAD eventually uses a
^AWAITIO to wait for completion of the operation. See Figure 5-2 for an illustration of
WRITEREAD processing in the DEVICE^HANDLER example.
This multithreaded operation would not be possible if a DEVICE^HANDLER task called
Guardian I/O procedures in a waited manner. Even though GDSX may look like
separate processes running in an operating system, from the point of view of the
NonStop operating system, it is just one process. If a DEVICE^HANDLER task called
a waited I/O, such as a Guardian READ, the whole process, not just the
DEVICE^HANDLER task, would come to a halt, and the other tasks could not be
serviced during the suspension.
A number of Guardian procedures, such as NUMIN, NUMOUT, MYTERM, and
PROCESSHANDLE_DECOMPOSE, are resident system procedures and do not cause
the GDSX process to be suspended. Therefore, they may be called by USCODE.
Note. As a rule, if a Guardian call suspends not just a task but the whole GDSX process, do
not use it.