VMS Help  —  System Services, $CREATE REGION 64 (Alpha and Integrity servers)
    On Alpha and Integrity server systems, creates a virtual region
    within the process's private address space.

    This service accepts 64-bit addresses.

    Format

      SYS$CREATE_REGION_64  length_64 ,region_prot ,flags

                            ,return_region_id_64 ,return_va_64

                            ,return_length_64 [,start_va_64]

    C Prototype

      int sys$create_region_64  ( unsigned __int64 length_64,

                                unsigned int region_prot,

                                unsigned int flags, struct

                                _generic_64 *return_region_id, void

                                *(*(return_va_64)), unsigned __int64

                                *return_length_64,...);

1  –  Arguments

 length_64

    OpenVMS usage:byte count
    type:         quadword (unsigned)
    access:       read only
    mechanism:    by value
    Length of the virtual region to be created. The length specified
    must be a multiple of CPU-specific pages. This length is fixed at
    the time the region is created.

    If you want to map multiple memory-resident sections to this
    region, specify a length large enough not only to accommodate
    all of the sections, but also to fill the space necessary to
    align the next section for a maximum of effective page sizes
    (granularity hints). You can satisfy this requirement by simply
    allocating a region that is twice as large as the sum of all
    sections you want to map.

    If the flag VA$M_SHARED_PTS is set, this length is rounded up to
    include an even multiple of CPU-specific pages mapped by a page
    table page.

 region_prot

    OpenVMS usage:region_protection
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    Region protection to be associated with the region to be created.
    The region_prot argument is a longword containing the create and
    owner mode.

    The file VADEF.H in SYS$STARLET_C.TLB and the $VADEF macro in
    STARLET.MLB define the following symbols for valid combinations
    of create and owner modes:

    Symbol                 Create and Owner Modes

    VA$C_REGION_UCREATE_   User create mode and user owner mode
    UOWN
    VA$C_REGION_UCREATE_   User create mode and supervisor owner mode
    SOWN
    VA$C_REGION_UCREATE_   User create mode and executive owner mode
    EOWN
    VA$C_REGION_UCREATE_   User create mode and kernel owner mode
    KOWN
    VA$C_REGION_SCREATE_   Supervisor create mode and supervisor
    SOWN                   owner mode
    VA$C_REGION_SCREATE_   Supervisor create mode and executive owner
    EOWN                   mode
    VA$C_REGION_SCREATE_   Supervisor create mode and kernel owner
    KOWN                   mode
    VA$C_REGION_ECREATE_   Executive create mode and executive owner
    EOWN                   mode
    VA$C_REGION_ECREATE_   Executive create mode and kernel owner
    KOWN                   mode
    VA$C_REGION_KCREATE_   Kernel create mode and kernel owner mode
    KOWN

    For both create and owner mode, the $CREATE_REGION_64 service
    uses whichever of the following two access modes is least
    privileged:

    o  Access mode specified by the acmode argument

    o  Access mode of the caller

    A subsequent call to any system service that created address
    space within a region must be made from an access mode that is
    the same or more privileged than the create mode associated with
    the region.

    A subsequent call to $DELETE_REGION_64 to delete the region must
    be made from an access mode that is the same or more privileged
    than the owner mode associated with the region.

    All regions created by $CREATE_REGION_64 are automatically
    deleted when the image is run down on image exit.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    Flag mask specifying the characteristics of the region to
    be created. The flags argument is a longword bit vector in
    which each bit corresponds to a flag. The file VADEF.H in
    SYS$STARLET_C.TLB and the $VADEF macro in STARLET.MLB 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_REGION_64 service:

    Flag             Description

    VA$M_DESCEND     Created region is a descending region; that
                     is, allocation occurs toward decreasing virtual
                     addresses. If VA$M_DESCEND is not specified,
                     the region allocation occurs toward increasing
                     virtual addresses.
    VA$M_SHARED_PTS  Created region requires the virtual address
                     space created within it to be capable of
                     using shared page tables. If this flag is not
                     specified, the virtual address space created
                     within the region is mapped by process-private
                     page tables only. By default, the region does
                     not allow the use of shared page tables.
    VA$M_P0_SPACE    Create region in P0 space. This flag cannot be
                     set if VA$M_P1_SPACE is set.
    VA$M_P1_SPACE    Create region in P1 space. This flag cannot be
                     set if VA$M_P0_SPACE is set.

    All other bits in the flags argument are reserved for future
    use by VSI. The condition value SS$_IVREGFLG is returned if any
    undefined bits are set.

 return_region_id_64

    OpenVMS usage:region identifier
    type:         quadword (unsigned)
    access:       write only
    mechanism:    by 32- or 64-bit reference
    The region ID associated with the created region. The
    return_region_id_64 argument is the 32- or 64-bit virtual address
    of a naturally aligned quadword into which the service returns
    the region ID.

 return_va_64

    OpenVMS usage:return address
    type:         quadword address
    access:       write only
    mechanism:    by 32- or 64-bit reference
    The lowest process virtual address of the region. The
    return_va_64 argument is the 32- or 64-bit virtual address of
    a naturally aligned quadword into which the service returns the
    lowest virtual address of the region.

    If the flag VA$M_SHARED_PTS is set, the returned virtual address
    is aligned to a CPU-specific page table page boundary. If the
    global section mapped by this shared page table region is large
    enough that multiple page table pages are required to map the
    global section, the page tables themselves can be mapped with
    granularity hints; therefore, the alignment of the returned
    virtual address can be even greater than that of a single CPU-
    specific page table page boundary.

 return_length_64

    OpenVMS usage:byte count
    type:         quadword (unsigned)
    access:       write only
    mechanism:    by 32- or 64-bit reference
    The length of the region actually created. The return_length_64
    argument is the 32- or 64-bit virtual address of a naturally
    aligned quadword into which the service returns the length of the
    region in bytes.

    If the flag VA$M_SHARED_PTS is set, the returned length is the
    input length rounded up to an even multiple of bytes mapped by a
    single CPU-specific page table page.

 start_va_64

    OpenVMS usage:address
    type:         quadword address
    access:       read only
    mechanism:    by value
    The starting address for the created virtual region. The
    specified virtual address must be a CPU-specific page aligned
    address.

    If the start_va_64 argument is not specified or is specified
    as 0, the region can be created anywhere within the following
    address spaces:

    o  P2 space (if the flags VA$M_P0_SPACE and VA$M_P1_SPACE are
       clear)

    o  P0 space (if the flag VA$M_P0_SPACE is set and VA$M_P1_SPACE
       is clear)

    o  P1 space (if the flag VA$M_P1_SPACE is set and VA$M_P0_SPACE
       is clear)

    If the flag VA$M_SHARED_PTS is set and this argument is
    specified, the specified starting address must be aligned to the
    larger of a natural page table boundary or the largest possible
    page size used to map the section. If the alignment is less than
    a page table boundary, the $CREATE_REGION_64 service returns an
    error. If the alignment is less than the largest page size used
    in the section, an error might be returned when you attempt to
    map the section.

    If you do not specify a starting address, OpenVMS automatically
    ensures correct alignment.
Close Help