  | 
		
HP OpenVMS System Services Reference Manual
 
 
 
$CREATE_GALAXY_LOCK (Alpha Only)
 
Allocates an OpenVMS Galaxy lock block from a lock table created with 
the $CREATE_GALAXY_LOCK_TABLE service.
Note that this system service is supported only in an OpenVMS Alpha 
Galaxy environment.
 
For more information about programming with OpenVMS Galaxy system 
services, see the HP OpenVMS Alpha Partitioning and Galaxy Guide.
  
 
Format
SYS$CREATE_GALAXY_LOCK lcktbl_handle ,name ,size ,timeout ,ipl ,rank 
,handle
  
 
C Prototype
int sys$create_galaxy_lock (unsigned int lcktbl_handle, void *name, 
unsigned int size, unsigned int timeout, unsigned int ipl, unsigned int 
rank, unsigned __int64 *lock_handle);
  
 
Arguments
lcktbl_handle
 
  
    | OpenVMS usage: | 
    lock table handle | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
The 32-bit lock table handle that identifies the lock table in which to 
create the lock. This value is returned by SYS$CREATE_GALAXY_LOCK_TABLE.
name
 
  
    | OpenVMS usage: | 
    address | 
   
  
    | type: | 
    ASCID string | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by reference | 
   
 
 
The name parameter is a pointer to an ASCID string 
(passed by descriptor). The name can be a maximum of 15 characters. 
Lock names are not checked for uniqueness; therefore, multiple locks 
can be created with the same name.
timeout
 
  
    | OpenVMS usage: | 
    wait timeout | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
The 32-bit wait or spin timeout specified in 10 microsecond units. If 
not specified, the timeout defaults to 10 microseconds.
size
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
The size of the galaxy lock in bytes. Galaxy locks have two legal 
sizes. These values are returned by SYS$GET_GALAXY_LOCK_SIZE. The value 
passed to SYS$CREATE_GALAXY_LOCK must be equal to the value passed to 
the call to SYS$CREATE_GALAXY_LOCK_TABLE.
ipl
 
  
    | OpenVMS usage: | 
    IPL of lock | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
For galaxy locks acquired in kernel mode, the IPL to raise to while the 
lock is held. This parameter is ignored for all other access mode.
rank
 
  
    | OpenVMS usage: | 
    rank of lock | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
Rank applied to a galaxy lock. Ranking is used to detect potential 
deadlocks. This parameter is currently ignored.
handle
 
  
    | OpenVMS usage: | 
    address | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    write | 
   
  
    | mechanism:  | 
    output by reference | 
   
 
 
The handle parameter is a pointer to a quadword. The value returned is 
a 64-bit handle that uniquely identifies the lock galaxy-wide.
 
 
Description
This service allocates an OpenVMS Galaxy lock block from a lock table 
created with the $CREATE_GALAXY_LOCK_TABLE service.
Required Access or Privileges
 
 
For System Lock: CMKRNL, SHMEM
 
For User Lock: SHMEM
 
Write access to Lock Table
 
Required Quota
 
 
None
 
Related Services
 
 
$ACQUIRE_GALAXY_LOCK, $CREATE_GALAXY_LOCK_TABLE, $DELETE_GALAXY_LOCK, 
$DELETE_GALAXY_LOCK_TABLE, $GET_GALAXY_LOCK_INFO, 
$GET_GALAXY_LOCK_SIZE, $RELEASE_GALAXY_LOCK
  
 
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal completion.
     | 
   
  
    | 
      SS$_ACCVIO
     | 
    
      Access violation on parameter.
     | 
   
  
    | 
      SS$_BADLCKTBL
     | 
    
      OpenVMS Galaxy lock table is corrupt.
     | 
   
  
    | 
      SS$_BADPARAM
     | 
    
      Bad parameter value.
     | 
   
  
    | 
      SS$_IVLOCKID
     | 
    
      Invalid lock id.
     | 
   
  
    | 
      SS$_IVLOCKTBL
     | 
    
      Invalid lock table.
     | 
   
  
    | 
      SS$_INSFMEM
     | 
    
      Insufficient memory in lock table.
     | 
   
  
    | 
      SS$_NOCMKRNL
     | 
    
      Operation requires CMKRNL privilege.
     | 
   
  
    | 
      SS$_NOSHMEM
     | 
    
      Operation requires SHMEM privilege.
     | 
   
 
 
 
