  | 
		
HP OpenVMS System Services Reference Manual
 
 
If an attempt to lock an image in the working set returns 
SS$_LKWSETFUL, you might consider moving all kernel mode code within 
the image to a separate, smaller sharable image. Otherwise, you might 
consider increasing the working set quota of the process.
 
The LIBRTL routine LIB$LOCK_IMAGE and LIB$UNLOCK_IMAGE are preferable 
to SYS$LKWSET_64 and SYS$ULKWSET_64 for locking code and related data 
in the working set. For more information about locking images in the 
working set, see the LIBRTL manual and the descriptions of 
LIB$LOCK_IMAGE and LIB$UNLOCK_IMAGE.
 
Required Privileges
 
 
None
 
Required Quota
 
 
None
 
Related Services
 
 
$LKWSET, $ULWSET, $ULWSET_64
  
Condition Values Returned
  
    | 
      SS$_WASCLR
     | 
    
      The service completed successfully. All of the specified pages were 
      previously unlocked. The entire image might have been locked in the 
      working set.
     | 
   
  
    | 
      SS$_WASSET
     | 
    
      The service completed successfully. At least one of the specified pages 
      was previously locked in the working set. If the image has been locked 
      in the working set, the count of times the image has been locked in the 
      working set has been incremented.
     | 
   
  
    | 
      SS$_ACCVIO
     | 
    
      The
      return_va_64 or
      return_length_64 argument cannot be written by the 
      caller, or an attempt was made to lock pages by a caller whose access 
      mode is less privileged than the access mode associated with the pages.
     | 
   
  
    | 
      SS$_LKWSETFUL
     | 
    
      The locked working set is full. If any more pages are locked, not 
      enough dynamic pages will be available to continue execution. If the 
      image is being locked in the working set, the image is too large to be 
      entirely locked in the working set.
     | 
   
  
    | 
      SS$_NOPRIV
     | 
    
      No privilege; global pages with write access cannot be locked into the 
      working set.
     | 
   
  
    | 
      SS$_PAGNOTINREG
     | 
    
      A page in the specified range is not within the specified region.
     | 
   
  
    | 
      SS$_PAGOWNVIO
     | 
    
      The pages could not be locked because the access mode associated with 
      the call to $LKWSET_64 was less privileged than the access mode 
      associated with the pages that were to be locked.
     | 
   
 
 
 
$MGBLSC
 
Establishes a correspondence between pages (maps) in the virtual 
address space of the process and physical pages occupied by a global 
section.
 
 
Format
SYS$MGBLSC inadr ,[retadr] ,[acmode] ,[flags] ,gsdnam ,[ident] ,[relpag]
  
 
C Prototype
int sys$mgblsc (struct _va_range *inadr, struct _va_range *retadr, 
unsigned int acmode, unsigned int flags, void *gsdnam, struct _secid 
*ident, unsigned int relpag);
  
 
Arguments
inadr
 
  
    | OpenVMS usage: | 
    address_range | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by reference | 
   
 
 
Starting and ending virtual addresses into which the section is to be 
mapped. The inadr argument is the address of a 
2-longword array containing, in order, the starting and ending process 
virtual addresses. Only the virtual page number portion of each virtual 
address is used to specify which pages are to be mapped; the low-order 
byte-within-page bits are ignored for this purpose.
The interpretation of the inadr argument depends on 
the setting of SEC$M_EXPREG in the flags argument and 
on whether you are using an Alpha or an Integrity servers system. These 
system types are discussed separately in this section.
 
Alpha and Integrity servers System Usage
 
 
On Alpha and Integrity server systems, if you do not set the 
SEC$M_EXPREG flag, the inadr argument specifies the 
starting and ending virtual addresses of the region to be mapped. 
Addresses in system space are not allowed. The addresses must be 
aligned on CPU-specific pages; no rounding to CPU-specific pages 
occurs. The lower address of the inadr argument must 
be on a CPU-specific page boundary and the higher address of the 
inadr argument must be 1 less than a CPU-specific 
boundary, thus forming a range, from lowest to highest, of address 
bytes. You can use the SYI$_PAGE_SIZE item code in the $GETSYI system 
service to set the inadr argument to the proper 
values. You do this to avoid programming errors that might arise 
because of incorrect programming assumptions about page sizes.
 
If, on the other hand, you do set the SEC$M_EXPREG flag, 
indicating that the mapping should take place using the first available 
space in a particular region, the inadr argument is 
used only to indicate the desired region: the program region (P0) or 
the control region (P1).
 
 
  Caution 
Mapping into the P1 region is generally discouraged, but, if done, must 
be executed with extreme care. Since the user stack is mapped in P1, it 
is possible that references to the user stack might inadvertently read 
or write the pages mapped with $CRMPSC. 
     | 
   
 
