Subversion Repositories HelenOS-doc

Rev

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

Rev 61 Rev 62
Line 117... Line 117...
117
    and to the latter group as to userspace threads. Both kernel and userspace
117
    and to the latter group as to userspace threads. Both kernel and userspace
118
    threads are visible to the scheduler and can become a subject of kernel
118
    threads are visible to the scheduler and can become a subject of kernel
119
    preemption and thread migration during times when preemption is
119
    preemption and thread migration during times when preemption is
120
    possible.</para>
120
    possible.</para>
121
 
121
 
122
    <para>
122
    <figure>
-
 
123
      <title>Transitions among thread states.</title>
-
 
124
 
123
    <mediaobject id="thread_states" xreflabel="">
125
      <mediaobject id="thread_states" xreflabel="">
124
        <imageobject role="html">
126
        <imageobject role="html">
125
           <imagedata fileref="images/thread_states.png" format="PNG" />
127
          <imagedata fileref="images/thread_states.png" format="PNG" />
126
    </imageobject>
128
        </imageobject>
127
           
129
 
128
    <imageobject role="fop">
130
        <imageobject role="fop">
129
            <imagedata fileref="images.vector/thread_states.svg" format="SVG" />
131
          <imagedata fileref="images.vector/thread_states.svg" format="SVG" />
130
    </imageobject>
132
        </imageobject>
131
                   
-
 
132
    <caption>Transitions among thread states.</caption>
-
 
133
    </mediaobject>
133
      </mediaobject>
134
     </para>
134
    </figure>
135
                       
-
 
136
 
135
 
137
    <para>HelenOS userspace layer knows even smaller units of execution. Each
136
    <para>HelenOS userspace layer knows even smaller units of execution. Each
138
    userspace thread can make use of an arbitrary number of pseudo threads.
137
    userspace thread can make use of an arbitrary number of pseudo threads.
139
    These pseudo threads have their own synchronous register context,
138
    These pseudo threads have their own synchronous register context,
140
    userspace code and stack. They live their own life within the userspace
139
    userspace code and stack. They live their own life within the userspace
Line 188... Line 187...
188
      suitable thread, the processor is idle and no thread executes on it.
187
      suitable thread, the processor is idle and no thread executes on it.
189
      Note that the act of switching to the private scheduler stack is
188
      Note that the act of switching to the private scheduler stack is
190
      essential. If the processor kept running using the stack of the
189
      essential. If the processor kept running using the stack of the
191
      preempted thread it could damage it because the old thread can be
190
      preempted thread it could damage it because the old thread can be
192
      migrated to another processor and scheduled there. In the worst case
191
      migrated to another processor and scheduled there. In the worst case
193
      scenario, two execution flows would be using the same stack. </para>
192
      scenario, two execution flows would be using the same stack.</para>
194
 
193
 
195
      <para>The scheduling policy is implemented in function
194
      <para>The scheduling policy is implemented in function
196
      <code>find_best_thread</code>. This function walks the processor run
195
      <code>find_best_thread</code>. This function walks the processor run
197
      queues from lower towards higher indices and looks for a thread. If the
196
      queues from lower towards higher indices and looks for a thread. If the
198
      visited run queue is empty, it simply searches the next run queue. If it
197
      visited run queue is empty, it simply searches the next run queue. If it