$CREATE_GALAXY_LOCK_TABLE (Alpha Only)
 
Allocates an OpenVMS Galaxy lock table.
Note that this system service is supported only in an OpenVMS Alpha 
Galaxy environment.
 
For more information about programming with OpenVMS Galaxy system 
services, see the HP OpenVMS Alpha Partitioning and Galaxy Guide.
  
 
Format
SYS$CREATE_GALAXY_LOCK_TABLE name ,accmode ,section_size ,section_type 
,prot ,lock_size ,lcktbl_handle
  
 
C Prototype
int sys$create_galaxy_lock_table (void *name, unsigned int accmode, 
unsigned __int64 section_size, unsigned int section_type, unsigned int 
prot, unsigned int lock_size, unsigned int *lcktbl_handle);
  
 
Arguments
name
 
  
    | OpenVMS usage: | 
    address | 
   
  
    | type: | 
    ASCID string | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by reference | 
   
 
 
The name parameter is a pointer to an ASCID string (passed by 
descriptor). The name is given to the global section that is created to 
contain the galaxy locks.
accmode
 
  
    | OpenVMS usage: | 
    access mode | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
Access mode that is to be the owner of the pages created during the 
mapping. The accmode argument is a longword containing 
the access mode.
section_size
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
Length of the global section to be created, in bytes. The size must be 
specified as a multiple of the CPU-specific page size. A size of zero 
is illegal.
section_type
 
  
    | OpenVMS usage: | 
    bit mask | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
Used to control where in virtual memory the global section is created. 
If GLCKTBL$C_PROCESS is specified, the section is created in P2 
(process) space. If GLCKTBL$C_SYSTEM is specified, the section is 
created in S0/S1 (system) space. These constants are defined in the 
GLOCKDEF macro.
prot
 
  
    | OpenVMS usage: | 
    protection | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
Protection to be applied to the global section.
The mask contains four 4-bit fields. Bits are read from right to left 
in each field. The following diagram depicts the mask:
  
 
 
Cleared bits indicate that read, write, execute, and delete access, in 
that order, are granted to the particular category of user.
 
Only read and write access are meaningful for lock section protection. 
Delete access bits are ignored.
 lock_size
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read | 
   
  
    | mechanism:  | 
    input by value | 
   
 
 
The size of the galaxy lock in bytes. Galaxy locks have two sizes. The 
legal values are returned by SYS$GET_GALAXY_LOCK_SIZE.
lcktbl_handle
 
  
    | OpenVMS usage: | 
    address | 
   
  
    | type: | 
    longword | 
   
  
    | access: | 
    write | 
   
  
    | mechanism:  | 
    output by reference | 
   
 
 
Pointer to a longword. The value returned is a 32-bit handle that 
uniquely identifies the lock table galaxy-wide.
 
Description
This service allocates an OpenVMS Galaxy lock table. This structure is 
used to maintain information about a shared memory section, which this 
service also creates. The first caller of the service with a unique 
lock table name creates the section. Additional callers map it. This 
shared memory section contains a set of Galaxy locks. All locks 
residing in the section are of the same size. Once the lock table is 
created, the $CREATE_GALAXY_LOCK service can be used to create and 
allocate a lock from the table.
The flags GLCKTBL$C_PROCESS and GLCKTBL$C_SYSTEM specify whether the 
shared memory region is mapped into system space or process space. 
Creation of process space sections requires the SHMEM privilege. 
Creation of system space sections requires the SHMEM and CMKRNL 
privileges.
 
Required Access or Privileges
 
 
CMKRNL, SHMEM
 
Required Quota
 
 
None
 