When the SEC$M_EXPREG flag is set, the second inadr 
longword is ignored, while bit 30 (the second most significant bit) of 
the first inadr longword is used to determine the 
region of choice. If the bit is clear, P0 is chosen; if the bit is set, 
P1 is chosen. On Alpha and Integrity server systems, bit 31 (the most 
significant bit) of the first inadr longword must 
be 0. To ensure compatibility between Alpha and Integrity server 
systems when you choose a region, HP recommends that you specify, for 
the first inadr longword, any virtual address in the 
desired region.
 retadr
 
  
    | OpenVMS usage: | 
    address_range  | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    write only | 
   
  
    | mechanism:  | 
    by reference | 
   
 
 
Starting and ending process virtual addresses into which the section 
was actually mapped by $MGBLSC. The retadr argument is 
the address of a 2-longword array containing, in order, the starting 
and ending process virtual addresses.
On Alpha and Integrity server systems, the retadr 
argument returns the starting and ending addresses of the 
usable range of addresses. This might differ from the total 
amount mapped. The retadr argument is required when 
the relpag argument is specified. If the section being 
mapped does not completely fill the last page used to map the section, 
the retadr argument indicates the highest address that 
actually maps the section. If the relpag argument is 
used to specify an offset into the section, the retadr 
argument reflects the offset.
 acmode
 
  
    | OpenVMS usage: | 
    access_mode  | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Access mode to be associated with the pages mapped into the process 
virtual address space. The acmode argument is a 
longword containing the access mode. The $PSLDEF macro defines symbols 
for the four access modes.
The most privileged access mode used is the access mode of the caller.
 flags
 
  
    | OpenVMS usage: | 
    mask_longword  | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Flag mask specifying options for the operation. The 
flags argument is a longword bit vector wherein a bit 
when set specifies the corresponding option.
The $SECDEF macro defines symbolic names for the flag bits. You 
construct the flags argument by specifying the 
symbolic names of each desired option in a logical OR operation.
 
The following table describes each flag option:
 
  
    | Flag Option  | 
    Description  | 
   
  
    | 
      SEC$M_WRT
     | 
    
      Map the section with read/write access. By default, the section is 
      mapped with read-only access. If SEC$M_WRT is specified and the section 
      is not copy-on-reference, write access is required.
     | 
   
  
    | 
      SEC$M_SYSGBL
     | 
    
      Map a system global section. By default, the section is a group global 
      section.
     | 
   
  
    | 
      SEC$M_EXPREG
     | 
    
      Map the section into the first available virtual address range. By 
      default, the section is mapped into the range specified by the
      inadr argument.
        See the
      inadr argument description for a complete explanation 
      of how to set the SEC$M_EXPREG flag.
      | 
   
  
    | 
      SEC$M_UNCACHED
     | 
    
      Flag that must be set when a PFN-mapped section is created if this 
      section must be treated as uncached memory. Flag is ignored on Alpha 
      systems; it applies only to Integrity server systems.
     | 
   
 
gsdnam
 
  
    | OpenVMS usage: | 
    section_name | 
   
  
    | type: | 
    character-coded text string | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by descriptor--fixed-length string descriptor | 
   
 
 
Name of the global section. The gsdnam argument is the 
address of a character string descriptor pointing to this name string.
For group global sections, the operating system interprets the group 
UIC as part of the global section name; thus, the names of global 
sections are unique to UIC groups. Further, all global section names 
are implicitly qualified by their identification fields.
 
You can specify any name from 1 to 43 characters. All processes mapping 
to the same global section must specify the same name. Note that the 
name is case sensitive.
 
Use of characters valid in logical names is strongly encouraged. Valid 
values include alphanumeric characters, the dollar sign ($), and the 
underscore (_). If the name string begins with an underscore (_), the 
underscore is stripped and the resultant string is considered to be the 
actual name. Use of the colon (:) is not permitted.
 
Names are first subject to a logical name translation, after the 
application of the prefix GBL$ to the name. If the result translates, 
it is used as the name of the section. If the resulting name does not 
translate, the name specified by the caller is used as the name of the 
section.
 
Additional information on logical name translations and on section name 
processing is available in the HP OpenVMS Programming Concepts Manual.
 ident
 
  
    | OpenVMS usage: | 
    section_id | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by reference | 
   
 
 
Identification value specifying the version number of a global section 
and, for processes mapping to an existing global section, the criteria 
for matching the identification. The ident argument is 
the address of a quadword structure containing three fields.
The first longword specifies, in the low-order two bits, the matching 
criteria. Their valid values, the symbolic names by which they can be 
specified, and their meanings are as follows:
 
  
    | Value/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.
     | 
   
 
