IPB
>  Man Pages > Unix > Solaris 10 11/06 > Section 2 > priocntl man page

priocntl man page

Section 2 - Solaris 10 11/06 Man Pages

Other operating system man pages available here


Advanced Search

Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!





System Calls                                          priocntl(2)



NAME
     priocntl - process scheduler control

SYNOPSIS
     #include <sys/types.h>
     #include <sys/priocntl.h>
     #include <sys/rtpriocntl.h>
     #include <sys/tspriocntl.h>
     #include <sys/fsspriocntl.h>
     #include <sys/fxpriocntl.h>

     long priocntl(idtype_t idtype, id_t id, int cmd, /*  arg  */
     ...);

DESCRIPTION
     The  priocntl()  function  provides  for  control  over  the
     scheduling of an active light weight process (LWP).

     LWPs fall into distinct classes with a  separate  scheduling
     policy  applied  to  each  class. The classes currently sup-
     ported are the realtime class, the time-sharing  class,  the
     fair-share  class, and the fixed-priority class. The charac-
     teristics  of  these  classes  are   described   under   the
     corresponding headings below.

     The class attribute  of  an  LWP  is  inherited  across  the
     fork(2)  function  and  the exec(2) family of functions. The
     priocntl() function can be used to  dynamically  change  the
     class and other scheduling parameters associated with a run-
     ning LWP or set of LWPs given the appropriate permissions as
     explained below.

     In the default configuration, a runnable realtime  LWP  runs
     before  any other LWP. Therefore, inappropriate use of real-
     time LWP can have a dramatic negative impact on system  per-
     formance.

     The priocntl() function provides an interface for specifying
     a process, set of processes, or an LWP to which the function
     applies. The priocntlset(2) function provides the same func-
     tions as priocntl(), but allows a more general interface for
     specifying the set of LWPs  to  which  the  function  is  to
     apply.

     For  priocntl(),  the  idtype  and  id  arguments  are  used
     together  to  specify the set of LWPs. The interpretation of
     id depends on the value of idtype. The possible  values  for
     idtype  and  corresponding interpretations of id are as fol-
     lows:

     P_ALL           The  priocntl()  function  applies  to   all
                     existing  LWPs.  The value of id is ignored.



SunOS 5.10          Last change: 11 May 2006                    1






System Calls                                          priocntl(2)



                     The permission restrictions described  below
                     still apply.



     P_CID           The id argument is a class ID  (returned  by
                     the    priocntl()   PC_GETCID   command   as
                     explained below).  The  priocntl()  function
                     applies to all LWPs in the specified class.



     P_GID           The  id  argument  is  a   group   ID.   The
                     priocntl() function applies to all LWPs with
                     this effective group ID.



     P_LWPID         The id argument is an LWP ID.  The  priocntl
                     function  applies to the LWP with the speci-
                     fied ID within the calling process.



     P_PGID          The id argument is a process group  ID.  The
                     priocntl()  function  applies  to  all  LWPs
                     currently associated with processes  in  the
                     specified process group.



     P_PID           The id argument is a process ID specifying a
                     single   process.  The  priocntl()  function
                     applies to  all  LWPs  currently  associated
                     with the specified process.



     P_PPID          The id argument is a parent process ID.  The
                     priocntl()  function  applies  to  all  LWPs
                     currently associated with processes with the
                     specified parent process ID.



     P_PROJID        The  id  argument  is  a  project  ID.   The
                     priocntl() function applies to all LWPs with
                     this project ID.







SunOS 5.10          Last change: 11 May 2006                    2






System Calls                                          priocntl(2)



     P_SID           The  id  argument  is  a  session  ID.   The
                     priocntl()  function  applies  to  all  LWPs
                     currently associated with processes  in  the
                     specified session.



     P_TASKID        The id argument is a task ID. The priocntl()
                     function applies to all LWPs currently asso-
                     ciated with processes in the specified task.



     P_UID           The id argument is a user ID. The priocntl()
                     function  applies  to  all  LWPs  with  this
                     effective user ID.



     P_ZONEID        The id argument is a zone ID. The priocntl()
                     function  applies to all LWPs with this zone
                     ID.



     P_CTID          The id argument is a  process  contract  ID.
                     The  priocntl() function applies to all LWPs
                     with this process contract ID.



     An id value of P_MYID can be used in  conjunction  with  the
     idtype  value to specify the LWP ID, parent process ID, pro-
     cess group ID, session ID, task ID, class ID, user ID, group
     ID,  project ID, zone ID, or process contract ID of the cal-
     ling LWP.

     To change the scheduling parameters of  an  LWP  (using  the
     PC_SETPARMS  or  PC_SETXPARMS  command as explained below) ,
     the real or effective user ID of the LWP calling  priocntl()
     must  match the real or the calling LWP must have sufficient
     privileges.  These are the minimum  permission  requirements
     enforced  for  all classes. An individual class might impose
     additional permissions requirements  when  setting  LWPs  to
     that  class  and/or  when  setting class-specific scheduling
     parameters.

     A special SYS scheduling class exists  for  the  purpose  of
     scheduling the execution of certain special system processes
     (such as the swapper process). It is not possible to  change
     the  class  of any LWP to SYS. In addition, any processes in
     the SYS class that  are  included  in  a  specified  set  of



SunOS 5.10          Last change: 11 May 2006                    3






System Calls                                          priocntl(2)



     processes  are  disregarded  by  priocntl(). For example, an
     idtype of P_UID and an id  value  of  0  would  specify  all
     processes  with  a  user ID of 0 except processes in the SYS
     class and (if changing the parameters using  PC_SETPARMS  or
     PC_SETXPARMS) the  init(1M) process.

     The init process is a special case. For a priocntl() call to
     change  the class or other scheduling parameters of the init
     process (process ID 1), it must be the only  process  speci-
     fied  by idtype and id.  The init process can be assigned to
     any class configured on the  system,  but  the  time-sharing
     class  is  almost  always  the  appropriate  choice.  (Other
     choices might be highly undesirable. See the System Adminis-
     tration Guide: Basic Administration for more information.)

     The data type and value of arg are specific to the  type  of
     command specified by cmd.

     A pcinfo_t structure with the following members, defined  in
     <sys/priocntl.h>,  is used by the PC_GETCID and PC_GETCLINFO
     commands.

     id_t   pc_cid;                   /* Class id */
     char   pc_clname[PC_CLNMSZ];     /* Class name */
     int    pc_clinfo[PC_CLINFOSZ];   /* Class information */


     The pc_cid member is a class ID returned by  the  priocntl()
     PC_GETCID command.

     The pc_clname member is a buffer of size PC_CLNMSZ,  defined
     in  <sys/priocntl.h>,  used  to  hold the class name: RT for
     realtime, TS for time-sharing, FX for fixed-priority, or FSS
     for fair-share. Each string is null-terminated.

     The pc_clinfo  member  is  a  buffer  of  size  PC_CLINFOSZ,
     defined  in <sys/priocntl.h>, used to return data describing
     the attributes of a specific class. The format of this  data
     is  class-specific  and  is  described under the appropriate
     heading  (REALTIME  CLASS,  TIME-SHARING  CLASS,  or  FIXED-
     PRIORITY CLASS) below.

     A pcparms_t structure with the following members, defined in
     <sys/priocntl.h>, is used by the PC_SETPARMS and PC_GETPARMS
     commands.

     id_t  pc_cid;                   /* LWP class */
     int   pc_clparms[PC_CLPARMSZ];  /* Class-specific params */


     The pc_cid member is a class ID returned by  the  priocntl()
     PC_GETCID  command.  The special class ID PC_CLNULL can also



