1*19c3b8c2SApple OSS Distributions<h2>thread_switch</h2> 2*19c3b8c2SApple OSS Distributions<hr> 3*19c3b8c2SApple OSS Distributions<p> 4*19c3b8c2SApple OSS Distributions<strong>Function</strong> - Cause context switch with options. 5*19c3b8c2SApple OSS Distributions<h3>SYNOPSIS</h3> 6*19c3b8c2SApple OSS Distributions<pre> 7*19c3b8c2SApple OSS Distributions<strong>kern_return_t thread_switch</strong> 8*19c3b8c2SApple OSS Distributions <strong>(mach_port_t</strong> <var>new_thread</var>, 9*19c3b8c2SApple OSS Distributions <strong>int</strong> <var>option</var>, 10*19c3b8c2SApple OSS Distributions <strong>mach_msg_timeout_t</strong> <var>time</var><strong>);</strong> 11*19c3b8c2SApple OSS Distributions</pre> 12*19c3b8c2SApple OSS Distributions<h3>PARAMETERS</h3> 13*19c3b8c2SApple OSS Distributions<dl> 14*19c3b8c2SApple OSS Distributions<p> 15*19c3b8c2SApple OSS Distributions<dt> <var>new_thread</var> 16*19c3b8c2SApple OSS Distributions<dd> 17*19c3b8c2SApple OSS Distributions[in thread send right] 18*19c3b8c2SApple OSS DistributionsThread to which the processor should switch 19*19c3b8c2SApple OSS Distributionscontext. 20*19c3b8c2SApple OSS Distributions<p> 21*19c3b8c2SApple OSS Distributions<dt> <var>option</var> 22*19c3b8c2SApple OSS Distributions<dd> 23*19c3b8c2SApple OSS Distributions[in scalar] 24*19c3b8c2SApple OSS DistributionsOptions applicable to the context switch. 25*19c3b8c2SApple OSS Distributions<p> 26*19c3b8c2SApple OSS Distributions<dt> <var>time</var> 27*19c3b8c2SApple OSS Distributions<dd> 28*19c3b8c2SApple OSS Distributions[in scalar] 29*19c3b8c2SApple OSS DistributionsTime duration during which the thread should be affected by 30*19c3b8c2SApple OSS Distributions<var>option</var>. 31*19c3b8c2SApple OSS Distributions</dl> 32*19c3b8c2SApple OSS Distributions<h3>DESCRIPTION</h3> 33*19c3b8c2SApple OSS Distributions<p> 34*19c3b8c2SApple OSS DistributionsThe <strong>thread_switch</strong> function provides low-level access 35*19c3b8c2SApple OSS Distributionsto the scheduler's 36*19c3b8c2SApple OSS Distributionscontext switching code. <var>new_thread</var> is a hint that implements 37*19c3b8c2SApple OSS Distributionshand-off scheduling. 38*19c3b8c2SApple OSS DistributionsThe operating system will attempt to switch directly to the new thread 39*19c3b8c2SApple OSS Distributions(bypassing the normal logic that selects the next thread to run) 40*19c3b8c2SApple OSS Distributionsif possible. Since this is a hint, it may be incorrect; it is ignored if it 41*19c3b8c2SApple OSS Distributionsdoesn't specify a thread on the same host as the current thread or if 42*19c3b8c2SApple OSS Distributionsthe scheduler cannot switch to that thread (i.e., 43*19c3b8c2SApple OSS Distributionsnot runable or already running on another processor). In this 44*19c3b8c2SApple OSS Distributionscase, the normal 45*19c3b8c2SApple OSS Distributionslogic to select the next thread to run is used; the current thread 46*19c3b8c2SApple OSS Distributionsmay continue 47*19c3b8c2SApple OSS Distributionsrunning if there is no other appropriate thread to run. 48*19c3b8c2SApple OSS Distributions<p> 49*19c3b8c2SApple OSS DistributionsThe <var>option</var> argument specifies the interpretation and use of <var>time</var>. 50*19c3b8c2SApple OSS DistributionsThe possible values (from \*L<mach/thread_switch.h>\*O) are: 51*19c3b8c2SApple OSS Distributions<dl> 52*19c3b8c2SApple OSS Distributions<dt> <strong>SWITCH_OPTION_NONE</strong> 53*19c3b8c2SApple OSS Distributions<dd> 54*19c3b8c2SApple OSS DistributionsThe <var>time</var> argument is ignored. 55*19c3b8c2SApple OSS Distributions<dt> <strong>SWITCH_OPTION_WAIT</strong> 56*19c3b8c2SApple OSS Distributions<dd> 57*19c3b8c2SApple OSS DistributionsThe thread is blocked for the specified <var>time</var>. This wait cannot be 58*19c3b8c2SApple OSS Distributionscanceled by <strong>thread_resume</strong>; 59*19c3b8c2SApple OSS Distributionsonly <strong>thread_abort</strong> can terminate this wait. 60*19c3b8c2SApple OSS Distributions<dt> <strong>SWITCH_OPTION_DEPRESS</strong> 61*19c3b8c2SApple OSS Distributions<dd> 62*19c3b8c2SApple OSS DistributionsThe thread's scheduling attributes are temporarily set so as to provide 63*19c3b8c2SApple OSS Distributionsit with the lowest possible service for duration <var>time</var>. The scheduling 64*19c3b8c2SApple OSS Distributionsdepression is aborted when <var>time</var> has passed, when the current thread is 65*19c3b8c2SApple OSS Distributionsnext run (either via hand-off scheduling or because the processor set 66*19c3b8c2SApple OSS Distributionshas nothing better to do), or when <strong>thread_abort</strong> or 67*19c3b8c2SApple OSS Distributions<strong>thread_depress_abort</strong> is applied to the current thread. 68*19c3b8c2SApple OSS DistributionsChanging the thread's scheduling attributes (via <strong>thread_policy</strong>) 69*19c3b8c2SApple OSS Distributionswill not affect this depression. 70*19c3b8c2SApple OSS Distributions<dt> <strong>SWITCH_OPTION_IDLE</strong> 71*19c3b8c2SApple OSS Distributions<dd> 72*19c3b8c2SApple OSS DistributionsThis option is similar to <strong>SWITCH_OPTION_DEPRESS</strong> however, the 73*19c3b8c2SApple OSS Distributionsthread's scheduling attributes are temporarily set so as to place it 74*19c3b8c2SApple OSS Distributionsat a service level that is below all runnable threads for 75*19c3b8c2SApple OSS Distributionsduration <var>time</var>. The scheduling depression is aborted 76*19c3b8c2SApple OSS Distributionswhen <var>time</var> has passed, when the current thread is 77*19c3b8c2SApple OSS Distributionsnext run (either via hand-off scheduling or because the processor set 78*19c3b8c2SApple OSS Distributionshas nothing better to do), or when <strong>thread_abort</strong> or 79*19c3b8c2SApple OSS Distributions<strong>thread_depress_abort</strong> is applied to the current thread. 80*19c3b8c2SApple OSS DistributionsChanging the thread's scheduling attributes (via <strong>thread_policy</strong>) 81*19c3b8c2SApple OSS Distributionswill not affect this depression. 82*19c3b8c2SApple OSS Distributions</dl> 83*19c3b8c2SApple OSS Distributions<p> 84*19c3b8c2SApple OSS DistributionsThe minimum time and units of time can be obtained as the <var>min_timeout</var> 85*19c3b8c2SApple OSS Distributionsvalue from the <strong>HOST_SCHED_INFO</strong> flavor of <strong>host_info</strong>. 86*19c3b8c2SApple OSS Distributions<h3>NOTES</h3> 87*19c3b8c2SApple OSS Distributions<p> 88*19c3b8c2SApple OSS Distributions<strong>thread_switch</strong> is often called when the current thread 89*19c3b8c2SApple OSS Distributionscan proceed no further 90*19c3b8c2SApple OSS Distributionsfor some reason; the various options and arguments allow information about 91*19c3b8c2SApple OSS Distributionsthis reason to be transmitted to the kernel. The <var>new_thread</var> 92*19c3b8c2SApple OSS Distributionsargument (hand-off 93*19c3b8c2SApple OSS Distributionsscheduling) is useful when the identity of the thread that must make progress 94*19c3b8c2SApple OSS Distributionsbefore the current thread runs again is known. The <strong>SWITCH_OPTION_WAIT</strong> 95*19c3b8c2SApple OSS Distributionsoption is used when the amount of time that the current thread 96*19c3b8c2SApple OSS Distributionsmust wait before it 97*19c3b8c2SApple OSS Distributionscan do anything useful can be estimated and is fairly short, 98*19c3b8c2SApple OSS Distributionsespecially when the 99*19c3b8c2SApple OSS Distributionsidentity of the thread for which this thread must wait is not known. 100*19c3b8c2SApple OSS Distributions<h3>CAUTIONS</h3> 101*19c3b8c2SApple OSS Distributions<p> 102*19c3b8c2SApple OSS DistributionsUsers should beware of calling <strong>thread_switch</strong> with an 103*19c3b8c2SApple OSS Distributionsinvalid hint (e.g., <strong>THREAD_NULL</strong>) and no option. 104*19c3b8c2SApple OSS DistributionsBecause the time-sharing scheduler varies the 105*19c3b8c2SApple OSS Distributionspriority of threads based on usage, this may result in a waste 106*19c3b8c2SApple OSS Distributionsof CPU time if the 107*19c3b8c2SApple OSS Distributionsthread that must be run is of lower priority. The use of the 108*19c3b8c2SApple OSS Distributions<strong>SWITCH_OPTION_DEPRESS</strong> option in this situation is highly recommended. 109*19c3b8c2SApple OSS Distributions<p> 110*19c3b8c2SApple OSS Distributions<strong>thread_switch</strong> ignores policies. Users relying on the 111*19c3b8c2SApple OSS Distributionspreemption semantics of a 112*19c3b8c2SApple OSS Distributionsfixed time policy should be aware that <strong>thread_switch</strong> 113*19c3b8c2SApple OSS Distributionsignores these semantics; 114*19c3b8c2SApple OSS Distributionsit will run the specified <var>new_thread</var> independent of its scheduling 115*19c3b8c2SApple OSS Distributionsattributes and 116*19c3b8c2SApple OSS Distributionsthose of any threads that could run instead. 117*19c3b8c2SApple OSS Distributions<h3>RETURN VALUES</h3> 118*19c3b8c2SApple OSS Distributions<p> 119*19c3b8c2SApple OSS DistributionsOnly generic errors apply. 120*19c3b8c2SApple OSS Distributions<h3>RELATED INFORMATION</h3> 121*19c3b8c2SApple OSS Distributions<p> 122*19c3b8c2SApple OSS DistributionsFunctions: 123*19c3b8c2SApple OSS Distributions<a href="thread_abort.html"><strong>thread_abort</strong></a>, 124*19c3b8c2SApple OSS Distributions<a href="thread_depress_abort.html"><strong>thread_depress_abort</strong></a>. 125