The version number is in the second longword and contains two fields: a 
minor identification in the low-order 24 bits and a major 
identification in the high-order 8 bits.
 
If you do not specify ident or specify it as the value 
0 (the default), the version number and match control fields default to 
the value 0.
 relpag
 
  
    | OpenVMS usage: | 
    longword_unsigned  | 
   
  
    | type: | 
    longword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Relative page number within the section of the first page to be mapped. 
The relpag argument is a longword containing this 
number.
On Alpha and Integrity server systems, the relpag 
argument is interpreted as an index into the section file, measured in 
pagelets for a file-backed section or CPU-specific pages for a 
PFN-mapped section.
 
On Alpha, Integrity servers systems, if you do not specify 
relpag or specify it as the value 0 (the default), the 
global section is mapped beginning with the first virtual block in a 
file-backed section or the first CPU-specific page in a PFN-mapped 
section.
  
 
Description
The Map Global Section service establishes a correspondence between 
pages (maps) in the virtual address space of the process and physical 
pages occupied by a global section. The protection mask specified at 
the time the global section is created determines the type of access 
(for example, read/write or read only) that a particular process has to 
the section.
When $MGBLSC maps a global section, it adds pages to the virtual 
address space of the process. The section is mapped from a low address 
to a high address, whether the section is mapped in the program or 
control region.
 
If an error occurs during the mapping of a global section, the return 
address array, if specified, indicates the pages that were successfully 
mapped when the error occurred. If no pages were mapped, both longwords 
of the return address array contain the value --1.
 
Required Access or Privileges
 
 
Read access is required. If the SEC$M_WRT flag is specified, write 
access is required.
 
Required Quota
 
 
The working set quota (WSQUOTA) of the process must be sufficient to 
accommodate the increased size of the virtual address space when the 
$MGBLSC service maps a section.
 
If the section pages are copy-on-reference, the process must also have 
sufficient paging file quota (PGFLQUOTA).
 
This system service causes the working set of the calling process to be 
adjusted to the size specified by the working set quota (WSQUOTA). If 
the working set size of the process is less than quota, the working set 
size is increased; if the working set size of the process is greater 
than quota, the working set size is decreased.
 
Related Services
 
 
$ADJSTK, $ADJWSL, $CRETVA, $CRMPSC, $DELTVA, $DGBLSC, $EXPREG, $LCKPAG, 
$LKWSET, $PURGWS, $SETPRT, $SETSTK, $SETSWM, $ULKPAG, $ULWSET, $UPDSEC, 
$UPDSECW
 
For more information, see the chapter on memory management in the 
HP OpenVMS Programming Concepts Manual.
  
 
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      The service completed successfully.
     | 
   
  
    | 
      SS$_ACCVIO
     | 
    
      The input address array, the global section name or name descriptor, or 
      the section identification field cannot be read by the caller; or the 
      return address array cannot be written by the caller.
     | 
   
  
    | 
      SS$_ENDOFFILE
     | 
    
      The starting virtual block number specified is beyond the logical 
      end-of-file.
     | 
   
  
    | 
      SS$_EXQUOTA
     | 
    
      The process exceeded its paging file quota, creating copy-on-reference 
      pages.
     | 
   
  
    | 
      SS$_INSFWSL
     | 
    
      The working set limit of the process is not large enough to accommodate 
      the increased virtual address space.
     | 
   
  
    | 
      SS$_INVARG
     | 
    
      Invalid argument specified to service. Common sources are the incorrect 
      specification of
      relpag or the values in the
      inadr array.
     | 
   
  
    | 
      SS$_IVLOGNAM
     | 
    
      The global section name has a length of 0 or has more than 43 
      characters.
     | 
   
  
    | 
      SS$_IVSECFLG
     | 
    
      You set a reserved flag.
     | 
   
  
    | 
      SS$_IVSECIDCTL
     | 
    
      The match control field of the global section identification is invalid.
     | 
   
  
    | 
      SS$_NOPRIV
     | 
    
      The file protection mask specified when the global section was created 
      prohibits the type of access requested by the caller; or a page in the 
      input address range is in the system address space.
     | 
   
  
    | 
      SS$_NOSHPTS
     | 
    
      The region ID of a shared page-table region was specified.
     | 
   
  
    | 
      SS$_NOSUCHSEC
     | 
    
      The specified global section does not exist.
     | 
   
  
    | 
      SS$_PAGOWNVIO
     | 
    
      A page in the specified input address range is owned by a more 
      privileged access mode.
     | 
   
  
    | 
      SS$_SECREFOVF
     | 
    
      The maximum number of references for a global section has been reached 
      (2,147,483,647).
     | 
   
  
    | 
      SS$_TOOMANYLNAM
     | 
    
      Logical name translation of the
      gsdnam string exceeded the allowed depth.
     | 
   
  
    | 
      SS$_VA_IN_USE
     | 
    
      The existing underlying page cannot be deleted because it is associated 
      with a buffer object.
     | 
   
  
    | 
      SS$_VASFULL
     | 
    
      The virtual address space of the process is full; no space is available 
      in the page tables for the pages created to contain the mapped global 
      section.
     | 
   
 
 
 
