mt-streams man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

MT-STREAMS(9F)							MT-STREAMS(9F)

NAME
       mt-streams - STREAMS multithreading

SYNOPSIS
       #include <sys/conf.h>

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

DESCRIPTION
       STREAMS	drivers	 configure the degree of concurrency using the cb_flag
       field in the cb_ops structure (see cb_ops(9S)). The corresponding field
       for STREAMS modules is the f_flag in the fmodsw structure.

       For the purpose of restricting and controlling the concurrency in driv‐
       ers/modules, we define the concepts of inner and	 outer	perimeters.  A
       driver/module  can  be configured either to have no perimeters, to have
       only an inner or an outer perimeter, or to have both an	inner  and  an
       outer  perimeter.  Each	perimeter acts as a readers-writers lock, that
       is, there can be multiple concurrent readers or a single writer.	 Thus,
       each  perimeter	can be entered in two modes: shared (reader) or exclu‐
       sive (writer). The mode depends on the perimeter configuration and  can
       be  different  for  the	different  STREAMS  entry  points  ( open(9E),
       close(9E), put(9E), or srv(9E)).

       The concurrency for the different entry	points	is  (unless  specified
       otherwise)  to  enter  with exclusive access at the inner perimeter (if
       present) and shared access at the outer perimeter (if present).

       The perimeter configuration consists of flags that define the  presence
       and  scope  of the inner perimeter, the presence of the outer perimeter
       (which can only have one scope), and flags that modify the default con‐
       currency for the different entry points.

       All MT safe modules/drivers specify the D_MP flag.

   Inner Perimeter Flags
       The  inner  perimeter presence and scope are controlled by the mutually
       exclusive flags:

       D_MTPERQ
			    The module/driver has an  inner  perimeter	around
			    each queue.

       D_MTQPAIR
			    The	 module/driver	has  an inner perimeter around
			    each read/write pair of queues.

       D_MTPERMOD
			    The module/driver  has  an	inner  perimeter  that
			    encloses all the module's/driver's queues.

       None of the above
			    The module/driver has no inner perimeter.

   Outer Perimeter Flags
       The outer perimeter presence is configured using:

       D_MTOUTPERIM
		       In  addition  to any inner perimeter, the module/driver
		       has an outer  perimeter	that  encloses	all  the  mod‐
		       ule's/driver's  queues.	This  can be combined with all
		       the inner perimeter options except D_MTPERMOD.

       Note that acquiring exclusive access at the outer perimeter  (that  is,
       using qwriter(9F) with the PERIM_OUTER flag) can incur significant per‐
       formance penalties,  which  grow	 linearly  with	 the  number  of  open
       instances of the module or driver in the system.

       The default concurrency can be modified using:

       D_MTPUTSHARED
			This  flag  modifies the default behavior when put(9E)
			procedure are invoked so that the inner	 perimeter  is
			entered shared instead of exclusively.

       D_MTOCEXCL
			This  flag modifies the default behavior when open(9E)
			and close(9E) procedures  are  invoked	so  the	 outer
			perimeter is entered exclusively instead of shared.

			Note  that  drivers  and  modules  using this flag can
			cause significant system performance degradation  dur‐
			ing  stream  open  or close when many instances of the
			driver or module are in use simultaneously.  For  this
			reason,	 use  of  this	flag  is discouraged. Instead,
			since open(9E) and close(9E) both  execute  with  user
			context,  developers are encouraged to use traditional
			synchronization routines such  as  cv_wait_sig(9F)  to
			coordinate  with other open instances of the module or
			driver.

       The module/driver can use qwait(9F) or qwait_sig() in the open(9E)  and
       close(9E) procedures if it needs to wait "outside" the perimeters.

       The  module/driver  can	use  qwriter(9F)  to upgrade the access at the
       inner or outer perimeter from shared to exclusive.

       The use and semantics of qprocson() and qprocsoff(9F) is independent of
       the inner and outer perimeters.

SEE ALSO
       close(9E),  open(9E),  put(9E),	srv(9E),  qprocsoff(9F), qprocson(9F),
       qwait(9F), qwriter(9F), cb_ops(9S)

       STREAMS Programming Guide

       Writing Device Drivers

				  May 5, 2009			MT-STREAMS(9F)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net