Subversion Repositories HelenOS-doc

Rev

Rev 85 | Rev 131 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 85 Rev 127
Line 82... Line 82...
82
    <title>Timeouts</title>
82
    <title>Timeouts</title>
83
 
83
 
84
    <para>Kernel subsystems can register a callback function to be executed
84
    <para>Kernel subsystems can register a callback function to be executed
85
    with a specified delay. Such a registration is represented by a kernel
85
    with a specified delay. Such a registration is represented by a kernel
86
    structure called <classname>timeout</classname>. Timeouts are registered
86
    structure called <classname>timeout</classname>. Timeouts are registered
87
    via <code>timeout_register</code> function. This function takes a pointer
87
    via <code>timeout_register()</code> function. This function takes a pointer
88
    to a timeout structure, a callback function, a parameter of the callback
88
    to a timeout structure, a callback function, a parameter of the callback
89
    function and a delay in microseconds as parameters. After the structure is
89
    function and a delay in microseconds as parameters. After the structure is
90
    initialized with all these values, it is sorted into the processor's list
90
    initialized with all these values, it is sorted into the processor's list
91
    of active timeouts, according to the number of clock interrupts remaining
91
    of active timeouts, according to the number of clock interrupts remaining
92
    to their expiration and relatively to already listed timeouts.</para>
92
    to their expiration and relatively to already listed timeouts.</para>
93
 
93
 
94
    <para>Timeouts can be unregistered via <code>timeout_unregister</code>.
94
    <para>Timeouts can be unregistered via <code>timeout_unregister()</code>.
95
    This function can, as opposed to <code>timeout_register</code>, fail when
95
    This function can, as opposed to <code>timeout_register()</code>, fail when
96
    it is too late to remove the timeout from the list of active
96
    it is too late to remove the timeout from the list of active
97
    timeouts.</para>
97
    timeouts.</para>
98
 
98
 
99
    <para>Timeouts are nearing their expiration in the list of active timeouts
99
    <para>Timeouts are nearing their expiration in the list of active timeouts
100
    which exists on every processor in the system. The expiration counters are
100
    which exists on every processor in the system. The expiration counters are
Line 109... Line 109...
109
  <section>
109
  <section>
110
    <title>Generic clock interrupt handler</title>
110
    <title>Generic clock interrupt handler</title>
111
 
111
 
112
    <para>On each clock interrupt, the architecture specific part of the clock
112
    <para>On each clock interrupt, the architecture specific part of the clock
113
    interrupt handler makes a call to the generic clock interrupt handler
113
    interrupt handler makes a call to the generic clock interrupt handler
114
    implemented by the <code>clock</code> function. The generic handler takes
114
    implemented by the <code>clock()</code> function. The generic handler takes
115
    care of several mission critical goals:</para>
115
    care of several mission critical goals:</para>
116
 
116
 
117
    <itemizedlist>
117
    <itemizedlist>
118
      <listitem>
118
      <listitem>
119
        <para>expiration of timeouts,</para>
119
        <para>expiration of timeouts,</para>
Line 126... Line 126...
126
      <listitem>
126
      <listitem>
127
        <para>preemption of threads.</para>
127
        <para>preemption of threads.</para>
128
      </listitem>
128
      </listitem>
129
    </itemizedlist>
129
    </itemizedlist>
130
 
130
 
131
    <para>The <code>clock</code> function checks for expired timeouts and
131
    <para>The <code>clock()</code> function checks for expired timeouts and
132
    decrements unexpired timeout expiration counters exactly one more times
132
    decrements unexpired timeout expiration counters exactly one more times
133
    than is the number of missed clock signals (i.e. at least once and
133
    than is the number of missed clock signals (i.e. at least once and
134
    possibly more times, depending on the missed clock signals counter). The
134
    possibly more times, depending on the missed clock signals counter). The
135
    time of the day counters are also updated one more times than is the
135
    time of the day counters are also updated one more times than is the
136
    number of missed clock signals. And finally, the remaining timeslice of
136
    number of missed clock signals. And finally, the remaining timeslice of