$MGBLSC_64 (Alpha and Integrity servers)
 
On Alpha and Integrity server systems, establishes a correspondence 
between pages in the virtual address space of the process and the pages 
occupied by a global disk file, page file, or demand-zero section and 
can map to a demand-zero section with shared page tables.
This service accepts 64-bit addresses.
  
 
Format
SYS$MGBLSC_64 gs_name_64 ,ident_64 ,region_id_64 ,section_offset_64 
,length_64 ,acmode ,flags ,return_va_64 ,return_length_64   
[,start_va_64]
  
 
C Prototype
int sys$mgblsc_64 (void *gsdnam_64, struct _secid *ident_64, struct 
_generic_64 *region_id_64, unsigned __int64 section_offset_64, unsigned 
__int64 length_64, unsigned int acmode, unsigned int flags, void 
*(*(return_va_64)), unsigned __int64 *return_length_64,...);
  
 
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-bit or 
64-bit string descriptor pointing to this name string.
You can specify any name from 1 to 43 characters. All processes mapping 
to the same global section must specify the same name. Note that the 
name is case sensitive.
 
Use of characters valid in logical names is strongly encouraged. Valid 
values include alphanumeric characters, the dollar sign ($), and the 
underscore (_). If the name string begins with an underscore (_), the 
underscore is stripped and the resultant string is considered to be the 
actual name. Use of the colon (:) is not permitted.
 
Names are first subject to a logical name translation, after the 
application of the prefix GBL$ to the name. If the result translates, 
it is used as the name of the section. If the resulting name does not 
translate, the name specified by the caller is used as the name of the 
section.
 
Additional information on logical name translations and on section name 
processing is available in the HP OpenVMS Programming Concepts Manual.
 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 a 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 two 
bits.
 
The valid values, symbolic names by which they can be specified, and 
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.
 region_id_64
 
  
    | OpenVMS usage: | 
    region identifier | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by 32- or 64-bit reference | 
   
 
 
The region ID associated with the region to map the global section. The 
file VADEF.H in SYS$STARLET_C.TLB and the $VADEF macro in STARLET.MLB 
define a symbolic name for each of the three default regions in P0, P1, 
and P2 space.
The following region IDs are defined:
 
  
    | Symbol  | 
    Region  | 
   
  
    | 
      VA$C_P0
     | 
    
      Program region
     | 
   
  
    | 
      VA$C_P1
     | 
    
      Control region
     | 
   
  
    | 
      VA$C_P2
     | 
    
      64-bit program region
     | 
   
 
Other region IDs, as returned by the $CREATE_REGION_64 service, can be 
specified.
 section_offset_64
 
  
    | OpenVMS usage: | 
    byte offset | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Offset into the global section at which to start mapping into the 
process's virtual address space.
If a map to a global disk file section is being requested, the 
section_offset_64 argument specifies an even multiple 
of disk blocks. If a map to a global page file or demand-zero section 
is being requested, the section_offset_64 argument 
specifies an even multiple of CPU-specific pages. If zero is specified, 
the global section is mapped beginning with the first page of the 
section.
 
If the region_id_64 argument specifies a shared page 
table region, section_offset_64 must be an even 
multiple of pages mapped by a page table page.
 length_64
 
  
    | OpenVMS usage: | 
    byte count | 
   
  
    | type: | 
    quadword (unsigned) | 
   
  
    | access: | 
    read only | 
   
  
    | mechanism:  | 
    by value | 
   
 
 
Length, in bytes, of the desired mapping of the global disk file 
section.
If a map to a global section is being requested, the 
length_64 argument must specify an even multiple of 
disk blocks. If a map to a global page file or demand-zero section is 
being requested, the length_64 argument must specify 
an even multiple of CPU-specific pages. If zero is specified, the size 
of the disk file is used.
 
If a shared page-table region is specified by the 
region_id_64 argument, length_64 must 
be an even multiple of the number of bytes that can be mapped by a 
CPU-specific page-table page or must include the last page within the 
memory-resident global section.
 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. This is also the read access mode and, if the SEC$M_WRT flag 
is specified, the write access mode. The acmode 
argument is a longword containing the access mode.
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
     | 
   
 
 
  
  |