OpenVMS System Services Reference Manual
To run SYSGEN to determine the minimum and default values of a quota,
enter the following sequence of commands:
$ RUN SYS$SYSTEM:SYSGEN
SYSGEN> SHOW/PQL
|
Minimum values are named PQL_Mxxxxx, where xxxxx are
the characters of the quota name that follow "PQL$_" in the
quota name.
Default values are named PQL_Dxxxxx, where xxxxx are
the characters of the quota name that follow "PQL$_" in the
quota name.
Individual Quotas
PQL$_ASTLM
Asynchronous system trap (AST) limit. This quota restricts both the
number of outstanding AST routines specified in system service calls
that accept an AST address and the number of scheduled wakeup requests
that can be issued.
Minimum: PQL_MASTLM
Default: PQL_DASTLM
Nondeductible
PQL$_BIOLM
Buffered I/O limit. This quota limits the number of outstanding
system-buffered I/O operations. A buffered I/O operation is one that
uses an intermediate buffer from the system pool rather than a buffer
specified in a process's $QIO request.
Minimum: PQL_MBIOLM
Default: PQL_DBIOLM
Nondeductible
PQL$_BYTLM
Buffered I/O byte count quota. This quota limits the amount of system
space that can be used to buffer I/O operations or to create temporary
mailboxes.
Minimum: PQL_MBYTLM
Default: PQL_DBYTLM
Pooled
PQL$_CPULM
CPU time limit, specified in units of 10 milliseconds. This quota
limits the total amount of CPU time that a created process can use.
When it has exhausted its CPU time limit quota, the created process is
deleted and the status code SS$_EXCPUTIM is returned.
If you do not specify this quota and the created process is a detached
process, the detached process receives a default value of 0, that is,
unlimited CPU time.
If you do not specify this quota and the created process is a
subprocess, the subprocess receives half the CPU time limit quota of
the creating process.
If you specify this quota as 0, the created process has unlimited CPU
time, provided the creating process also has unlimited CPU time. If,
however, the creating process does not have unlimited CPU time, the
created process receives half the CPU time limit quota of the creating
process.
The CPU time limit quota is a consumable quota; that is, the amount of
CPU time used by the created process is not returned to the creating
process when the created process is deleted.
Minimum: PQL_MCPULM
Default: PQL_DCPULM
Deductible
PQL$_DIOLM
Direct I/O quota. This quota limits the number of outstanding direct
I/O operations. A direct I/O operation is one for which the system
locks the pages containing the associated I/O buffer in memory for the
duration of the I/O operation.
Minimum: PQL_MDIOLM
Default: PQL_DDIOLM
Nondeductible
PQL$_ENQLM
Lock request quota. This quota limits the number of lock requests that
a process can queue.
Minimum: PQL_MENQLM
Default: PQL_DENQLM
Pooled
PQL$_FILLM
Open file quota. This quota limits the number of files that a process
can have open at one time.
Minimum: PQL_MFILLM
Default: PQL_DFILLM
Pooled
PQL$_JTQUOTA
Job table quota. This quota limits the number of bytes of system paged
pool used for the job logical name table. If the process being created
is a subprocess, this item is ignored.
A value of 0 represents an unlimited number of bytes.
Minimum: PQL_MJTQUOTA
Default: PQL_DJTQUOTA
Nondeductible
PQL$_PGFLQUOTA
Paging file quota. This quota limits the number of pages (on VAX
systems) or pagelets (adjusted up or down to represent CPU-specific
pages on Alpha systems) that can be used to provide secondary storage
in the paging file for the execution of a process.
Minimum: PQL_MPGFLQUOTA
Default: PQL_DPGFLQUOTA
Pooled
PQL$_PRCLM
Subprocess quota. This quota limits the number of subprocesses a
process can create.
Minimum: PQL_MPRCLM
Default: PQL_DPRCLM
Pooled
PQL$_TQELM
Timer queue entry quota. This quota limits both the number of timer
queue requests a process can have outstanding and the creation of
temporary common event flag clusters.
Minimum: PQL_MTQELM
Default: PQL_DTQELM
Pooled
PQL$_WSDEFAULT
Default working set size. This quota defines the number of pages (on
VAX systems) or pagelets (adjusted up or down to represent CPU-specific
pages on Alpha systems) in the default working set for any image the
process executes. The working set size quota determines the maximum
size you can specify for this quota.
Minimum: PQL_MWSDEFAULT
Default: PQL_DWSDEFAULT
Nondeductible
PQL$_WSEXTENT
Working set expansion quota. This quota limits the maximum size to
which an image can expand its working set size with the Adjust Working
Set Limit ($ADJWSL) system service.
Minimum: PQL_MWSEXTENT
Default: PQL_DWSEXTENT
Nondeductible
PQL$_WSQUOTA
Working set size quota. This quota limits the maximum size to which an
image can lock pages in its working set with the Lock Pages in Memory
($LCKPAG) system service.
Minimum: PQL_MWSQUOTA
Default: PQL_DWSQUOTA
Nondeductible
Use of the Quota List
The values specified in the quota list are not necessarily the quotas
that are actually assigned to the created process. The $CREPRC service
performs the following steps to determine the quota values that are
assigned when you create a process on the same node:
- It constructs a default quota list for the process being created,
assigning it the default values for all quotas. Default values are
system parameters and so might vary from system to system.
- It reads the specified quota list, if any, and updates the
corresponding items in the default list. If the quota list contains
multiple entries for a quota, only the last specification is used.
- For each item in the updated quota list, it compares the quota
value with the minimum value required (also a system parameter) and
uses the larger value. Then, the following occurs:
- If a subprocess is being created or if a detached process is being
created and the creating process does not have IMPERSONATE or CMKRNL
privilege, the resulting value is compared with the current value of
the corresponding quota of the creating process and the lesser value is
used.
Then, if the quota is a deductible quota, that value is
deducted from the creating process's quota, and a check is performed to
ensure that the creating process will still have at least the minimum
quota required. If not, the condition value SS$_EXQUOTA is returned and
the subprocess or detached process is not created. Pooled quota
values are ignored.
- If a detached process is being created and the creating process has
IMPERSONATE or CMKRNL privilege, the resulting value is not compared
with the current value of the corresponding quota of the creating
process and the resulting value is not deducted from the creating
process's quota. A process with IMPERSONATE or CMKRNL privilege is
allowed to create a detached process with quota values larger than it
has.
When you create a detached process on another OpenVMS Cluster node, the
quotas assigned to the process are determined in the following way:
- The $CREPRC service reads the specified quota list, if any. If it
contains multiple entries for a quota, only the last specification is
used. If the process does not have IMPERSONATE or CMKRNL privilege, the
service compares each value in the list with the current value of the
corresponding quota of the creating process and uses the lesser value.
It sends the resulting quota list to the node on which the new process
is to be created.
- On that node, the $CREPRC service constructs a default quota list
for the process being created, assigning it default values for all
quotas based on that node's system parameters.
- It updates the default list with the corresponding values from the
quota list.
- For each item in the updated quota list, it compares the quota
value with the minimum value required based on that node's system
parameters and uses the larger value.
prcnam
OpenVMS usage: |
process_name |
type: |
character-coded text string |
access: |
read only |
mechanism: |
by descriptor--fixed-length string descriptor |
Process name to be assigned to the created process. The
prcnam argument is the address of a character string
descriptor pointing to a process name string.
If a subprocess is being created, the process name is implicitly
qualified by the UIC group number of the creating process. If a
detached process is being created, the process name is qualified by the
group number specified in the uic argument.
baspri
OpenVMS usage: |
longword_unsigned |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Base priority to be assigned to the created process. The
baspri argument is a longword value.
The OpenVMS VAX range is 0 to 31, where 31 is the highest priority and
0 is the lowest. Usual priorities are in the range 0 to 15, and
real-time priorities are in the range 16 to 31.
The OpenVMS Alpha range is 0 to 63, with real-time priorities in the
range 32 to 63.
If you want a created process to have a higher priority than its
creating process, you must have ALTPRI privilege to raise the priority
level. If the caller does not have this privilege, the specified base
priority is compared with the caller's priority and the lower of the
two values is used.
A process with ALTPRI privilege running on a VAX node can create a
process with a priority greater than 31 on an Alpha node.
If the baspri argument is not specified, the priority
defaults to 2 for VAX MACRO and VAX BLISS--32 and to 0 for all other
languages.
uic
OpenVMS usage: |
uic |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
User identification code (UIC) to be assigned to the created process.
The uic argument is a longword value containing the
UIC.
If you do not specify the uic argument or specify it
as 0 (the default), $CREPRC creates a process and assigns it the UIC of
the creating process.
If you specify a nonzero value for the uic argument,
$CREPRC creates a detached process. This value is interpreted as a
32-bit octal number, with two 16-bit fields:
bits 0--15---member number
bits 16--31---group number
You need IMPERSONATE or CMKRNL privilege to create a detached process
with a UIC that is different from the UIC of the creating process.
If the image argument specifies the
SYS$SYSTEM:LOGINOUT.EXE, the UIC of the created process will be the UIC
of the caller of $CREPRC, and the UIC parameter is ignored.
mbxunt
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
read only |
mechanism: |
by value |
Unit number of a mailbox to receive a termination message when the
created process is deleted. The mbxunt argument is a
word containing this number.
If you do not specify the mbxunt argument or specify
it as 0 (the default), the operating system sends no termination
message when it deletes the process.
The Get Device/Volume Information ($GETDVI) service can be used to
obtain the unit number of the mailbox.
If you specify the mbxunt argument, the mailbox is
used when the created process actually terminates. At that time, the
$ASSIGN service is issued for the mailbox in the context of the
terminating process and an accounting message is sent to the mailbox.
If the mailbox no longer exists, cannot be assigned, or is full, the
error is treated as if no mailbox had been specified.
If you specify this argument when you create a process on another node,
an accounting message will be written to the mailbox when the process
terminates. If the node is removed from the cluster before the created
process terminates, an accounting message will be simulated. The
simulated message will contain the created process's PID and name and a
final status of SS$_NODELEAVE, but will lack execution statistics.
Note that two processes on different nodes cannot use the termination
mailbox for general interprocess communication.
The accounting message is sent before process rundown is initiated but
after the process name has been set to null. Thus, a significant
interval of time can occur between the sending of the accounting
message and the final deletion of the process.
To receive the accounting message, the caller must issue a read to the
mailbox. When the I/O completes, the second longword of the I/O status
block, if one is specified, contains the process identification of the
deleted process.
The $ACCDEF macro defines symbolic names for offsets of fields within
the accounting message. The offsets, their symbolic names, and the
contents of each field are shown in the following table. Unless stated
otherwise, the length of the field is 4 bytes.
Offset |
Symbolic Name |
Contents |
0
|
ACC$W_MSGTYP
|
MSG$_DELPROC (2 bytes)
|
2
|
|
Not used (2 bytes)
|
4
|
ACC$L_FINALSTS
|
Exit status code
|
8
|
ACC$L_PID
|
External process identification
|
12
|
|
Not used (4 bytes)
|
16
|
ACC$Q_TERMTIME
|
Current time in system format at process termination (8 bytes)
|
24
|
ACC$T_ACCOUNT
|
Account name for process, blank filled (8 bytes)
|
32
|
ACC$T_USERNAME
|
User name, blank filled (12 bytes)
|
44
|
ACC$L_CPUTIM
|
CPU time used by the process, in 10-millisecond units
|
48
|
ACC$L_PAGEFLTS
|
Number of page faults incurred by the process
|
52
|
ACC$L_PGFLPEAK
|
Peak paging file usage
|
56
|
ACC$L_WSPEAK
|
Peak working set size
|
60
|
ACC$L_BIOCNT
|
Count of buffered I/O operations performed by the process
|
64
|
ACC$L_DIOCNT
|
Count of direct I/O operations performed by the process
|
68
|
ACC$L_VOLUMES
|
Count of volumes mounted by the process
|
72
|
ACC$Q_LOGIN
|
Time, in system format, that process logged in (8 bytes)
|
80
|
ACC$L_OWNER
|
Process identification of owner
|
The length of the termination message is equated to the constant
ACC$K_TERMLEN.
stsflg
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Options selected for the created process. The stsflg
argument is a longword bit vector wherein a bit corresponds to an
option. Only bits 0 to 22 are used; the others are reserved and must be
0.
Each option (bit) has a symbolic name, which the $PRCDEF macro defines.
You construct the stsflg argument by performing a
logical OR operation using the symbolic names of each desired option.
The following table describes the symbolic name of each option:
Symbolic Name |
Description |
PRC$M_BATCH
|
Create a batch process. IMPERSONATE privilege is required.
|
PRC$M_IMPERSONATE
|
Create a detached process under another UIC.
|
PRC$M_DISAWS
|
Disable system-initiated working set adjustment.
|
PRC$M_HIBER
|
Force process to hibernate before it executes the image.
|
PRC$M_HOME_RAD
|
Assign process to specified home resource affinity domain (RAD).
Note: OpenVMS support for RADs is available only on the new AlphaServer GS series systems. For more information about using RADs, refer to the OpenVMS Alpha Partitioning and Galaxy Guide.
|
PRC$M_IMGDMP
|
Enable image dump facility. If an image terminates due to an unhandled
condition, the image dump facility writes the contents of the address
space to a file in your current default directory. The file name is the
same as the name of the terminated image. The file type is .DMP.
|
PRC$M_INTER
|
Create an interactive process. This option is meaningful only if the
image argument specifies SYS$SYSTEM:LOGINOUT.EXE. The
purpose of this option is to provide you with information about the
process. When you specify this option, it identifies the process as one
that is in communication with another user (an interactive process).
For example, if you use the DCL lexical function F$MODE to make an
inquiry about a process that has specified the PRC$M_INTER option,
F$MODE returns the value INTERACTIVE.
|
PRC$M_NETWRK
|
Create a process that is a network connect object. IMPERSONATE
privilege required.
|
PRC$M_NOACNT
|
Do not perform accounting. ACNT privilege is required.
|
PRC$M_NOPASSWORD
|
Do not display the
Username: and
Password: prompts if the process is interactive and detached
and the image is SYS$SYSTEM:LOGINOUT.EXE. If you specify this option in
your call to $CREPRC, the process created by the call is logged in
under the user name associated with the creating process. If you do not
specify this option for an interactive process, SYS$SYSTEM:LOGINOUT.EXE
prompts you for the user name and password to be associated with the
process. The prompts are displayed at the SYS$INPUT device.
|
PRC$M_NOUAF
|
Do not check authorization file if the process is detached and the
image is SYS$SYSTEM:LOGINOUT.EXE. You should not specify this option if
a subprocess is being created.
In previous versions of the operating system, the symbolic name of
this option was PRC$M_LOGIN. The symbolic name has been changed to more
accurately denote the effect of setting this bit. For compatibility
with existing user programs, you can still specify this bit as
PRC$M_LOGIN.
|
PRC$M_PARSE_EXPANDED
|
Sets the PARSE_STYLE_PERM and the PARSE_STYLE_IMAGE properties for the
new process to EXTENDED.
|
PRC$M_PSWAPM
|
Inhibit process swapping. PSWAPM privilege is required.
|
PRC$M_SSFEXCU
|
Enable system service failure exception mode.
|
PRC$M_SSRWAIT
|
Disable resource wait mode.
|
PRC$M_SUBSYSTEM
|
Inherit any protected subsystem identifiers. The default is that the
new process does not inherit subsystem identifiers.
|
PRC$M_TCB
|
Mark a process as part of the trusted computing base (TCB). As such, it
is expected to perform its own auditing. IMPERSONATE privilege is
required.
|
Note that options PRC$M_BATCH, PRC$M_INTER, PRC$M_NOUAF, PRC$M_NETWRK,
and PRC$M_NOPASSWORD are intended for use by Compaq software.
itmlst
OpenVMS usage: |
reserved |
type: |
longword (unsigned) |
access: |
|
The itmlst argument is reserved by Compaq.
node
OpenVMS usage: |
SCS_nodename |
type: |
character-coded text string |
access: |
read only |
mechanism: |
by descriptor--fixed-length string descriptor |
Name of the OpenVMS Cluster node on which the process is to be created.
The node argument is the address of a character string
descriptor pointing to a 1- to 6-character SCS node name string. If the
argument is present but zero or if the string is zero length, the
process is created on the current node.
home_rad
OpenVMS usage: |
longword_unsigned |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Sets the home resource affinity domain (RAD) of a process.
The home RAD is determined by the operating system, unless you
explicitly request one. If bit PRC$M_HOME_RAD in the
stsflg is set, home_rad is the RAD on
which the process is to start. Note that you may set this bit to 0 on
non-RAD systems.
Note: OpenVMS support for RADs is available only on the new AlphaServer GS series systems. For more information about using RADs, refer to the OpenVMS Alpha Partitioning and Galaxy Guide.
Description
The Create Process service creates a subprocess or detached process on
behalf of the calling process. A subprocess can be created only on the
current OpenVMS Cluster node. A detached process can be created on the
current OpenVMS Cluster node or on the node specified with the
node argument.
A detached process is a fully independent process. For example, the
process that the system creates when you log in is a detached process.
A subprocess, on the other hand, is related to its creating process in
a treelike structure; it receives a portion of the creating process's
resource quotas and must terminate before the creating process. Any
subprocesses that still exist when their creator is being deleted are
automatically deleted.
The presence of the uic argument,
node argument, or the PRC$M_IMPERSONATE flag specifies
that the created process is detached.
Creating a process is synchronous in that the process has actually been
created and its PID determined before control returns to the program
that requested the system service. Note, however, that the new process
has not necessarily begun to execute at that point. Some error
conditions are not detected until the created process executes. These
conditions include an invalid or nonexistent image; invalid SYS$INPUT,
SYS$OUTPUT, or SYS$ERROR logical name equivalence; inadequate quotas;
or insufficient privilege to execute the requested image.
In creating a detached or subprocess, you can specify that the process
run the image SYS$SYSTEM:LOGINOUT.EXE. During interactive logins,
LOGINOUT performs the following functions:
- It validates user name and password.
- It reads the system authorization file record associated with that
user and redefines the process environment based on information from
the record.
- It maps a command language interpreter (CLI) into the process and
passes control to it.
The CLI reads a command from SYS$INPUT, processes it, and reads another
command. The presence of the CLI enables the process to execute
multiple images. It also enables an image running in the process to use
Run-Time Library procedures, such as LIB$SPAWN, LIB$DO_COMMAND, and
LIB$SET_LOGICAL, that require a CLI.
Running in the context of a process you create through $CREPRC,
LOGINOUT can perform some or all of the preceding steps, depending on
whether the process is a subprocess or a detached process and on the
values of PRC$M_NOPASSWORD and PRC$M_NOUAF in the
stsflg argument.
Certain characteristics of a created process can be specified
explicitly through $CREPRC system service arguments, while other
characteristics are propagated implicitly from the $CREPRC caller.
Implicit characteristics include the following:
- Current default directory
- Creator's equivalence name for SYS$DISK
- User and account names
- Command language interpreter (CLI) name and command table file name
Note, however, that after the process has been created, if it runs
LOGINOUT and LOGINOUT redefines the process environment, those
characteristics will be overridden by information from the system
authorization file.
Several process characteristics are relevant to the creation of a
process on another OpenVMS Cluster node, in particular, process quotas,
default directory, SYS$DISK equivalence name, CLI name, and CLI command
table name.
Quotas for a process created on another OpenVMS Cluster node are
calculated as previously described in the section on the use of the
quota list; namely, they are based on explicit values passed by the
creator and system parameters on the other OpenVMS Cluster node. If the
other node has its own authorization file with node-specific quotas,
you might want to specify in the $CREPRC request that the process run
LOGINOUT so it can redefine the process environment based on that
node's quotas for the user.
Unless overridden by LOGINOUT, the new process will use its creator's
default disk and directory. If the disk is not mounted clusterwide, the
created process might need to redefine SYS$DISK with an equivalence
name that specifies a disk accessible from that node.
|