SunOS 5.10          Last change: 11 May 2006                    4






System Calls                                          priocntl(2)



     be assigned to pc_cid when using the PC_GETPARMS command  as
     explained below.

     The pc_clparms buffer holds class-specific scheduling param-
     eters.  The  format  of this parameter data for a particular
     class is described  under  the  appropriate  heading  below.
     PC_CLPARMSZ  is  the  length of the pc_clparms buffer and is
     defined in <sys/priocntl.h>.

     The  PC_SETXPARMS  and  PC_GETXPARMS  commands  exploit  the
     varargs  declaration  of  priocntl(). The argument following
     the command code is a class name: RT for  realtime,  TS  for
     time-sharing,  or  FX  for  fixed-priority.  The  parameters
     after the class name build a chain of  (key,  value)  pairs,
     where  the  key   determines the meaning of the value within
     the pair. When using PC_GETXPARMS, the value associated with
     the  key  is always a pointer to a scheduling parameter.  In
     contrast, when using PC_SETXPARMS the  scheduling  parameter
     is given as a direct value.  A key value of 0 terminates the
     sequence and all further keys or values are ignored.

     The PC_SETXPARMS and PC_GETXPARMS commands are more flexible
     thanPC_SETPARMS   and   PC_GETPARMS   and   should   replace
     PC_SETPARMS and PC_GETPARMS on a long-term basis.

COMMANDS
     Available priocntl() commands are:

     PC_ADMIN        This command provides  functionality  needed
                     for  the implementation of the dispadmin(1M)
                     utility. It is not intended for general  use
                     by other applications.



     PC_DONICE       Set or  get  nice  value  of  the  specified
                     LWP(s)   associated   with   the   specified
                     process(es). When this command is used  with
                     the  idtype  of  P_LWPID,  it  sets the nice
                     value of the LWP. The arg argument points to
                     a  structure  of  type  pcnice_t. The pc_val
                     member specifies  the  nice  value  and  the
                     pc_op specifies the type of the operation.

                     When pc_op is set to PC_GETNICE,  priocntl()
                     sets  the  pc_val  to  the  highest priority
                     (lowest numerical value) pertaining  to  any
                     of the specified LWPs.

                     When pc_op is set to PC_SETNICE,  priocntl()
                     sets  the  nice  value  of  all  LWPs in the
                     specified set  to  the  value  specified  in



SunOS 5.10          Last change: 11 May 2006                    5






System Calls                                          priocntl(2)



                     pc_val member of pcnice_t structure.

                     The  priocntl()  function  returns  -1  with
                     errno  set  to  EPERM  if  the  calling  LWP
                     doesn't have appropriate permissions to  set
                     or  get  nice  values for one or more of the
                     target LWPs.  If  priocntl()  encounters  an
                     error  other  than  permissions, it does not
                     continue through the set of target LWPs  but
                     returns the error immediately.



     PC_GETCID       Get class ID  and  class  attributes  for  a
                     specific  class  given  the  class name. The
                     idtype and id arguments are ignored. If  arg
                     is  non-null,  it  points  to a structure of
                     type pcinfo_t. The pc_clname buffer contains
                     the  name  of the class whose attributes you
                     are getting.

                     On success, the  class  ID  is  returned  in
                     pc_cid, the class attributes are returned in
                     the pc_clinfo  buffer,  and  the  priocntl()
                     call  returns  the  total  number of classes
                     configured in the system (including the  sys
                     class).  If the class specified by pc_clname
                     is invalid or is not  currently  configured,
                     the  priocntl()  call  returns -1 with errno
                     set to EINVAL. The format of  the  attribute
                     data  returned  for a given class is defined
                     in          the          <sys/rtpriocntl.h>,
                     <sys/tspriocntl.h>,   or  <sys/fxpriocntl.h>
                     header and described under  the  appropriate
                     heading below.

                     If arg is a null pointer, no attribute  data
                     is  returned  but  the priocntl() call still
                     returns the number of configured classes.



     PC_GETCLINFO    Get class name and class  attributes  for  a
                     specific  class  given  class ID. The idtype
                     and id arguments  are  ignored.  If  arg  is
                     non-null,  it  points to a structure of type
                     pcinfo_t. The pc_cid member is the class  ID
                     of  the  class whose attributes you are get-
                     ting.

                     On success, the class name  is  returned  in
                     the  pc_clname  buffer, the class attributes



SunOS 5.10          Last change: 11 May 2006                    6






System Calls                                          priocntl(2)



                     are returned in the  pc_clinfo  buffer,  and
                     the priocntl() call returns the total number
                     of classes configured in the system (includ-
                     ing the sys class). The format of the attri-
                     bute data returned  for  a  given  class  is
                     defined     in    the    <sys/rtpriocntl.h>,
                     <sys/tspriocntl.h>,  or   <sys/fxpriocntl.h>
                     header  and  described under the appropriate
                     heading below.

                     If arg is a null pointer, no attribute  data
                     is  returned  but  the priocntl() call still
                     returns the number of configured classes.



     PC_GETPARMS     Get the class and/or class-specific schedul-
                     ing  parameters  of  an  LWP. The arg member
                     points to a structure of type pcparms_t.

                     If pc_cid specifies a configured class and a
                     single LWP belonging to that class is speci-
                     fied  by the idtype and  id  values  or  the
                     procset   structure,   then  the  scheduling
                     parameters of that LWP are returned  in  the
                     pc_clparms buffer. If the LWP specified does
                     not exist or does not belong to  the  speci-
                     fied  class,  the priocntl() call returns -1
                     with errno set to ESRCH.

                     If pc_cid specifies a configured class and a
                     set  of  LWPs  is  specified, the scheduling
                     parameters  of  one  of  the  specified  LWP
                     belonging   to   the   specified  class  are
                     returned in the pc_clparms  buffer  and  the
                     priocntl()  call  returns  the process ID of
                     the selected LWP. The criteria for selecting
                     an  LWP  to  return  in  this case is class-
                     dependent. If none  of  the  specified  LWPs
                     exist  or  none of them belong to the speci-
                     fied class, the priocntl() call  returns  -1
                     with errno set to ESRCH.

                     If pc_cid is PC_CLNULL and a single  LWP  is
                     specified, the class of the specified LWP is
                     returned in pc_cid and its scheduling param-
                     eters are returned in the pc_clparms buffer.



     PC_GETXPARMS    Get the class or  class-specific  scheduling
                     parameters  of an LWP. The class name (first



SunOS 5.10          Last change: 11 May 2006                    7






System Calls                                          priocntl(2)



                     argument after PC_GETXPARMS)  specifies  the
                     class  and  the  (key,  value) pair sequence
                     contains a  pointer  to  the  class-specific
                     parameters.  The  keys  and the types of the
                     class-specific parameter data  are described
                     below  and  can  also be found in the class-
                     specific     headers     <sys/rtpriocntl.h>,
                     <sys/tspriocntl.h>,  and <sys/fxpriocntl.h>.
                     If the specified class is a configured class
                     and  a single LWP belonging to that class is
                     specified by the idtype and id values or the
                     procset   structure,   then  the  scheduling
                     parameters of that LWP are returned  in  the
                     given  (key, value) pair buffers. If the LWP
                     specified does not exist or does not  belong
                     to  the  specified class, priocntl() returns
                     -1 and errno is set to ESRCH.

                     If the class  name  specifies  a  configured
                     class  and  a  set  of  LWPs  is  given, the
                     scheduling parameters of one of  the  speci-
                     fied  LWPs  belonging to the specified class
                     are returned and the priocntl() call returns
                     the process ID of the selected LWP. The cri-
                     teria for selecting an LWP to return in this
                     case  is  class-dependent.  If  none  of the
                     specified LWPs exist or none of them  belong
                     to  the  specified class, priocntl() returns
                     -1 and errno is set to ESRCH.

                     If the class name is a null pointer, a  sin-
                     gle process or LWP is specified, and a (key,
                     value) pair for  a  class  name  request  is
                     given,  priocntl()  fills the buffer pointed
                     to by value  with  the  class  name  of  the
                     specified  process  or  LWP. The key for the
                     class name  request is PC_KY_CLNAME and  the
                     class name buffer should be declared as:


                     char   pc_clname[PC_CLNMSZ];     /* Class name */



     PC_SETPARMS     Set the class and class-specific  scheduling
                     parameters  of  the specified LWP(s) associ-
                     ated with the  specified  process(es).  When
                     this  command  is  used  with the  idtype of
                     P_LWPID, it will set the  class  and  class-
                     specific  scheduling  parameters of the LWP.
                     The arg argument points to  a  structure  of
                     type  pcparms_t. The pc_cid member specifies



