| .. _microkernel_fibers: |
| |
| Fiber Services |
| ############## |
| |
| Concepts |
| ******** |
| |
| A :dfn:`fiber` is a lightweight, non-preemptible thread of execution that |
| implements a portion of an application's processing. Fiber-based services are |
| often used in device drivers and for performance-critical work. |
| |
| A microkernel application can use all of the fiber capabilities that are |
| available to a nanokernel application; for more information see |
| :ref:`nanokernel_fibers`. |
| |
| While a fiber often uses one or more nanokernel object types to carry |
| out its work, it also can interact with microkernel events and semaphores |
| to a limited degree. For example, a fiber can signal a task by giving a |
| microkernel semaphore, but it cannot take a microkernel semaphore. For more |
| information see :ref:`microkernel_events` and :ref:`microkernel_semaphores`. |
| |
| |
| .. _microkernel_server_fiber: |
| |
| Microkernel Server Fiber |
| ======================== |
| |
| The microkernel automatically spawns a system thread, known as the |
| *microkernel server* fiber, which performs most operations involving |
| microkernel objects. The nanokernel scheduler decides which fibers |
| get scheduled and when; it will schedule the microkernel server fiber |
| when there are no fibers of a higher priority. |
| |
| By default, the microkernel server fiber has priority 0 (that is, |
| the highest priority). However, this can be changed. If you drop its |
| priority, the nanokernel scheduler will give precedence to other, |
| higher-priority fibers, such as time-sensitive device driver or |
| application fibers. |
| |
| Both the fiber's stack size and scheduling priority can be configured |
| with the :option:`CONFIG_MICROKERNEL_SERVER_STACK_SIZE` and |
| :option:`CONFIG_MICROKERNEL_SERVER_PRIORITY` configuration options, |
| respectively. |
| |
| |
| See also :ref:`microkernel_server`. |