Rev 75 | Rev 77 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 75 | Rev 76 | ||
---|---|---|---|
Line 35... | Line 35... | ||
35 | <listitem> |
35 | <listitem> |
36 | <para>memory management context.</para> |
36 | <para>memory management context.</para> |
37 | </listitem> |
37 | </listitem> |
38 | </itemizedlist> |
38 | </itemizedlist> |
39 | 39 | ||
40 | <para>The most narrow sence refers to the the synchronous register |
40 | <para>The most narrow sense refers to the the synchronous register |
41 | context. It includes all the preserved registers as defined by the |
41 | context. It includes all the preserved registers as defined by the |
42 | architecture. To highlight some, the program counter and stack pointer |
42 | architecture. To highlight some, the program counter and stack pointer |
43 | take part in the synchronous register context. These are the registers |
43 | take part in the synchronous register context. These registers must be |
44 | that must be preserved across a procedure call and during synchronous |
44 | preserved across a procedure call and during synchronous context |
45 | context switches.</para> |
45 | switches.</para> |
46 | 46 | ||
47 | <para>The next type of the context understood by the kernel is the |
47 | <para>The next type of the context understood by the kernel is the |
48 | asynchronous register context. On an interrupt, the interrupted execution |
48 | asynchronous register context. On an interrupt, the interrupted execution |
49 | flow's state must be guaranteed to be eventually completely restored. |
49 | flow's state must be guaranteed to be eventually completely restored. |
50 | Therefore the interrupt context includes, among other things, the scratch |
50 | Therefore the interrupt context includes, among other things, the scratch |
Line 253... | Line 253... | ||
253 | <title>Processor load balancing</title> |
253 | <title>Processor load balancing</title> |
254 | 254 | ||
255 | <para>Normally, for the sake of cache locality, threads are scheduled on |
255 | <para>Normally, for the sake of cache locality, threads are scheduled on |
256 | one of the processors and don't leave it. Nevertheless, a situation in |
256 | one of the processors and don't leave it. Nevertheless, a situation in |
257 | which one processor is heavily overloaded while others sit idle can |
257 | which one processor is heavily overloaded while others sit idle can |
258 | occur. HelenOS deploys special kernel threads to help to mitigate this |
258 | occur. HelenOS deploys special kernel threads to help mitigate this |
259 | problem. Each processor is associated with one load balancing thread |
259 | problem. Each processor is associated with one load balancing thread |
260 | called <code>kcpulb</code> that wakes up regularily to see whether its |
260 | called <code>kcpulb</code> that wakes up regularly to see whether its |
261 | processor is underbalanced or not. If yes, the thread attempts to |
261 | processor is underbalanced or not. If it is, the thread attempts to |
262 | migrate threads from other overloaded processors to its own processor's |
262 | migrate threads from other overloaded processors to its own processor's |
263 | run queues. When the job is done or there is no need for load balancing, |
263 | run queues. When the job is done or there is no need for load balancing, |
264 | the thread goes to sleep.</para> |
264 | the thread goes to sleep.</para> |
265 | 265 | ||
266 | <para>The balancing threads operate very gently and try to migrate low |
266 | <para>The balancing threads operate very gently and try to migrate low |