SunOS 5.10          Last change: 11 May 2006                    8






System Calls                                          priocntl(2)



                     the class you are setting and the pc_clparms
                     buffer  contains  the class-specific parame-
                     ters you are setting.   The  format  of  the
                     class-specific  parameter data is defined in
                     the <sys/rtpriocntl.h>,  <sys/tspriocntl.h>,
                     or  <sys/fxpriocntl.h>  header and described
                     under the appropriate class heading below.

                     When setting parameters for a set  of  LWPs,
                     priocntl() acts on the LWPs in the set in an
                     implementation-specific order. If priocntl()
                     encounters  an  error for one or more of the
                     target processes, it might or might not con-
                     tinue  through the set of LWPs, depending on
                     the nature of the error.  If  the  error  is
                     related  to  permissions (EPERM), priocntl()
                     continues through the LWP set, resetting the
                     parameters for all target LWPs for which the
                     calling  LWP  has  appropriate  permissions.
                     The priocntl() function then returns -1 with
                     errno set to  EPERM  to  indicate  that  the
                     operation failed for one or more of the tar-
                     get LWPs. If priocntl() encounters an  error
                     other than permissions, it does not continue
                     through the set of target LWPs  but  returns
                     the error immediately.



     PC_SETXPARMS    Set the class and class-specific  scheduling
                     parameters  of the specified LWP(s)  associ-
                     ated with the  specified  process(es).  When
                     this command is used with P_LWPID as idtype,
                     it will set  the  class  and  class-specific
                     scheduling  parameters of the LWP. The class
                     name  (first  argument  after  PC_SETXPARMS)
                     specifies  the  class  to be changed and the
                     following (key, value)  pair  sequence  con-
                     tains  the  class-specific  parameters to be
                     changed. Only those (key,value) pairs  whose
                     scheduling  behavior  is  to  change must be
                     specified. The keys and  the  types  of  the
                     class-specific  parameter data are described
                     below and can also be found  in  the  class-
                     specific  header  files  <sys/rtpriocntl.h>,
                     <sys/tspriocntl.h>, and <sys/fxpriocntl.h>.

                     When setting parameters for a set  of  LWPs,
                     priocntl() acts on the LWPs in the set in an
                     implementation-specific order. If priocntl()
                     encounters  an  error for one or more of the
                     target processes,  it  might  or  might  not



SunOS 5.10          Last change: 11 May 2006                    9






System Calls                                          priocntl(2)



                     continue  through the set of LWPs, depending
                     on the nature of the error. If the error  is
                     related  to  permissions (EPERM), priocntl()
                     continues to reset the  parameters  for  all
                     target   LWPs  where  the  calling  LWP  has
                     appropriate  permissions.   The   priocntl()
                     function  returns  -1  and  errno  is set to
                     EPERM when the operation failed for  one  or
                     more  of  the  target LWPs. All errors other
                     than EPERM result in an  immediate  termina-
                     tion of priocntl().



REALTIME CLASS
     The realtime class  provides  a  fixed  priority  preemptive
     scheduling  policy  for those LWPS requiring fast and deter-
     ministic response and absolute user/application  control  of
     scheduling  priorities.  If the realtime class is configured
     in the system, it  should  have  exclusive  control  of  the
     highest  range  of scheduling priorities on the system. This
     ensures that a runnable realtime LWP is  given  CPU  service
     before any LWP belonging to any other class.

     The realtime class has a range of realtime priority (rt_pri)
     values  that  can  be  assigned  to an LWP within the class.
     Realtime priorities range from 0 to x, where the value of  x
     is configurable and can be determined for a specific instal-
     lation by using the  priocntl()  PC_GETCID  or  PC_GETCLINFO
     command.

     The realtime scheduling policy is a fixed  priority  policy.
     The  scheduling  priority of a realtime LWP is never changed
     except  as  the  result  of  an  explicit  request  by   the
     user/application to change the rt_pri value of the LWP.

     For an LWP in the realtime class, the rt_pri value  is,  for
     all  practical purposes, equivalent to the scheduling prior-
     ity of the LWP. The rt_pri value completely  determines  the
     scheduling priority of a realtime LWP relative to other LWPs
     within its class. Numerically higher rt_pri values represent
     higher  priorities.  Since  the  realtime class controls the
     highest range of scheduling priorities in the system, it  is
     guaranteed  that  the runnable realtime LWP with the highest
     rt_pri value is always selected to run before any other LWPs
     in the system.

     In addition to providing control over  priority,  priocntl()
     provides  for  control  over  the length of the time quantum
     allotted to the LWP in the realtime class. The time  quantum
     value  specifies  the  maximum amount of time an LWP can run
     assuming that it does not complete or enter  a  resource  or



SunOS 5.10          Last change: 11 May 2006                   10