Related Services
 
 
$ACQUIRE_GALAXY_LOCK, $CREATE_GALAXY_LOCK, $DELETE_GALAXY_LOCK, 
$DELETE_GALAXY_LOCK_TABLE, $GET_GALAXY_LOCK_INFO, 
$GET_GALAXY_LOCK_SIZE, $RELEASE_GALAXY_LOCK
  
 
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal completion.
     | 
   
  
    | 
      SS$_ACCVIO
     | 
    
      Access violation on parameter.
     | 
   
  
    | 
      SS$_BADPARAM
     | 
    
      Bad parameter value.
     | 
   
  
    | 
      SS$_CREATED
     | 
    
      File or section did not exist; has been created.
     | 
   
  
    | 
      SS$_IVLOCKID
     | 
    
      Invalid lock id.
     | 
   
  
    | 
      SS$_NOPRIV
     | 
    
      No privilege for attempted operation.
     | 
   
  
    | 
      SS$_NOCMKRNL
     | 
    
      Operation requires CMKRNL privilege.
     | 
   
  
    | 
      SS$_NOSHMEM
     | 
    
      Operation requires SHMEM privilege.
     | 
   
 
 
 
$CREATE_GDZRO
 
On Alpha and Integrity server systems, creates a permanent, 
memory-resident, global demand-zero section to which processes can map. 
Shared page table sections can also be created.
This service accepts 64-bit addresses.
  
 
Format
SYS$CREATE_GDZRO gs_name_64 ,ident_64 ,prot ,length_64 ,acmode ,flags 
[,reserved_length_64] [,rad_mask]
  
 
C Prototype
int sys$create_gdzro (void *gs_name_64, struct _secid *ident_64, 
unsigned int prot, unsigned __int64 length_64, unsigned int acmode, 
unsigned int flags,...);
  
 
Arguments
gs_name_64
 
  
    | OpenVMS usage: | 
    section_name | 
   
  
    | type: | 
    character-coded text string | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by 32- or 64-bit descriptor--fixed-length string 
    descriptor | 
   
 
 
Name of the global section. The gs_name_64 argument is 
the 32- or 64-bit virtual address of a naturally aligned 32- or 64-bit 
string descriptor pointing to this name string.
ident_64
 
  
    | OpenVMS usage: | 
    section_id | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by 32- or 64-bit reference | 
   
 
 
Identification value specifying the version number of the global 
section. The ident_64 argument is a quadword 
containing three fields. The ident_64 argument is the 
32- or 64-bit virtual address of a naturally aligned quadword that 
contains the identification value.
The first longword specifies the matching criteria in its low-order 2 
bits. Their meanings are as follows:
 
  
    | Value  | 
    Symbolic Name  | 
    Match Criteria  | 
   
  
    | 
      0
     | 
    
      SEC$K_MATALL
     | 
    
      Match all versions of the section.
     | 
   
  
    | 
      1
     | 
    
      SEC$K_MATEQU
     | 
    
      Match only if major and minor identifications match.
     | 
   
  
    | 
      2
     | 
    
      SEC$K_MATLEQ
     | 
    
      Match if the major identifications are equal and the minor 
      identification of the mapper is less than or equal to the minor 
      identification of the global section.
     | 
   
 
If you specify the ident_64 argument as 0, the version 
number and match control fields default to 0.
 
The version number is in the second longword. The version number 
contains two fields: a minor identification in the low-order 24 bits 
and a major identification in the high-order 8 bits. You can assign 
values for these fields by installation convention to differentiate 
versions of global sections. If no version number is specified when a 
section is created, processes that specify a version number when 
mapping cannot access the global section.
 prot
 
  
    | OpenVMS usage: | 
    file_protection | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Protection to be applied to the global demand-zero section. The mask 
contains four 4-bit fields. Bits are read from right to left in each 
field. The following diagram depicts the mask:
 
 
 
Cleared bits indicate that read, write, execute, and delete access, in 
that order, are granted to the particular category of user. Only read, 
write, and execute access are meaningful for section protection. Delete 
access bits are ignored. Read access also grants execute access for 
those situations where execute access applies. If 0 is specified, read 
access and write access are granted to all users.
 length_64
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Length, in bytes, of the global demand-zero section to be created. The 
length_64 argument must be specified as a multiple of 
the CPU-specific page size. A length of 0 cannot be specified.
 
  Note 
Creating a memory-resident global section with shared page tables does 
not imply that the global section must have a length that is an even 
multiple of CPU-specific page table pages. The global section might not 
fully use the last shared page table page. 
     | 
   
 
acmode
 
  
    | OpenVMS usage: | 
    access_mode | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Access mode that is to be the owner of the pages created during the 
