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.










