Subversion Repositories HelenOS-doc

Rev

Rev 52 | Rev 58 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <chapter id="scheduling">
  3.   <?dbhtml filename="scheduling.html"?>
  4.  
  5.   <title>Scheduling</title>
  6.  
  7.   <para>One of the key aims of the operating system is to create and support
  8.   the impression that several activities are executing contemporarily. This is
  9.   true for both uniprocessor as well as multiprocessor systems. In the case of
  10.   multiprocessor systems, the activities are trully happening in parallel. The
  11.   scheduler helps to materialize this impression by planning threads on as
  12.   many processors as possible and, where this means reaches its limits, by
  13.   quickly switching among threads executing on a single processor.</para>
  14.  
  15.   <section>
  16.     <title>Contexts</title>
  17.  
  18.     <para>The term context refers to the set of processor resources that
  19.     define the current state of the computation or the environment and the
  20.     kernel understands it in several more or less narrow sences:</para>
  21.  
  22.     <itemizedlist>
  23.       <listitem>
  24.         <para>synchronous register context,</para>
  25.       </listitem>
  26.  
  27.       <listitem>
  28.         <para>asynchronous register context,</para>
  29.       </listitem>
  30.  
  31.       <listitem>
  32.         <para>FPU context and</para>
  33.       </listitem>
  34.  
  35.       <listitem>
  36.         <para>memory management context.</para>
  37.       </listitem>
  38.     </itemizedlist>
  39.  
  40.     <para>The most narrow sence refers to the the synchronous register
  41.     context. It includes all the preserved registers as defined by the
  42.     architecture. To highlight some, the program counter and stack pointer
  43.     take part in the synchronous register context. These are the registers
  44.     that must be preserved across a procedure call and during synchronous
  45.     context switches. </para>
  46.  
  47.     <para>The next type of the context understood by the kernel is the
  48.     asynchronous register context. On an interrupt, the interrupted execution
  49.     flow's state must be guaranteed to be eventually completely restored.
  50.    Therefore the interrupt context includes, among other things, the scratch
  51.    registers as defined by the architecture. As a special optimization and if
  52.    certain conditions are met, it need not include the architecture's
  53.     preserved registers. The condition mentioned in the previous sentence is
  54.     that the low-level assembly language interrupt routines don't modify the
  55.    preserved registers. The handlers usually call a higher-level C routine.
  56.    The preserved registers are then saved on the stack by the compiler
  57.    generated code of the higher-level function. In HelenOS, several
  58.    architectures can be compiled with this optimization.</para>
  59.  
  60.    <para>Although the kernel does not do any floating point
  61.    arithmetics<footnote>
  62.        <para>Some architectures (e.g. ia64) inevitably use a fixed set of
  63.        floating point registers to carry out its normal operations.</para>
  64.      </footnote>, it must protect FPU context of userspace threads against
  65.    destruction by other threads. Moreover, only a fraction of userspace
  66.    programs use the floating point unit. HelenOS contains a generic framework
  67.    for switching FPU context only when the switch is forced.</para>
  68.  
  69.    <para>The last member of the context family is the memory management
  70.    context. It includes memory management registers that identify address
  71.    spaces on hardware level (i.e. ASIDs and page tables pointers).</para>
  72.  
  73.    <section>
  74.      <title>Synchronous context switches</title>
  75.  
  76.      <para>The scheduler, but also other pieces of the kernel, make heavy use
  77.      of synchronous context switches, because it is a natural vehicle not
  78.      only for changes in control flow, but also for switching between two
  79.      kernel stacks. Two functions figure in a synchronous context switch
  80.      implementation: <code>context_save</code> and
  81.      <code>context_restore</code>. Note that these two functions break the
  82.      natural perception of the linear C code execution flow starting at
  83.      function's entry point and ending on one of the function's exit
  84.      points.</para>
  85.  
  86.      <para>When the <code>context_save</code> function is called, the
  87.      synchronous context is saved in a memory structure passed to it. After
  88.      executing <code>context_save</code>, the caller is returned 1 as a
  89.      return value. The execution of instructions continues as normally until
  90.      <code>context_restore</code> is called. For the caller, it seems like
  91.      the call never returns<footnote>
  92.          <para>Which might be a source of problems with variable liveliness
  93.          after <code>context_restore</code>.</para>
  94.        </footnote>. Nevertheless, a synchronous register context, which is
  95.      saved in a memory structure passed to <code>context_restore,</code> is
  96.      restored, thus transfering the control flow to the place of occurrence
  97.      of the corresponding call to <code>context_save</code>. From the
  98.      perspective of the caller of the corresponding
  99.      <code>context_save</code>, it looks as though a return from
  100.      <code>context_save</code>. However, this time a return value of 0 is
  101.      returned.</para>
  102.    </section>
  103.  </section>
  104.  
  105.  <section>
  106.    <title>Scheduler</title>
  107.  
  108.    <para>How scheduler designed and how it works.</para>
  109.  </section>
  110. </chapter>