mapping. The acmode argument is a longword containing 
the access mode.
If the memory-resident global section is created with shared page 
tables, this is the access mode that is stored in the owner, read, and 
write fields of the corresponding shared page table entries (PTEs).
 
The $PSLDEF macro in STARLET.MLB and the file PSLDEF.H in 
SYS$STARLET_C.TLB define the following symbols and their values for the 
four access modes:
 
  
    | Value  | 
    Symbolic Name  | 
    Access Mode  | 
   
  
    | 
      0
     | 
    
      PSL$C_KERNEL
     | 
    
      Kernel
     | 
   
  
    | 
      1
     | 
    
      PSL$C_EXEC
     | 
    
      Executive
     | 
   
  
    | 
      2
     | 
    
      PSL$C_SUPER
     | 
    
      Supervisor
     | 
   
  
    | 
      3
     | 
    
      PSL$C_USER
     | 
    
      User
     | 
   
 
flags
 
  
    | OpenVMS usage: | 
    mask_longword | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Flag mask specifying the type of global section to be created as well 
as its characteristics. The flags argument is a 
longword bit vector in which each bit corresponds to a flag. The 
$SECDEF macro and the SECDEF.H file define a symbolic name for each 
flag. You construct the flags argument by performing a 
logical OR operation on the symbol names for all desired flags.
The following table describes the flags that are valid for the 
$CREATE_GDZRO service:
 
  
    | Flag  | 
    Description  | 
   
  
    | 
      SEC$M_DZRO
     | 
    
      Pages are demand-zero pages. By default, this flag is always present in 
      this service and cannot be disabled.
     | 
   
  
    | 
      SEC$M_GBL
     | 
    
      Pages form a global section. By default, this flag is always present in 
      this service and cannot be disabled.
     | 
   
  
    | 
      SEC$M_MRES
     | 
    
      Pages form a memory-resident section. By default, this flag is always 
      present in this service and cannot be disabled.
     | 
   
  
    | 
      SEC$M_PERM
     | 
    
      Global section is permanent. By default, this flag is always present in 
      this service and cannot be disabled.
     | 
   
  
    | 
      SEC$M_RAD_HINT
     | 
    
      When set, the argument
      rad_mask is used as a mask of RADs from which to 
      allocate memory. See the
      rad_mask argument description for more information.
     | 
   
  
    | 
      SEC$M_READ_ONLY_SHPT
     | 
    
      Create shared table pages for the section that allow read access only.
     | 
   
  
    | 
      SEC$M_SHMGS
     | 
    
      Create a shared-memory global section.
     | 
   
  
    | 
      SEC$M_SYSGBL
     | 
    
      Pages form a system global section. By default, pages form a group 
      global section.
     | 
   
  
    | 
      SEC$M_WRT
     | 
    
      Pages form a read/write section. By default, this flag is always 
      present in this service and cannot be disabled.
     | 
   
 
All other bits in the flags argument are reserved for 
future use by HP and should be specified as 0. The condition value 
SS$_IVSECFLG is returned if any undefined bits are set.
 reserved_length_64
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    write only | 
   
  
    | mechanism:  | 
    32- or 64-bit reference | 
   
 
 
Length, in bytes, of the global section as currently registered in the 
Reserved Memory Registry. The reserved_length_64 
argument is the 32- or 64-bit virtual address of a naturally aligned 
quadword into which the service returns the reserved length.
If reserved_length_64 is not specified or is specified 
as 0, no reserved length is returned to the caller.
 
If the memory-resident global section is not registered, 
reserved_length_64 is written with the value 0.
 rad_mask
 
  
    | OpenVMS usage: | 
    mask_quadword | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Use the rad_mask argument to specify from which RADs 
to allocate memory. Currently only one bit may be set. The specified 
RAD must contain memory. This argument is only a hint. Memory may be 
obtained from other RADs if no free memory is available at the time of 
allocation.
The rad_mask argument is considered only if the 
SEC$M_RAD_HINT flag is specified. Otherwise, this argument is ignored.
 
On a system that does not support resource affinity domains (RADs), 
specifying 1 for the rad_mask argument is allowed.
 
RAD is supported on AlphaServer GS series systems and starting from OpenVMS  Version 8.4, support is extended to NUMA capable Integrity servers.
  
