19,7 → 19,8 |
be used even without some traditional subsystems (e.g. block devices, |
filesystems and networking).</para> |
|
<figure><mediaobject id="arch1" xreflabel=""> |
<figure> |
<mediaobject id="arch1" xreflabel=""> |
<imageobject role="html"> |
<imagedata fileref="images/arch1.png" format="PNG" /> |
</imageobject> |
26,12 → 27,13 |
|
<imageobject role="fop"> |
<imagedata fileref="images.vector/arch1.svg" format="SVG" /> |
</imageobject> |
</imageobject> |
</mediaobject> |
|
<title>HelenOS architecture overview.</title> |
</figure> |
</figure> |
|
<para>HelenOS is comprised of the kernel and userspace server tasks. The |
<para>HelenOS is comprised of the kernel and the userspace server tasks. The |
kernel provides scheduling, memory management and IPC. It also contains |
essential device drivers that control the system clock and other devices |
necessary to guarantee a safe environment. Userspace communicates with the |
44,6 → 46,10 |
<section> |
<title>Scheduling</title> |
|
<indexterm> |
<primary>thread</primary> |
</indexterm> |
|
<para>Kernel's unit of execution flow is a thread. A thread is an entity |
that executes code and has a stack that takes up some space in memory. The |
relation between kernel and userspace threads is 1:1:n, meaning that there |
50,9 → 56,11 |
can be several pseudo threads running within one userspace thread that |
maps to one kernel thread. Threads are grouped into tasks by functionality |
they provide (i.e. several threads implement functionality of one task). |
Tasks serve as containers of threads, they provide linkage to address |
space and are communication endpoints for IPC. Finally, tasks can be |
holders of capabilities that entitle them to do certain sensitive |
<indexterm> |
<primary>task</primary> |
</indexterm> Tasks serve as containers of threads, they provide linkage |
to address space and are communication endpoints for IPC. Finally, tasks |
can be holders of capabilities that entitle them to do certain sensitive |
operations (e.g access raw hardware and physical memory).</para> |
|
<para>The scheduler deploys several run queues on each processor. A thread |
80,6 → 88,10 |
(i.e. 4-level hierarchical page tables and global page hash table), and is |
further extensible to other mechanisms.</para> |
|
<indexterm> |
<primary>address space</primary> |
</indexterm> |
|
<para>Userspace tasks depend on support of address spaces provided by the |
kernel. Each address space is a set of mutually dijunctive address space |
areas that group pages of common attributes. An address space area is |
90,6 → 102,10 |
</section> |
|
<section> |
<indexterm> |
<primary>IPC</primary> |
</indexterm> |
|
<title>IPC</title> |
|
<para>Due to the fact that HelenOS is a microkernel, strong emphasis is |
103,6 → 119,24 |
another or by sending (i.e. sharing) address space areas when larger data |
is to be transfered.</para> |
|
<indexterm> |
<primary>IPC</primary> |
|
<secondary>- phone</secondary> |
</indexterm> |
|
<indexterm> |
<primary>IPC</primary> |
|
<secondary>- answerbox</secondary> |
</indexterm> |
|
<indexterm> |
<primary>IPC</primary> |
|
<secondary>- message queue</secondary> |
</indexterm> |
|
<para>The abstraction uses terms like phones, calls and answerboxes, but |
is pretty similar to well-known abstraction of message queues. A task can |
have multiple simultaneous simplex connections to several other tasks. A |