System Calls                                          priocntl(2)



     event wait state (sleep). If another LWP becomes runnable at
     a higher  priority,  the  currently  running  LWP  might  be
     preempted before receiving its full time quantum.

     The realtime quantum signal can be used for the notification
     of runaway realtime processes about the consumption of their
     time quantum. Those processes, which are  monitored  by  the
     realtime  time quantum signal, receive the configured signal
     in the event of time quantum expiration. The  default  value
     (0)  of  the  time  quantum  signal  will  denote  no signal
     delivery and a positive value will denote  the  delivery  of
     the signal specified by the value. The realtime quantum sig-
     nal can be set with the priocntl() PC_SETXPARMS command  and
     displayed   with  the  priocntl()  PC_GETXPARMS  command  as
     explained below.

     The system's process scheduler keeps the  runnable  realtime
     LWPs  on  a  set  of  scheduling queues. There is a separate
     queue for each configured realtime priority and all realtime
     LWPs  with  a  given  rt_pri  value are kept together on the
     appropriate queue. The LWPs on a given queue are ordered  in
     FIFO  order  (that is, the LWP at the front of the queue has
     been waiting  longest  for  service  and  receives  the  CPU
     first). Realtime LWPs that wake up after sleeping, LWPs that
     change to the realtime class from  some  other  class,  LWPs
     that  have  used  their full time quantum, and runnable LWPs
     whose priority is reset by priocntl() are all placed at  the
     back  of  the  appropriate  queue for their priority. An LWP
     that is preempted by a higher priority LWP  remains  at  the
     front  of  the queue (with whatever time is remaining in its
     time quantum) and runs before any other LWP at  this  prior-
     ity.  Following  a  fork(2) function call by a realtime LWP,
     the parent LWP continues to run while the child  LWP  (which
     inherits its parent's rt_pri value) is placed at the back of
     the queue.

     A rtinfo_t structure with the following members, defined  in
     <sys/rtpriocntl.h>,  defines  the format used for the attri-
     bute data for the realtime class.

     short    rt_maxpri;      /* Maximum realtime priority */


     The priocntl() PC_GETCID and  PC_GETCLINFO  commands  return
     realtime  class  attributes  in the pc_clinfo buffer in this
     format.

     The rt_maxpri member specifies the configured maximum rt_pri
     value  for  the realtime class. If rt_maxpri is x, the valid
     realtime priorities range from 0 to x.





SunOS 5.10          Last change: 11 May 2006                   11






System Calls                                          priocntl(2)



     A rtparms_t structure with the following members, defined in
     <sys/rtpriocntl.h>,  defines  the format used to specify the
     realtime class-specific scheduling parameters of an LWP.

     short    rt_pri;       /* Real-Time priority */
     uint_t   rt_tqsecs;    /* Seconds in time quantum */
     int      rt_tqnsecs;   /* Additional nanoseconds in quantum */


     When using the priocntl() PC_SETPARMS  or  PC_GETPARMS  com-
     mands,  if  pc_cid specifies the realtime class, the data in
     the pc_clparms buffer are in this format.

     These commands can be used to set the realtime  priority  to
     the specified value or get the current rt_pri value. Setting
     the rt_pri value of an LWP  that  is  currently  running  or
     runnable  (not  sleeping) causes the LWP to be placed at the
     back of the scheduling queue for the specified priority. The
     LWP  is  placed at the back of the appropriate queue regard-
     less of whether the priority being set is different from the
     previous  rt_pri  value of the LWP. A running LWP can volun-
     tarily release the CPU and go to the back of the  scheduling
     queue  at the same priority by resetting its rt_pri value to
     its current realtime priority  value.  To  change  the  time
     quantum  of an LWP without setting the priority or affecting
     the LWP's position on the queue, the rt_pri member should be
     set   to   the   special   value   RT_NOCHANGE,  defined  in
     <sys/rtpriocntl.h>. Specifying RT_NOCHANGE when changing the
     class of an LWP to realtime from some other class results in
     the realtime priority being set to 0.

     For the priocntl() PC_GETPARMS command, if pc_cid  specifies
     the  realtime class and more than one realtime LWP is speci-
     fied, the scheduling parameters of the realtime LWP with the
     highest  rt_pri  value among the specified LWPs are returned
     and the LWP ID of this LWP is  returned  by  the  priocntl()
     call.  If  there  is  more  than one LWP sharing the highest
     priority, the one returned is implementation-dependent.

     The rt_tqsecs and rt_tqnsecs members are used for getting or
     setting  the time quantum associated with an LWP or group of
     LWPs. rt_tqsecs is the number of seconds in the time quantum
     and  rt_tqnsecs  is  the number of additional nanoseconds in
     the  quantum.  For  example,  setting  rt_tqsecs  to  2  and
     rt_tqnsecs  to  500,000,000 (decimal) would result in a time
     quantum of two and one-half seconds. Specifying a  value  of
     1,000,000,000 or greater in the rt_tqnsecs member results in
     an error return with errno set to EINVAL. Although the reso-
     lution  of  the  tq_nsecs member is very fine, the specified
     time quantum length is rounded up by the system to the  next
     integral multiple of the system clock's resolution. The max-
     imum time quantum that can be specified  is  implementation-



SunOS 5.10          Last change: 11 May 2006                   12






System Calls                                          priocntl(2)



     specific  and  equal to INT_MAX1 ticks. The INT_MAX value is
     defined in <limits.h>. Requesting  a  quantum  greater  than
     this  maximum  results  in an error return with errno set to
     ERANGE, although infinite quantums can be requested using  a
     special  value as explained below. Requesting a time quantum
     of 0 by setting both rt_tqsecs and rt_tqnsecs to  0  results
     in an error return with errno set to EINVAL.

     The rt_tqnsecs member can also be set to one of the  follow-
     ing  special  values defined in <sys/rtpriocntl.h>, in which
     case the value of rt_tqsecs is ignored:

     RT_TQINF        Set an infinite time quantum.



     RT_TQDEF        Set the time quantum to the default for this
                     priority (see rt_dptbl(4)).



     RT_NOCHANGE     Do not set the time quantum. This  value  is
                     useful  when you wish to change the realtime
                     priority of an  LWP  without  affecting  the
                     time  quantum.  Specifying  this  value when
                     changing the class of  an  LWP  to  realtime
                     from  some  other  class  is  equivalent  to
                     specifying RT_TQDEF.



     When using the priocntl() PC_SETXPARMS or PC_GETXPARMS  com-
     mands, the first argument after the command code must be the
     class name of the realtime class (RT) . The  next  arguments
     are formed as (key, value) pairs, terminated by a 0 key. The
     definition for the keys of the realtime class can  be  found
     in  <sys/rtpriocntl.h>. A repeated specification of the same
     key results in an error return and errno set to EINVAL.

     _______________________________________________________________
    | Key            | Value Type  | Description                   |
    |________________|_____________|_______________________________|
    | RT_KY_PRI      | pri_t       | realtime priority             |
    |________________|_____________|_______________________________|
    | RT_KY_TQSECS   | uint_t      | seconds in time quantum       |
    |________________|_____________|_______________________________|
    | RT_KY_TQNSECS  | int         | nanoseconds in time quantum   |
    |________________|_____________|_______________________________|
    | RT_KY_TQSIG    | int         | realtime time quantum signal  |
    |________________|_____________|_______________________________|





SunOS 5.10          Last change: 11 May 2006                   13






System Calls                                          priocntl(2)



     When using the priocntl() PC_GETXPARMS  command,  the  value
     associated  with the key is always a pointer to a scheduling
     parameter of the value type shown in  the  table  above.  In
     contrast,  when  using  the priocntl() PC_SETXPARMS command,
     the scheduling parameter is given as a  direct value.

     A priocntl() PC_SETXPARMS command with the class  name  (RT)
     and  without a following (key, value) pair will set or reset
     all realtime scheduling parameters of the target process(es)
     to  their  default  values.  Changing the class of an LWP to
     realtime from some other class causes the parameters  to  be
     set  to  their default values. The default realtime priority
     (RT_KY_PRI) is 0.  A  default  time  quantum  (RT_TQDEF)  is
     assigned  to  each  priority  class  (see  rt_dptbl(4)). The
     default realtime time quantum signal (RT_KY_TQSIG) is 0.

     The value associated with  RT_KY_TQSECS  is  the  number  of
     seconds  in  the  time  quantum.  The  value associated with
     RT_KY_TQNSECS is the number of nanoseconds in  the  quantum.
     Specifying  a  value  of  1,000,000,000  or  greater for the
     number of nanoseconds results in an error return  and  errno
     is  set  to EINVAL. The specified time quantum is rounded up
     by the system to the next integral multiple  of  the  system
     clock's  resolution.  The  maximum  time quantum that can be
     specified is implementation-specific and  equal  to  INT_MAX
     ticks,  defined  in <limits.h>. Requesting a quantum greater
     than this maximum results in an error return  and  errno  is
     set  to ERANGE. If seconds (RT_KY_TQSECS) but no nanoseconds
     (RT_KY_TQNSECS) are supplied, the number of  nanoseconds  is
     set  to  0.  If  nanoseconds  (RT_KY_TQNSECS) but no seconds
     (RT_KY_TQSECS) are supplied, the  number of seconds  is  set
     to  0.  A  time quantum of 0 (seconds and nanoseconds are 0)
     results in an error return with errno set to EINVAL. Special
     values  for  RT_KY_TQSECS  are  RT_TQINF  and  RT_TQDEF  (as
     described above). The priocntl() command PC_SETXPARMS  knows
     no special value RT_NOCHANGE.

     To change the class of an LWP to  realtime  from  any  other
     class,  the  LWP  invoking  priocntl()  must have sufficient
     privileges. To change the priority or time  quantum  setting
     of  a  realtime  LWP,  the LWP invoking priocntl() must have
     sufficient privileges or must itself be a realtime LWP whose
     real or effective user ID matches the real of effective user
     ID of the target LWP.

     The realtime priority and time quantum are inherited  across
     fork(2)  and  the  exec  family of functions. When using the
     time quantum  signal  with  a  user-defined  signal  handler
     across  the  exec  functions,  the new image must install an
     appropriate user-defined  signal  handler  before  the  time
     quantum  expires.  Otherwise,  unpredictable  behavior might
     result.



SunOS 5.10          Last change: 11 May 2006                   14






System Calls                                          priocntl(2)



TIME-SHARING CLASS
     The time-sharing scheduling policy provides for a  fair  and
     effective  allocation  of  the  CPU resource among LWPs with
     varying CPU consumption characteristics. The  objectives  of
     the time-sharing policy are to provide good response time to
     interactive LWPs and  good  throughput  to  CPU-bound  jobs,
     while  providing  a  degree of user/application control over
     scheduling.

     The time-sharing class has  a  range  of  time-sharing  user
     priority  (see ts_upri below) values that can be assigned to
     LWPs within the class. A ts_upri value of 0  is  defined  as
     the  default  base priority for the time-sharing class. User
     priorities range from -x to +x where the value of x is  con-
     figurable  and can be determined for a specific installation
     by using the priocntl() PC_GETCID or PC_GETCLINFO command.

     The purpose of the user priority is to provide  some  degree
     of  user/application  control over the scheduling of LWPs in
     the time-sharing class.  Raising  or  lowering  the  ts_upri
     value  of  an LWP in the time-sharing class raises or lowers
     the scheduling priority of the LWP. It  is  not  guaranteed,
     however,  that  an  LWP with a higher ts_upri value will run
     before one with a lower ts_upri  value,  since  the  ts_upri
     value  is  just  one factor used to determine the scheduling
     priority of a time-sharing LWP. The system  can  dynamically
     adjust  the  internal  scheduling priority of a time-sharing
     LWP based on other factors such as recent CPU usage.

     In addition to  the  system-wide  limits  on  user  priority
     (returned  by the PC_GETCID and PC_GETCLINFO commands) there
     is a per LWP user  priority  limit  (see  ts_uprilim  below)
     specifying  the  maximum ts_upri value that can be set for a
     given LWP. By default, ts_uprilim is 0.

     A tsinfo_t structure with the following members, defined  in
     <sys/tspriocntl.h>,  defines  the format used for the attri-
     bute data for the time-sharing class.

     short    ts_maxupri;     /* Limits of user priority range */


     The priocntl() PC_GETCID and  PC_GETCLINFO  commands  return
     time-sharing  class  attributes  in  the pc_clinfo buffer in
     this format.

     The ts_maxupri member specifies the configured maximum  user
     priority  value for the time-sharing class. If ts_maxupri is
     x, the valid range for both user priorities and user  prior-
     ity limits is from -x to +x.





SunOS 5.10          Last change: 11 May 2006                   15






System Calls                                          priocntl(2)



     A tsparms_t structure with the following members, defined in
     <sys/tspriocntl.h>,  defines  the format used to specify the
     time-sharing class-specific scheduling parameters of an LWP.

     short    ts_uprilim;     /* Time-Sharing user priority limit */
     short    ts_upri;        /* Time-Sharing user priority */


     When using the priocntl() PC_SETPARMS  or  PC_GETPARMS  com-
     mands,  if pc_cid specifies the time-sharing class, the data
     in the pc_clparms buffer is in this format.

     For the priocntl() PC_GETPARMS command, if pc_cid  specifies
     the time-sharing class and more than one time-sharing LWP is
     specified, the scheduling parameters of the time-sharing LWP
     with  the  highest ts_upri value among the specified LWPs is
     returned and the LWP ID of  this  LWP  is  returned  by  the
     priocntl()  call.  If there is more than one LWP sharing the
     highest user priority, the one returned  is  implementation-
     dependent.

     Any time-sharing LWP can lower its own ts_uprilim  (or  that
     of  another  LWP with the same user ID). Only a time-sharing
     LWP with sufficient privileges can raise a ts_uprilim.  When
     changing the class of an LWP to time-sharing from some other
     class, sufficient privileges are required to set the initial
     ts_uprilim  to  a  value  greater  than  0.  Attempts  by an
     unprivileged LWP to raise a ts_uprilim  or  set  an  initial
     ts_uprilim greater than 0 fail with a return value of -1 and
     errno set to EPERM.

     Any time-sharing LWP can set its own  ts_upri  (or  that  of
     another LWP with the same user ID) to any value less than or
     equal to the LWP's ts_uprilim. Attempts to set  the  ts_upri
     above  the  ts_uprilim  (and/or set the ts_uprilim below the
     ts_upri) result in  the  ts_upri  being  set  equal  to  the
     ts_uprilim.

     Either of the ts_uprilim or ts_upri members can  be  set  to
     the     special     value     TS_NOCHANGE,     defined    in
     <sys/tspriocntl.h>, to set one of the values without affect-
     ing  the  other. Specifying TS_NOCHANGE for the ts_upri when
     the ts_uprilim is being set to a  value  below  the  current
     ts_upri causes the ts_upri to be set equal to the ts_uprilim
     being set.  Specifying  TS_NOCHANGE  for  a  parameter  when
     changing  the  class  of  an  LWP to time-sharing (from some
     other class) causes the parameter to be  set  to  a  default
     value.  The  default  value  for the ts_uprilim is 0 and the
     default for the ts_upri is to set it equal to the ts_uprilim
     that is being set.





SunOS 5.10          Last change: 11 May 2006                   16






System Calls                                          priocntl(2)



     When using the priocntl() PC_SETXPARMS or PC_GETXPARMS  com-
     mands,  the  first  argument  after  the command code is the
     class name of the  time-sharing class (TS) . The next  argu-
     ments  are  formed  as (key, value) pairs, terminated by a 0
     key. The definition for the keys of the  time-sharing  class
     can  be  found in  <sys/tspriocntl.h>. A repeated specifica-
     tion of the same key results in an error  return  and  errno
     set to EINVAL.

     _______________________________________________________________
    | Key            | Value Type  | Description                   |
    |________________|_____________|_______________________________|
    | TS_KY_UPRILIM  | pri_t       | user priority limit           |
    |________________|_____________|_______________________________|
    | TS_KY_UPRI     | pri_t       | user priority                 |
    |________________|_____________|_______________________________|


     When using the priocntl() PC_GETXPARMS  command,  the  value
     associated  with the key is always a pointer to a scheduling
     parameter of the value type in the table above. In contrast,
     when using the priocntl() PC_SETXPARMS command, the schedul-
     ing parameter is given as a direct value.

     A priocntl() PC_SETXPARMS command with the class  name  (TS)
     and  without a following (key, value) pair will set or reset
     all  time-sharing  scheduling  parameters  of   the   target
     process(es)  to  their default values. Changing the class of
     an LWP to time-sharing from  some  other  class  causes  the
     parameters  to  be  set to their default values. The default
     value for the user priority limit (TS_KY_UPRILIM) is 0.  The
     default value for the user priority (TS_KY_UPRI) is equal to
     the user priority limit (TS_KY_UPRILIM) that is being set.

     The priocntl() command PC_SETXPARMS knows no  special  value
     TS_NOCHANGE.

     The time-sharing user priority and user priority  limit  are
     inherited across fork() and the exec family of functions.

FAIR-SHARE CLASS
     The fair-share scheduling policy provides a fair  allocation
     of  CPU  resources among projects, independent of the number
     of processes they contain. Projects are  given  "shares"  to
     control  their  quota  of CPU resources. See FSS(7) for more
     information about how to configure shares.

     The fair share class supports the  notion  of  per-LWP  user
     priority  (see fss_upri below) values for compatibility with
     the time-sharing scheduling class. An fss_upri value of 0 is
     defined  as  the  default  base  priority for the fair-share
     class. User priorities range from -x to +x where  the  value



SunOS 5.10          Last change: 11 May 2006                   17






System Calls                                          priocntl(2)



     of  x  is  configurable and can be determined for a specific
     installation  by   using   the   priocntl()   PC_GETCID   or
     PC_GETCLINFO command.

     The purpose of the user priority is to provide  some  degree
     of  user/application  control over the scheduling of LWPs in
     the fair-share class. Raising the fss_upri value of  an  LWP
     in the fair-share class tells the scheduler to give this LWP
     more CPU time slices,  while  lowering  the  fss_upri  value
     tells  the  scheduler  to give it less CPU slices. It is not
     guaranteed, however, that an  LWP  with  a  higher  fss_upri
     value  will run before one with a lower fss_upri value. This
     is because the fss_upri value is just  one  factor  used  to
     determine  the  scheduling priority of a fair-share LWP. The
     system can dynamically adjust the internal scheduling prior-
     ity  of  a  fair-share  LWP  based  on other factors such as
     recent CPU usage. The fair-share scheduler attempts to  pro-
     vide  an evenly graded effect across the whole range of user
     priority values.

     User priority values do not interfere with  project  shares.
     That  is,  changing  a user priority value of a process does
     not have any effect on its project CPU entitlement, which is
     based  on the number of shares it is allocated in comparison
     with other projects.

     In addition to  the  system-wide  limits  on  user  priority
     (returned by the PC_GETCID and PC_GETCLINFO commands), there
     is a per-LWP user priority  limit  (see  fss_uprilim  below)
     that  specifies  the  maximum fss_upri value that can be set
     for a given LWP. By default, fss_uprilim is 0.

     A fssinfo_t structure with the following members, defined in
     <sys/fsspriocntl.h>, defines  the format used for the attri-
     bute data for the fair-share class.

     short    fss_maxupri;    /* Limits of user priority range */


     The priocntl() PC_GETCID and  PC_GETCLINFO  commands  return
     fair-share  class attributes in the pc_clinfo buffer in this
     format.

     fss_maxupri specifies the configured maximum  user  priority
     value  for  the  fair-share  class. If fss_maxupri is x, the
     valid range for both user priorities and user priority  lim-
     its is from -x to +x.

     A fssparms_t structure with the following  members,  defined
     in  <sys/fsspriocntl.h>,  defines the format used to specify
     the fair-share class-specific scheduling  parameters  of  an
     LWP.



SunOS 5.10          Last change: 11 May 2006                   18






System Calls                                          priocntl(2)



     short    fss_uprilim;   /* Fair-share user priority limit */
     short    fss_upri;      /* Fair-share user priority */


     When using the priocntl() PC_SETPARMS  or  PC_GETPARMS  com-
     mands, if pc_cid specifies the fair-share class, the data in
     the pc_clparms buffer is in this format.

     For the priocntl() PC_GETPARMS command, if pc_cid  specifies
     the  fair-share  class  and  more than one fair-share LWP is
     specified, the scheduling parameters of the  fair-share  LWP
     with  the highest fss_upri value among the specified LWPs is
     returned and the LWP ID of  this  LWP  is  returned  by  the
     priocntl()  call.  If there is more than one LWP sharing the
     highest user priority, the one returned  is  implementation-
     dependent.

     Any fair-share LWP can lower its own fss_uprilim (or that of
     another  LWP  with  the same user ID). Only a fair-share LWP
     with sufficient privileges can raise  an  fss_uprilim.  When
     changing  the  class of an LWP to fair-share from some other
     class, sufficient privileges are required to enter  the  FSS
     class  or  to set the initial fss_uprilim to a value greater
     than  0.  Attempts  by  an  unprivileged  LWP  to  raise  an
     fss_uprilim  or  set  an  initial fss_uprilim greater than 0
     fail with a return value of -1 and errno set to EPERM.

     Any fair-share LWP can set its  own  fss_upri  (or  that  of
     another LWP with the same user ID) to any value less than or
     equal to the LWP's fss_uprilim. Attempts to set the fss_upri
     above  the fss_uprilim (and/or set the fss_uprilim below the
     fss_upri) result in the fss_upri  being  set  equal  to  the
     fss_uprilim.

     Either of the fss_uprilim or fss_upri members can be set  to
     the     special     value     FSS_NOCHANGE    (defined    in
     <sys/fsspriocntl.h>)  to  set  one  of  the  values  without
     affecting   the   other.  Specifying  FSS_NOCHANGE  for  the
     fss_upri when the fss_uprilim is being set to a value  below
     the  current fss_upri causes the fss_upri to be set equal to
     the fss_uprilim being set.  Specifying  FSS_NOCHANGE  for  a
     parameter  when  changing  the class of an LWP to fair-share
     (from some other class) causes the parameter to be set to  a
     default  value.  The  default value for the fss_uprilim is 0
     and the default for the fss_upri is to set it equal  to  the
     fss_uprilim which is being set.

     The fair-share user priority and  user  priority  limit  are
     inherited across fork() and the exec family of functions.

FIXED-PRIORITY CLASS




SunOS 5.10          Last change: 11 May 2006                   19






System Calls                                          priocntl(2)



     The fixed-priority class provides a  fixed-priority  preemp-
     tive  scheduling  policy  for  those LWPs requiring that the
     scheduling priorities do not get dynamically adjusted by the
     system  and  that  the  user/application have control of the
     scheduling priorities.

     The fixed-priority class has a range of fixed-priority  user
     priority  (see fx_upri below) values that can be assigned to
     LWPs within the class. A fx_upri value of 0  is  defined  as
     the default base priority for the fixed-priority class. User
     priorities range from 0 to x where the value of x is  confi-
     gurable and can be determined for a specific installation by
     using the priocntl() PC_GETCID or PC_GETCLINFO command.

     The  purpose  of   the   user   priority   is   to   provide
     user/application control over the scheduling of processes in
     the  fixed-priority  class.  For  processes  in  the  fixed-
     priority class, the fx_upri value is, for all practical pur-
     poses, equivalent to the scheduling priority of the process.
     The  fx_upri  value  completely  determines  the  scheduling
     priority of  a  fixed-priority  process  relative  to  other
     processes  within  its  class.  Numerically  higher  fx_upri
     values represent higher priorities.

     In addition to  the  system-wide  limits  on  user  priority
     (returned by the PC_GETCID and PC_GETCLINFO commands), there
     is a per-LWP user priority limit (see fx_uprilim below) that
     specifies  the  maximum  fx_upri value that can be set for a
     given LWP. By default, fx_uprilim is 0.

     A  structure  with  the   following   member   (defined   in
     <sys/fxpriocntl.h>)  defines  the format used for the attri-
     bute data for the fixed-priority class.

     pri_t   fx_maxupri;      /* Maximum user priority */


     The priocntl() PC_GETCID and  PC_GETCLINFO  commands  return
     fixed-priority  class  attributes in the pc_clinfo buffer in
     this format.

     The fx_maxupri member specifies the configured maximum  user
     priority  value  for the fixed-priority class. If fx_maxupri
     is x, the valid range for  both  user  priorities  and  user
     priority limits is from 0 to x.

     A  structure  with  the  following   members   (defined   in
     <sys/fxpriocntl.h>)  defines  the format used to specify the
     fixed-priority class-specific scheduling  parameters  of  an
     LWP.

     pri_t    fx_upri;     /* Fixed-priority user priority */



SunOS 5.10          Last change: 11 May 2006                   20






System Calls                                          priocntl(2)



     pri_t    fx_uprilim;  /* Fixed-priority user priority limit */
     uint_t   fx_tqsecs;   /* seconds in time quantum */
     int      fx_tqnsecs;  /* additional nanosecs in time quant */


     When using the priocntl() PC_SETPARMS  or  PC_GETPARMS  com-
     mands,  if  pc_cid  specifies  the fixed-priority class, the
     data in the pc_clparms buffer is in this format.

     For the priocntl() PC_GETPARMS command, if pc_cid  specifies
     the  fixed-priority  class  and more than one fixed-priority
     LWP is specified, the scheduling parameters  of  the  fixed-
     priority LWP with the highest fx_upri value among the speci-
     fied LWPs is returned and the LWP ID of this LWP is returned
     by  the priocntl() call. If there is more than one LWP shar-
     ing  the  highest  user  priority,  the  one   returned   is
     implementation-dependent.

     Any fixed-priority LWP can lower its own fx_uprilim (or that
     of another LWP with the same user ID). Only a fixed-priority
     LWP with sufficient privileges can raise a fx_uprilim.  When
     changing  the  class  of  an LWP to fixed-priority from some
     other class, sufficient privileges are required to  set  the
     initial fx_uprilim to a value greater than 0. Attempts by an
     unprivileged LWP to raise a fx_uprilim  or  set  an  initial
     fx_uprilim greater than 0 fail with a return value of -1 and
     errno set to EPERM.

     Any fixed-priority LWP can set its own fx_upri (or  that  of
     another LWP with the same user ID) to any value less than or
     equal to the LWP's fx_uprilim. Attempts to set  the  fx_upri
     above  the  fx_uprilim  (and/or set the fx_uprilim below the
     fx_upri) result in  the  fx_upri  being  set  equal  to  the
     fx_uprilim.

     Either of the fx_uprilim or fx_upri members can  be  set  to
     the     special     value     FX_NOCHANGE     (defined    in
     <sys/fxpriocntl.h>) to set one of the values without affect-
     ing  the  other. Specifying FX_NOCHANGE for the fx_upri when
     the fx_uprilim is being set to a  value  below  the  current
     fx_upri causes the fx_upri to be set equal to the fx_uprilim
     being set.  Specifying  FX_NOCHANGE  for  a  parameter  when
     changing  the  class  of an LWP to fixed-priority (from some
     other class) causes the parameter to be  set  to  a  default
     value.  The  default  value  for the fx_uprilim is 0 and the
     default for the fx_upri is to set it equal to the fx_uprilim
     that is being set. The default for time quantum is dependent
     on  the  fx_upri  and  on  the  system  configuration;   see
     fx_dptbl(4).

     The fx_tqsecs and fx_tqnsecs members are used for getting or
     setting  the time quantum associated with an LWP or group of



SunOS 5.10          Last change: 11 May 2006                   21






System Calls                                          priocntl(2)



     LWPs. fx_tqsecs is the number of seconds in the time quantum
     and  fx_tqnsecs  is  the number of additional nanoseconds in
     the  quantum.  For  example,  setting  fx_tqsecs  to  2  and
     fx_tqnsecs  to  500,000,000 (decimal) would result in a time
     quantum of two and one-half seconds. Specifying a  value  of
     1,000,000,000 or greater in the fx_tqnsecs member results in
     an error return with errno set to EINVAL. Although the reso-
     lution  of  the  tq_nsecs member is very fine, the specified
     time quantum length is rounded up by the system to the  next
     integral multiple of the system clock's resolution. The max-
     imum time quantum that can be specified  is  implementation-
     specific and equal to INT_MAX ticks (defined in <limits.h>).
     Requesting a quantum greater than this maximum results in an
     error  return  with  errno  set to ERANGE, although infinite
     quantums can be requested using a special value as explained
     below.   Requesting  a  time  quantum  of  0  (setting  both
     fx_tqsecs and fx_tqnsecs to 0) results in  an  error  return
     with errno set to EINVAL.

     The fx_tqnsecs member can also be set to one of the  follow-
     ing special values (defined in <sys/fxpriocntl.h>), in which
     case the value of fx_tqsecs is ignored:

     FX_TQINF        Set an infinite time quantum.



     FX_TQDEF        Set the time quantum to the default for this
                     priority (see fx_dptbl(4)).



     FX_NOCHANGE     Do not set the time quantum. This  value  is
                     useful  in  changing the user priority of an
                     LWP  without  affecting  the  time  quantum.
                     Specifying  this  value  when  changing  the
                     class of an LWP to fixed-priority from  some
                     other  class  is  equivalent  to  specifying
                     FX_TQDEF.



     When using the priocntl() PC_SETXPARMS or PC_GETXPARMS  com-
     mands, the first argument after the command code must be the
     class name of the fixed-priority class (FX) . The next argu-
     ments  are  formed  as (key, value) pairs, terminated by a 0
     key. The definition for the keys of the fixed-priority class
     can be found in <sys/fxpriocntl.h>. A repeated specification
     of the same key results in an error return and errno set  to
     EINVAL.





SunOS 5.10          Last change: 11 May 2006                   22






System Calls                                          priocntl(2)



     _______________________________________________________________
    | Key            | Value Type  | Description                   |
    |________________|_____________|_______________________________|
    | FX_KY_UPRILIM  | pri_t       | user priority limit           |
    |________________|_____________|_______________________________|
    | FX_KY_UPRI     | pri_t       | user priority                 |
    |________________|_____________|_______________________________|
    | FX_KY_TQSECS   | uint_t      | seconds in time quantum       |
    |________________|_____________|_______________________________|
    | FX_KY_TQNSECS  | int         | nanoseconds in time quantum   |
    |________________|_____________|_______________________________|


     When using the priocntl() PC_GETXPARMS  command,  the  value
     associated  with the key is always a pointer to a scheduling
     parameter of the value type shown in  the  table  above.  In
     contrast,  when  using  the priocntl() PC_SETXPARMS command,
     the scheduling parameter is given as a direct value.

     A priocntl() PC_SETXPARMS command with the class  name  (FX)
     and  without a following (key, value) pair will set or reset
     all realtime scheduling parameters of the target process(es)
     to  their  default  values.  Changing the class of an LWP to
     fixed-priority from some other class causes  the  parameters
     to be set to their default values. The default value for the
     user priority limit (FX_KY_UPRILIM) is 0. The default  value
     for  the  user  priority  (FX_KY_UPRI)  is equal to the user
     priority limit (FX_KY_UPRILIM) that is being set. A  default
     time  quantum  (FX_TQDEF) is assigned to each priority class
     (see fx_dptbl(4)).

     The value associated with  FX_KY_TQSECS  is  the  number  of
     seconds  in  the  time  quantum.  The  value associated with
     FX_KY_TQNSECS is the number of nanoseconds in  the  quantum.
     Specifying  a  value  of  1,000,000,000  or  greater for the
     number of nanoseconds results in an error return  and  errno
     is  set  to EINVAL. The specified time quantum is rounded up
     by the system to the next integral multiple  of  the  system
     clock's  resolution.  The  maximum  time quantum that can be
     specified is implementation-specific and  equal  to  INT_MAX
     ticks,  defined  in <limits.h>. Requesting a quantum greater
     than this maximum results in an error return  and  errno  is
     set  to ERANGE. If seconds (FX_KY_TQSECS) but no nanoseconds
     (FX_KY_TQNSECS) are supplied, the number of  nanoseconds  is
     set  to  0.  If  nanoseconds  (FX_KY_TQNSECS) but no seconds
     (FX_KY_TQSECS) are supplied, the number of seconds is set to
     0.  A  time  quantum  of  0  (seconds and nanoseconds are 0)
     results in an error return with errno set to EINVAL. Special
     values  for  FX_KY_TQSECS  are  FX_TQINF  and  FX_TQDEF  (as
     described above). The priocntl() command PC_SETXPARMS  knows
     no special value FX_NOCHANGE.




SunOS 5.10          Last change: 11 May 2006                   23






System Calls                                          priocntl(2)



     The fixed-priority user priority and user priority limit are
     inherited across fork(2) and the exec family of functions.

RETURN VALUES
     Unless otherwise noted above, priocntl() returns 0  on  suc-
     cess.  On  failure,  priocntl() returns -1 and sets errno to
     indicate the error.

ERRORS
     The priocntl() function will fail if:

     EAGAIN          An attempt to change the  class  of  an  LWP
                     failed  because  of  insufficient  resources
                     other  than  memory  (for  example,   class-
                     specific kernel data structures).



     EFAULT          One of the arguments points  to  an  illegal
                     address.



     EINVAL          The argument cmd was invalid, an invalid  or
                     unconfigured  class was specified, or one of
                     the parameters specified was invalid.



     ENOMEM          An attempt to change the  class  of  an  LWP
                     failed because of insufficient memory.



     EPERM           The {PRIV_PROC_PRIOCNTL}  privilege  is  not
                     asserted in the effective set of the calling
                     LWP.

                     The calling LWP  does  not  have  sufficient
                     privileges to affect the target LWP.



     ERANGE          The requested time quantum is out of range.



     ESRCH           None of the specified LWPs exist.







SunOS 5.10          Last change: 11 May 2006                   24






System Calls                                          priocntl(2)



SEE ALSO
     priocntl(1),  dispadmin(1M),  init(1M),  exec(2),   fork(2),
     nice(2),     priocntlset(2),     fx_dptbl(4),    process(4),
     rt_dptbl(4), privileges(5)

     System Administration Guide: Basic Administration

     Programming Interfaces Guide















































SunOS 5.10          Last change: 11 May 2006                   25





Man(1) output converted with man2html and wrapped by fishsponge

This page was generated on Wed Sep 12 11:27:04 GMT 2007

Your favourite pages:

No pages logged yet...

Top 10 most popular pages:

prstat man page (24546 hits)
(Solaris 10 11_06)

netcat man page (17695 hits)
(Suse Linux 10.1)

ssh-socks5-proxy-connect man page (13532 hits)
(Solaris 10 11_06)

signal man page (12551 hits)
(Suse Linux 10.1)

startproc man page (11991 hits)
(Suse Linux 10.1)

raidctl man page (11357 hits)
(Solaris 10 11_06)

adv_cap_autoneg man page (10286 hits)
(Solaris 10 11_06)

sqlite3 man page (9729 hits)
(openSUSE 10.2)

CPAN man page (8947 hits)
(Suse Linux 10.1)

BusyBox man page (7702 hits)
(Suse Linux 10.1)

Useful Links

Go Back

Visitor Statistics


Valid XHTML 1.0 Transitional     Valid CSS!

Cambridge Plus :: Pyrenees Mountain Holidays Contact Us :: Digital Electronic Design :: Matchless Piston Rings
Unix Man Pages / Linux Man Pages :: HiFi Forum :: SIP VoIP Phone & Provider Reviews :: UNIX/Linux Forum Archives

More info on advertising on Unix/Linux Forum