Description
The Create Permanent Global Demand-Zero Section service allows a 
process to create a permanent, memory-resident, global demand-zero 
section. If you set the SEC$M_SHMGS flag, the section is created as a 
Galaxy-wide global demand-zero section in shared memory.
You must call either the $CREATE_GDZRO service or the $CRMPSC_GDZRO_64 
service on each instance where the Galaxy shared memory will be 
accessed.
 
Memory-resident or Galaxy-wide global sections contain demand-zero 
allocation pages that are writable and memory resident. All pages in 
these types of global section are shared by all processes that map to 
the global section.
 
The pages are always resident in memory and are not backed up by any 
file on any disk. The pages are not placed into the process's working 
set list when the process maps to the global section and the virtual 
memory is referenced by the process. The pages are also not charged 
against the process's working set quota or against any page-file quota.
 
To create a memory-resident section, the process must have the rights 
identifier, VMS$MEM_RESIDENT_USER. The error status, SS$_NOMEMRESID, is 
returned if the caller has not been granted this identifier. To create 
a Galaxy-wide shared section, the process must have the SHMEM privilege.
 
Only memory-resident sections can be registered with the Reserved 
Memory Registry in the SYSMAN facility. Memory for Galaxy-wide shared 
sections is reserved through appropriate settings of the console 
environment parameters.
 
If the section is not registered in the Reserved Memory Registry, or if 
the /NOALLOCATE qualifier was specified when the global section was 
registered in the Reserved Memory Registry, invalid global PTEs are 
written to the global page table. When the global section is mapped, 
invalid page table entries are placed in the process page table. 
Physical memory is not allocated until the pages are referenced.
 
If the global section is registered in the Reserved Memory Registry, 
the size of the global section need not match the reserved size. If the 
global section is not registered in the Reserved Memory Registry, or if 
the reserved size is smaller than the size of the global section, the 
error status SS$_INSFLPGS is returned if there are not enough fluid 
pages in the system to satisfy the request.
 
If the /ALLOCATE qualifier was specified when the global section was 
registered in the Reserved Memory Registry, contiguous, aligned, 
physical pages are preallocated during system initialization for this 
global section. Valid page table entries are placed in the global page 
table and when the global section is mapped, valid page table entries 
are placed in the process page table. With the proper virtual 
alignment, granularity hints (GH) are used to map to the global pages.
 
If the global section is not registered in the Reserved Memory 
Registry, or if the /PAGE_TABLES qualifier was specified when the 
global section was registered, shared page tables are created for the 
memory-resident global section.
 
If the /ALLOCATE and /PAGE_TABLE qualifiers were specified when the 
global section was registered in the Reserved Memory Registry, 
contiguous, aligned physical pages are preallocated during system 
initialization for this global section, and granularity hints are used 
to map to the shared page table sections.
 
The following table lists the factors affecting the creation of shared 
page tables for memory-resident global sections. The /ALLOCATE and the 
/PAGE_TABLES qualifiers pertain to the Reserved Memory Registry command 
RESERVED_MEMORY ADD entered for the memory-resident global section 
being created. For more information about using the SYSMAN utility to 
create entries to the Reserved Memory Registry, see the HP OpenVMS System Management Utilities  Reference Manual.
 
  
    | /ALLOCATE  | 
    /PAGE_TABLES  | 
    Outcome  | 
   
  
    | 
      Not registered
     | 
    
      Not registered
     | 
    
      Shared page tables created.
       Shared page tables cannot use GH.
       Returns SS$_CREATED_SHPT.
      | 
   
  
    | 
      No
     | 
    
      No
     | 
    
      No shared page tables created.
       Returns SS$_CREATED.
      | 
   
  
    | 
      No
     | 
    
      Yes
     | 
    
      Shared page tables created.
       Shared page tables cannot use GH.
       Returns SS$CREATED_SHPT.
      | 
   
  
    | 
      Yes
     | 
    
      No
     | 
    
      No shared page tables created.
       Returns SS$_CREATED.
      | 
   
  
    | 
      Yes
     | 
    
      Yes
     | 
    
      Shared page tables created.
       Shared page tables can use GH.
       Returns SS$_CREATED_SHPT.
      | 
   
 
 
  
  |