Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ memcntl(2) — DG/UX 4.30

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

mmap(2)

plock(2)

getpagesize(2)



     memcntl(2)                 DG/UX 4.30                  memcntl(2)



     NAME
          memcntl - memory management control

     SYNOPSIS
          #include <sys/types.h>
          #include <sys/mman.h>

          int    memcntl(addr, len, cmd, arg, attr, mask);
                 caddr_t  addr;
                 size_t   len;
                 int      cmd;
                 caddr_t  arg;
                 int      attr;
                 int      mask;

     DESCRIPTION
          The function memcntl allows the calling process to  apply  a
          variety   of  control  operations  over  the  address  space
          identified by the mappings established for the address range
          [addr, addr + len).

          addr must be a multiple  of  the  pagesize  as  returned  by
          getpagesize(2).   The scope of the control operations can be
          further defined with additional selection criteria  (in  the
          form  of  attributes) according to the bit pattern contained
          in attr.

          The following  attributes  specify  page  mapping  selection
          criteria:

                      SHARED    Page is mapped shared.
                      PRIVATE   Page is mapped private.

          The following attributes specify page  protection  selection
          criteria:

                  PROTREAD    Page has read permission.
                  PROTWRITE   Page has write permission.
                  PROTEXEC    Page has execute permission.

          The selection criteria are  constructed  by  an  OR  of  the
          attribute bits.

          Selection criteria can be used to describe various  abstract
          memory objects within the address space on which to operate.
          If an operation shall not be constrained  by  the  selection
          criteria, attr must have the value 0.

          The operation to be performed is identified by the  argument
          cmd.   The  symbolic names for the operations are defined in
          <sys/mman.h> as follows:




     Licensed material--property of copyright holder(s)         Page 1





     memcntl(2)                 DG/UX 4.30                  memcntl(2)



          MCLOCK   Lock  in  memory  all  pages  in  the  range  with
                    attributes  attr.   A  given  page  may  be locked
                    multiple   times   through   different   mappings;
                    however, within a given mapping, page locks do not
                    nest.   Multiple  lock  operations  on  the   same
                    address  in  the  same process will all be removed
                    with a single unlock operation.  A page locked  in
                    one  process  and  mapped  in  another (or visible
                    through  a  different  mapping  in   the   locking
                    process)  is  locked  in  memory  as  long  as the
                    locking  process  does  neither  an  implicit  nor
                    explicit unlock operation.  If a locked mapping is
                    removed, or a page is deleted through file removal
                    or  truncation,  an unlock operation is implicitly
                    performed.  If a writable MAPPRIVATE page in  the
                    address   range  is  changed,  the  lock  will  be
                    transferred to the private page.

                    At present arg is unused, but must be 0 to  ensure
                    compatibility with potential future enhancements.

          MCLOCKAS Lock in memory all pages  mapped  by  the  address
                    space  with  attributes attr.  At present addr and
                    len  are  unused,  but  must   be   NULL   and   0
                    respectively,   to   ensure   compatibility   with
                    potential  future  enhancements.   arg  is  a  bit
                    pattern built from the flags:

                          MCLCURRENT   Lock current mappings
                          MCLFUTURE    Lock future mappings

                    The value of arg determines whether the  pages  to
                    be  locked  are  those  currently  mapped  by  the
                    address space, those that will be  mapped  in  the
                    future, or both.  If MCLFUTURE is specified, then
                    all mappings subsequently  added  to  the  address
                    space  will  be locked, provided sufficient memory
                    is available.

          MCUNLOCK Unlock all pages  in  the  range  with  attributes
                    attr.   At present arg is unused, but must be 0 to
                    ensure   compatibility   with   potential   future
                    enhancements.

          MCUNLOCKAS
                    Remove address space memory locks,  and  locks  on
                    all  pages  in  the  address space with attributes
                    attr.  At present addr, len, and arg  are  unused,
                    but  must be NULL, 0 and 0 respectively, to ensure
                    compatibility with potential future enhancements.

          The mask argument must be zero; it is  reserved  for  future



     Licensed material--property of copyright holder(s)         Page 2





     memcntl(2)                 DG/UX 4.30                  memcntl(2)



          use.

          Locks established with the lock operations are not inherited
          by a child process after fork.  memcntl fails if it attempts
          to lock more memory than a system-specific limit.

          Due  to  the  potential  impact  on  system  resources,  all
          operations   are  restricted  to  processes  with  superuser
          effective  user  ID.   The  memcntl  function  subsumes  the
          operations of plock(2).

     RETURN VALUE
          Upon successful completion, the function memcntl  returns  a
          value  of  0;  otherwise,  it returns a value of -1 and sets
          errno to indicate an error.

     ERRORS
          Under the following conditions, the function  memcntl  fails
          and sets errno to:

          EAGAIN      if some or all of the memory identified  by  the
                      operation  could  not  be locked when MCLOCK or
                      MCLOCKAS is specified.

          EINVAL      if addr is not a multiple of the  page  size  as
                      returned by getpagesize(2).

          EINVAL      if addr and/or len do not have the value 0  when
                      MCLOCKAS or MCUNLOCKAS is specified.

          EINVAL      if arg is not valid for the function specified.

          EINVAL      if invalid selection criteria are  specified  in
                      attr.

          ENOMEM      if some or all the addresses in the range [addr,
                      addr + len) are invalid for the address space of
                      the process or pages not mapped are specified.

          EPERM       if  the  process's  effective  user  ID  is  not
                      superuser   and   one   of  MCLOCK,  MCLOCKAS,
                      MCUNLOCK, or MCUNLOCKAS was specified.

     SEE ALSO
          mmap(2), plock(2), getpagesize(2).










     Licensed material--property of copyright holder(s)         Page 3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026