Subversion Repositories HelenOS-doc

Compare Revisions

Ignore whitespace Rev 170 → Rev 171

/design/trunk/src/ch_intro.xml
4,9 → 4,10
 
<title>Introduction</title>
 
<para>HelenOS is a portable operating system with support for a variety of modern
processor architectures<footnote>
<para>amd64, ia32, ia64, mips32 and ppc32.</para>
<para>HelenOS is a portable operating system with support for a variety of
modern processor architectures<footnote>
<para>amd64, arm32, ia32, ia64, mips32, ppc32 and sparc64. ia32xen and
ppc64 are currently broken.</para>
</footnote>.</para>
 
<para>This book describes the design and principles of the HelenOS operating
/design/trunk/src/ch_ipc.xml
17,8 → 17,8
<section>
<title>Kernel Services</title>
 
<para>Every message consists of four numeric arguments (32-bit and 64-bit on
the corresponding platforms), from which the first one is considered a
<para>Every message consists of four numeric arguments (32-bit and 64-bit
on the corresponding platforms), from which the first one is considered a
method number on message receipt and a return value on answer receipt. The
received message contains identification of the incoming connection, so
that the receiving application can distinguish the messages between
101,11 → 101,11
 
<para>The communication between task A, that is connected to task B
looks as follows: task A sends a message over its phone to the target
asnwerbox. The message is saved in task B's incoming call queue. When task
B fetches the message for processing, it is automatically moved into the
dispatched call queue. After the server decides to answer the message,
it is removed from dispatched queue and the result is moved into the
answer queue of task A.</para>
asnwerbox. The message is saved in task B's incoming call queue. When
task B fetches the message for processing, it is automatically moved
into the dispatched call queue. After the server decides to answer the
message, it is removed from dispatched queue and the result is moved
into the answer queue of task A.</para>
 
<para>The arguments contained in the message are completely arbitrary
and decided by the user. The low level part of kernel IPC fills in
119,8 → 119,8
<para>Closing an incoming connection is done by responding to any
incoming message with an EHANGUP error code. The connection is then
immediately closed. The client connection identification (phone id) is
not reused, until the client closes its own side of the
connection ("hangs his phone up").</para>
not reused, until the client closes its own side of the connection
("hangs his phone up").</para>
 
<para>When a task dies (whether voluntarily or by being killed), cleanup
process is started.</para>
157,8 → 157,9
<para>On top of this simple protocol the kernel provides special
services closely related to the inter-process communication. A range of
method numbers is allocated and protocol is defined for these functions.
These messages are interpreted by the kernel layer and appropriate actions
are taken depending on the parameters of the message and the answer.</para>
These messages are interpreted by the kernel layer and appropriate
actions are taken depending on the parameters of the message and the
answer.</para>
 
<para>The kernel provides the following services:</para>
 
182,24 → 183,26
 
<para>On startup, every task is automatically connected to a
<emphasis>naming service task</emphasis>, which provides a switchboard
functionality. In order to open a new outgoing connection, the client sends a
<constant>CONNECT_ME_TO</constant> message using any of his phones. If
the recepient of this message answers with an accepting answer, a new
connection is created. In itself, this mechanism would allow only
duplicating existing connection. However, if the message is forwarded,
the new connection is made to the final recipient.</para>
functionality. In order to open a new outgoing connection, the client
sends a <constant>CONNECT_ME_TO</constant> message using any of his
phones. If the recepient of this message answers with an accepting
answer, a new connection is created. In itself, this mechanism would
allow only duplicating existing connection. However, if the message is
forwarded, the new connection is made to the final recipient.</para>
 
<para>In order for a task to be able to forward a message, it
must have a phone connected to the destination task.
The destination task establishes such connection by sending the <constant>CONNECT_TO_ME</constant>
message to the forwarding task. A callback connection is opened afterwards.
Every service that wants to receive connections
has to ask the naming service to create the callback connection via this mechanism.</para>
<para>In order for a task to be able to forward a message, it must have
a phone connected to the destination task. The destination task
establishes such connection by sending the
<constant>CONNECT_TO_ME</constant> message to the forwarding task. A
callback connection is opened afterwards. Every service that wants to
receive connections has to ask the naming service to create the callback
connection via this mechanism.</para>
 
<para>Tasks can share their address space areas using IPC messages. The
two message types - <constant>AS_AREA_SEND</constant> and <constant>AS_AREA_RECV</constant> are used for sending and
receiving an address space area respectively. The shared area can be accessed
as soon as the message is acknowledged.</para>
two message types - <constant>AS_AREA_SEND</constant> and
<constant>AS_AREA_RECV</constant> are used for sending and receiving an
address space area respectively. The shared area can be accessed as soon
as the message is acknowledged.</para>
</section>
</section>
 
208,9 → 211,9
 
<para>The conventional design of the asynchronous API seems to produce
applications with one event loop and several big switch statements.
However, by intensive utilization of userspace pseudo threads, it was possible
to create an environment that is not necessarily restricted to this type
of event-driven programming and allows for more fluent expression of
However, by intensive utilization of userspace fibrils, it was possible to
create an environment that is not necessarily restricted to this type of
event-driven programming and allows for more fluent expression of
application programs.</para>
 
<section>
217,19 → 220,20
<title>Single Point of Entry</title>
 
<para>Each task is associated with only one answerbox. If a
multithreaded application needs to communicate, it must be not only
able to send a message, but it should be able to retrieve the answer as
well. If several pseudo threads pull messages from task answerbox, it is a
matter of coincidence, which thread receives which message. If a particular
thread needs to wait for a message answer, an idle
<emphasis>manager</emphasis> pseudo thread is found or a new one is created and
control is transfered to this manager thread. The manager threads pop
messages from the answerbox and put them into appropriate queues of
running threads. If a pseudo thread waiting for a message is not running, the
control is transferred to it.</para>
multithreaded application needs to communicate, it must be not only able
to send a message, but it should be able to retrieve the answer as well.
If several fibrils pull messages from task answerbox, it is a matter of
coincidence, which fibril receives which message. If a particular fibril
needs to wait for a message answer, an idle <emphasis>manager</emphasis>
fibril is found or a new one is created and control is transfered to
this manager fibril. The manager fibrils pop messages from the answerbox
and put them into appropriate queues of running fibrils. If a fibril
waiting for a message is not running, the control is transferred to
it.</para>
 
<figure float="1">
<title>Single point of entry</title>
 
<mediaobject id="ipc2">
<imageobject role="pdf">
<imagedata fileref="images/ipc2.pdf" format="PDF" />
243,7 → 247,6
<imagedata fileref="images/ipc2.svg" format="SVG" />
</imageobject>
</mediaobject>
 
</figure>
 
<para>Very similar situation arises when a task decides to send a lot of
250,18 → 253,18
messages and reaches the kernel limit of asynchronous messages. In such
situation, two remedies are available - the userspace library can either
cache the message locally and resend the message when some answers
arrive, or it can block the thread and let it go on only after the
arrive, or it can block the fibril and let it go on only after the
message is finally sent to the kernel layer. With one exception, HelenOS
uses the second approach - when the kernel responds that the maximum limit
of asynchronous messages was reached, the control is transferred to a manager
pseudo thread. The manager thread then handles incoming replies and, when space
is available, sends the message to the kernel and resumes the application thread
execution.</para>
uses the second approach - when the kernel responds that the maximum
limit of asynchronous messages was reached, the control is transferred
to a manager fibril. The manager fibril then handles incoming replies
and, when space is available, sends the message to the kernel and
resumes the application fibril execution.</para>
 
<para>If a kernel notification is received, the servicing procedure is
run in the context of the manager pseudo thread. Although it wouldn't be
run in the context of the manager fibril. Although it wouldn't be
impossible to allow recursive calling, it could potentially lead to an
explosion of manager threads. Thus, the kernel notification procedures
explosion of manager fibrils. Thus, the kernel notification procedures
are not allowed to wait for a message result, they can only answer
messages and send new ones without waiting for their results. If the
kernel limit for outgoing messages is reached, the data is automatically
270,6 → 273,7
 
<figure float="1">
<title>Single point of entry solution</title>
 
<mediaobject id="ipc3">
<imageobject role="pdf">
<imagedata fileref="images/ipc3.pdf" format="PDF" />
283,7 → 287,6
<imagedata fileref="images/ipc3.svg" format="SVG" />
</imageobject>
</mediaobject>
 
</figure>
</section>
 
298,16 → 301,16
possible as locking on them would block the thread completely so that
the answer couldn't be ever processed. The IPC framework allows a
developer to specify, that part of the code should not be preempted by
any other pseudo thread (except notification handlers) while still being able
to queue messages belonging to other pseudo threads and regain control when the
any other fibril (except notification handlers) while still being able
to queue messages belonging to other fibrils and regain control when the
answer arrives.</para>
 
<para>This mechanism works transparently in multithreaded environment,
where additional locking mechanism (futexes) should be used. The IPC
framework ensures that there will always be enough free userspace threads
to handle incoming answers and allow the application to run more
pseudo threads inside the usrspace threads without the danger of
locking all userspace threads in futexes.</para>
framework ensures that there will always be enough free userspace
threads to handle incoming answers and allow the application to run more
fibrils inside the userspace threads without the danger of locking all
userspace threads in futexes.</para>
</section>
 
<section>
321,12 → 324,12
multithreaded environment.</para>
 
<para>The server interface requires the developer to specify a
<function>connection_thread</function> function. When new connection is
detected, a new pseudo thread is automatically created and control is
<function>connection_fibril</function> function. When new connection is
detected, a new fibril is automatically created and control is
transferred to this function. The code then decides whether to accept
the connection and creates a normal event loop. The userspace IPC
library ensures correct switching between several pseudo threads
within the kernel environment.</para>
library ensures correct switching between several threads within the
kernel environment.</para>
</section>
</section>
</chapter>
/design/trunk/src/images/thread_states.svg
6,19 → 6,21
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="99.956085"
inkscape:export-xdpi="99.956085"
inkscape:export-filename="/afs/ms.mff.cuni.cz/u/j/jermj0bm/BIG/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:docname="thread_states.svg"
sodipodi:docbase="/tmp/bonds0am/HelenOS-doc/design/trunk/src/images.vector"
inkscape:version="0.43"
sodipodi:docbase="/home/jermar/software/HelenOS-doc/design/src/images"
inkscape:version="0.45"
sodipodi:version="0.32"
id="svg2"
height="841.88977pt"
width="595.27557pt"
version="1.0">
version="1.0"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:modified="true">
<defs
id="defs4">
<marker
143,7 → 145,7
inkscape:window-y="25"
inkscape:window-x="0"
inkscape:window-height="940"
inkscape:window-width="1272"
inkscape:window-width="1270"
showguides="true"
showgrid="true"
inkscape:current-layer="layer1"
175,13 → 177,12
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<g
id="g3649"
transform="matrix(1.464828,0,0,1.464828,-15.04397,-4.604388)">
id="g2969">
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,32.4605,149.5168)"
transform="matrix(0.4944732,0,0,0.4944732,32.505079,214.41201)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
188,7 → 189,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path4140"
style="font-size:32.41382599px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
style="font-size:32.41382599px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
196,12 → 197,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4142"
y="215.08498"
x="115.25795"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="310.4581"
x="153.78911"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="215.08498"
x="115.25795"
y="310.4581"
x="153.78911"
id="tspan4146"
sodipodi:role="line">Sleeping</tspan></text>
<path
208,7 → 209,7
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,105.5627,68.95098)"
transform="matrix(0.4944732,0,0,0.4944732,139.58723,96.396938)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
215,7 → 216,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path4148"
style="opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
223,12 → 224,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4150"
y="134.5192"
x="194.34079"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="192.4431"
x="269.63187"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="134.5192"
x="194.34079"
y="192.4431"
x="269.63187"
id="tspan4154"
sodipodi:role="line">Ready</tspan></text>
<path
235,7 → 236,7
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,-16.26112,5.48891)"
transform="matrix(0.4944732,0,0,0.4944732,-38.863714,3.4359211)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
242,7 → 243,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path4156"
style="opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6.03985834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6.03985834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
250,12 → 251,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4158"
y="71.394691"
x="68.128685"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6.03985834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="99.976555"
x="84.752838"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6.03985834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="71.394691"
x="68.128685"
y="99.976555"
x="84.752838"
id="tspan4162"
sodipodi:role="line">Entering</tspan></text>
<path
262,7 → 263,7
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,236.4999,5.48877)"
transform="matrix(0.4944732,0,0,0.4944732,331.38771,3.435716)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
269,7 → 270,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path4164"
style="opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
277,12 → 278,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4166"
y="71.056992"
x="323.55576"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="99.48188"
x="458.90955"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="71.056992"
x="323.55576"
y="99.48188"
x="458.90955"
id="tspan4170"
sodipodi:role="line">Exiting</tspan></text>
<path
291,8 → 292,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:nodetypes="cc"
id="path4980"
d="M 91.9412,85.687353 C 118.41313,109.23975 166.62705,122.66072 166.62705,122.66072"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.03412938;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
d="M 119.63407,120.91285 C 158.4109,155.41306 229.036,175.07247 229.036,175.07247"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.51482165;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
299,12 → 300,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4984"
y="124.17603"
x="59.445446"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="177.29214"
x="72.033386"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="124.17603"
x="59.445446"
y="177.29214"
x="72.033386"
id="tspan5024"
sodipodi:role="line">thread_create()</tspan></text>
<text
313,12 → 314,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4988"
y="101.97173"
x="124.66587"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="144.76666"
x="167.57008"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="101.97173"
x="124.66587"
y="144.76666"
x="167.57008"
id="tspan5022"
sodipodi:role="line">thread_ready()</tspan></text>
<text
327,12 → 328,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4994"
y="162.58347"
x="263.54474"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="233.55243"
x="371.00375"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="162.58347"
x="263.54474"
y="233.55243"
x="371.00375"
id="tspan5026"
sodipodi:role="line">scheduler()</tspan></text>
<text
341,12 → 342,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text4998"
y="229.79649"
x="171.27217"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="332.00797"
x="235.8403"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="229.79649"
x="171.27217"
y="332.00797"
x="235.8403"
id="tspan5018"
sodipodi:role="line">waitq_sleep_timeout()</tspan></text>
<text
355,12 → 356,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text5002"
y="185.98801"
x="192.59973"
style="font-size:7.20139456px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="267.83606"
x="267.08151"
style="font-size:10.54880428px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="185.98801"
x="192.59973"
y="267.83606"
x="267.08151"
id="tspan5004"
sodipodi:role="line">preemption</tspan></text>
<text
369,12 → 370,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text5006"
y="125.37627"
x="296.20535"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="179.05028"
x="418.84592"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="125.37627"
x="296.20535"
y="179.05028"
x="418.84592"
id="tspan5016"
sodipodi:role="line">thread_exit()</tspan></text>
<text
383,12 → 384,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text5010"
y="167.41605"
x="114.25764"
style="font-size:7.20139456px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="240.63132"
x="152.32382"
style="font-size:10.54880428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="167.41605"
x="114.25764"
y="240.63132"
x="152.32382"
id="tspan5020"
sodipodi:role="line">waitq_wakeup()</tspan></text>
<path
395,7 → 396,7
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,177.3064,150.5212)"
transform="matrix(0.4944732,0,0,0.4944732,244.67941,215.88328)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
402,7 → 403,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path2444"
style="font-size:32.41382599px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
style="font-size:32.41382599px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
410,12 → 411,12
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text2446"
y="215.81491"
x="261.82788"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="311.52734"
x="368.48883"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="215.81491"
x="261.82788"
y="311.52734"
x="368.48883"
id="tspan2450"
sodipodi:role="line">Running</tspan></text>
<path
424,8 → 425,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
inkscape:connector-type="polyline"
id="path3325"
d="M 33.364618,149.00819 L 67.997924,97.884558"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
d="M 33.829457,213.66698 L 84.561293,138.77965"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.92965603;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
432,8 → 433,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:nodetypes="cc"
id="path4202"
d="M 225.10695,148.58586 C 258.00023,153.72715 273.8861,175.53801 278.79628,186.65422"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1" />
d="M 314.69899,213.04834 C 362.88199,220.57945 386.15206,252.5286 393.34463,268.81194"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
440,8 → 441,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
inkscape:connector-type="polyline"
id="path5077"
d="M 242.86179,211.49395 L 186.29323,211.20512"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
d="M 340.70678,305.19787 L 257.84357,304.77479"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
448,8 → 449,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:nodetypes="cc"
id="path5079"
d="M 275.12632,194.85285 C 247.38146,189.62396 229.84652,176.88561 221.24215,156.65137"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1" />
d="M 387.96877,280.82152 C 347.32732,273.1621 321.64165,254.50261 309.03773,224.86293"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
456,8 → 457,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
inkscape:connector-type="polyline"
id="path5081"
d="M 140.07979,192.71974 L 205.35628,153.72715"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
d="M 190.14883,277.69688 L 285.76766,220.57945"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
465,13 → 466,13
sodipodi:nodetypes="cc"
inkscape:connector-type="polyline"
id="path5083"
d="M 248.55112,124.55491 L 337.93109,90.761329"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
d="M 349.04067,177.84713 L 479.96695,128.34535"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1;display:inline" />
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
transform="matrix(0.337564,0,0,0.337564,105.4999,-33.84694)"
transform="matrix(0.4944732,0,0,0.4944732,139.49524,-54.184333)"
d="M 432 183.61252 A 117.5 54 0 1 1 197,183.61252 A 117.5 54 0 1 1 432 183.61252 z"
sodipodi:ry="54"
sodipodi:rx="117.5"
478,7 → 479,7
sodipodi:cy="183.61252"
sodipodi:cx="314.5"
id="path1571"
style="opacity:1;fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#bc4343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<text
inkscape:export-ydpi="157.50999"
486,14 → 487,14
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
sodipodi:linespacing="125%"
id="text1573"
y="31.675644"
x="190.72272"
style="font-size:10.94173813px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
y="41.48431"
x="256.48203"
style="font-size:16.02776527px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="31.675644"
x="190.72272"
id="tspan1577"
sodipodi:role="line">Undead</tspan></text>
y="41.48431"
x="256.48203"
id="tspan2967"
sodipodi:role="line">Lingering</tspan></text>
<path
inkscape:export-ydpi="157.50999"
inkscape:export-xdpi="157.50999"
500,8 → 501,8
inkscape:export-filename="/afs/labts.troja.mff.cuni.cz/homes/jermj0bm/HelenOS-doc/design/src/images/thread_states.png"
inkscape:connector-type="polyline"
id="path1579"
d="M 309,56.362488 L 258.21762,35.011373"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
d="M 437.58788,77.956963 L 363.20043,46.681251"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.46482801;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2.929656, 1.464828;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
</g>
</g>
</svg>
/design/trunk/src/images/ipc3.svg
6,15 → 6,17
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg5804"
sodipodi:version="0.32"
inkscape:version="0.43"
sodipodi:docbase="/afs/ms/u/b/bonds0am/BIG/HelenOS-doc/design/trunk/src/images"
sodipodi:docname="ipc3.svg">
inkscape:version="0.45"
sodipodi:docbase="/home/jermar/software/HelenOS-doc/design/src/images"
sodipodi:docname="ipc3.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:modified="true">
<defs
id="defs5806">
<marker
64,16 → 66,16
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="421.64487"
inkscape:cy="784.31073"
inkscape:zoom="1.8672292"
inkscape:cx="213.07443"
inkscape:cy="849.15418"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1272"
inkscape:window-width="1270"
inkscape:window-height="943"
inkscape:window-x="0"
inkscape:window-y="0" />
inkscape:window-y="25" />
<metadata
id="metadata5809">
<rdf:RDF>
89,256 → 91,252
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.82379174;stroke-miterlimit:4;stroke-dasharray:3.8237915, 3.8237915;stroke-dashoffset:0;stroke-opacity:1"
id="rect4591"
width="281.32019"
height="383.9165"
x="77.538818"
y="11.249744" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.08290625;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect6800"
width="112.1237"
height="301.73367"
x="216.05653"
y="61.556484" />
<rect
style="fill:#bc4343;fill-opacity:1;stroke:#000000;stroke-width:2.29881334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect6802"
width="112.5148"
height="31.925303"
x="215.85529"
y="36.025669" />
<text
xml:space="preserve"
style="font-size:10.48421288px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="248.93459"
y="55.27504"
id="text6804"
transform="scale(0.9973909,1.0026159)"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan1492"
x="248.93459"
y="55.27504">Thread #2</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.0828383;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5858"
width="112.1237"
height="301.71402"
x="103.12389"
y="61.436604" />
<rect
style="fill:#bc4343;fill-opacity:1;stroke:#000000;stroke-width:2.29881334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2799"
width="112.5148"
height="31.925303"
x="102.92266"
y="36.045433" />
<text
xml:space="preserve"
style="font-size:10.48421288px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="129.40469"
y="55.27504"
id="text5861"
transform="scale(0.9973909,1.0026159)"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan1490"
x="129.40469"
y="55.27504">Thread #1</tspan></text>
<text
xml:space="preserve"
style="font-size:10.10816383px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="123.02416"
y="90.758408"
id="text6753"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2773"
x="123.02416"
y="90.758408">fibril #1</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.82489389;stroke-miterlimit:4;stroke-dasharray:0.82489396, 0.82489396;stroke-dashoffset:0;stroke-opacity:1"
id="rect6838"
width="108.88601"
height="76.751122"
x="162.89091"
y="193.36983" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64978778px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 142.26857,97.71813 L 142.26857,198.77183"
id="path6738"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.2889657px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 178.38349,197.89289 L 178.38349,259.57776"
id="path6751"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64978778px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
d="M 141.44367,169.4839 L 55.654699,179.38263"
id="path6764" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.82489389;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:0.82489396, 0.82489396;stroke-dashoffset:0;stroke-opacity:1"
d="M 142.17232,198.36946 C 142.17232,198.36946 152.99219,217.45678 169.49007,203.36906"
id="path6772" />
<text
xml:space="preserve"
style="font-size:8.28535271px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="132.8468"
y="217.02353"
id="text6776"><tspan
sodipodi:role="line"
id="tspan6778"
x="132.8468"
y="217.02353">wait_for()</tspan></text>
<text
xml:space="preserve"
style="font-size:19.79745483px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="17.948275"
y="172.47113"
id="text6780"><tspan
sodipodi:role="line"
id="tspan6782"
x="17.948275"
y="172.47113">call</tspan></text>
<text
xml:space="preserve"
style="font-size:8.67462254px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="157.09018"
y="180.7571"
id="text6784"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2777"
x="157.09018"
y="180.7571">Manager</tspan><tspan
sodipodi:role="line"
id="tspan2779"
x="157.09018"
y="191.60037">fibril #1</tspan></text>
<g
id="g2389"
transform="matrix(0.810121,0,0,0.810121,1.167531,1.773062)">
<rect
y="11.697861"
x="94.271461"
height="473.90021"
width="347.25702"
id="rect4591"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4.72002554;stroke-miterlimit:4;stroke-dasharray:4.72002516, 4.72002516;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="73.79567"
x="265.25543"
height="372.45508"
width="138.40364"
id="rect6800"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.57110524;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="42.280853"
x="265.00702"
height="39.408066"
width="138.88641"
id="rect6802"
style="fill:#bc4343;fill-opacity:1;stroke:#000000;stroke-width:2.83761716;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
transform="scale(0.997391,1.002616)"
id="text6804"
y="66.047661"
x="305.83575"
style="font-size:12.94153786px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="66.047661"
x="305.83575"
id="tspan1492"
sodipodi:role="line">Thread #2</tspan></text>
<rect
y="73.64769"
x="125.85326"
height="372.43082"
width="138.40364"
id="rect5858"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.57102132;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="42.305248"
x="125.60485"
height="39.408066"
width="138.88641"
id="rect2799"
style="fill:#bc4343;fill-opacity:1;stroke:#000000;stroke-width:2.83761716;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
transform="scale(0.997391,1.002616)"
id="text5861"
y="66.047661"
x="158.29005"
style="font-size:12.94153786px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="66.047661"
x="158.29005"
id="tspan1490"
sodipodi:role="line">Thread #1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text6753"
y="109.84204"
x="150.41782"
style="font-size:12.47735023px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="109.84204"
x="150.41782"
id="tspan1498"
sodipodi:role="line">psthread #1</tspan></text>
<rect
y="236.50389"
x="199.62868"
height="94.740318"
width="134.40709"
id="rect6838"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.01823545;stroke-miterlimit:4;stroke-dasharray:1.0182355, 1.0182355;stroke-dashoffset:0;stroke-opacity:1" />
id="g6814"
transform="matrix(-1.6497879,0,0,1.6497879,525.48343,-20.839222)">
<path
sodipodi:nodetypes="cc"
id="path6738"
d="M 174.17279,118.43301 L 174.17279,243.17203"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.03647089px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path6816"
d="M 143.5,71.86218 L 143.5,133.11472"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path6751"
d="M 218.75246,242.08708 L 218.75246,318.22987"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.59107804px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path6818"
d="M 165.39065,132.58196 L 165.39065,169.97154"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.78129178px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path6764"
d="M 173.15455,207.01949 L 67.258061,219.23832"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.03647089px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
id="path6820"
d="M 143,115.36218 L 91,121.36218"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
<path
id="path6772"
d="M 174.05398,242.67535 C 174.05398,242.67535 187.40985,266.23643 207.77456,248.84678"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.01823545;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1.0182355, 1.0182355;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="text6776"
y="265.70163"
x="162.54272"
style="font-size:10.22730255px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="265.70163"
x="162.54272"
id="tspan6778"
sodipodi:role="line">wait_for()</tspan></text>
<text
id="text6780"
y="210.70688"
x="20.713873"
style="font-size:24.43765259px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="210.70688"
x="20.713873"
id="tspan6782"
sodipodi:role="line">call</tspan></text>
<text
sodipodi:linespacing="125%"
id="text6784"
y="220.93494"
x="192.46834"
style="font-size:10.7078104px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="220.93494"
x="192.46834"
id="tspan1502"
sodipodi:role="line">Manager</tspan><tspan
y="234.3197"
x="192.46834"
id="tspan1504"
sodipodi:role="line">psthread #1</tspan></text>
<g
transform="matrix(-2.036471,0,0,2.036471,647.2069,-27.91223)"
id="g6814">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 143.5,71.86218 L 143.5,133.11472"
id="path6816"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.78129178px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 165.39065,132.58196 L 165.39065,169.97154"
id="path6818"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
d="M 143,115.36218 L 91,121.36218"
id="path6820" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
d="M 143.44166,132.87083 C 143.44166,132.87083 150,144.44039 160,135.90128"
id="path6822" />
</g>
<text
id="text6824"
y="205.22168"
x="477.27682"
style="font-size:24.43765259px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="205.22168"
x="477.27682"
id="tspan6826"
sodipodi:role="line">call</tspan></text>
<text
sodipodi:linespacing="125%"
id="text6828"
y="220.93494"
x="275.96365"
style="font-size:10.7078104px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="220.93494"
x="275.96365"
id="tspan1506"
sodipodi:role="line">Manager</tspan><tspan
y="234.3197"
x="275.96365"
id="tspan1508"
sodipodi:role="line">psthread #2</tspan></text>
<text
id="text6834"
y="265.70163"
x="315.27805"
style="font-size:10.22730255px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="265.70163"
x="315.27805"
id="tspan6836"
sodipodi:role="line">wait_for()</tspan></text>
<path
sodipodi:nodetypes="cs"
id="path6842"
d="M 11.942538,269.08017 C 0.80654601,314.70108 292.94198,309.10642 292.94198,309.10642"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.52735329;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1.52735325, 1.52735325;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="text6844"
y="267.82147"
x="4.909719"
style="font-size:20.63139153px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="267.82147"
x="4.909719"
id="tspan6846"
sodipodi:role="line">answer</tspan></text>
<path
id="path6848"
d="M 352.364,323.09834 L 352.364,437.14072"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.03647089px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text6850"
y="109.84204"
x="300.51529"
style="font-size:12.47735023px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="109.84204"
x="300.51529"
id="tspan1496"
sodipodi:role="line">psthread #2</tspan></text>
<text
sodipodi:linespacing="125%"
id="text6858"
y="326.5433"
x="355.72885"
style="font-size:7.21465492px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="326.5433"
x="355.72885"
id="tspan1500"
sodipodi:role="line">psthread #1</tspan></text>
<path
id="path6866"
d="M 311.208,320.11204 C 311.208,320.11204 324.56387,296.55097 344.92858,313.94062"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.01823545;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1.0182355, 1.0182355;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cs"
id="path6868"
d="M 174.6974,244.2182 C 154.41281,432.57566 317.61993,311.97546 340.02111,321.87548"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.01823545;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1.0182355, 1.0182355;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="text6870"
y="364.4743"
x="170.3884"
style="font-size:16.47247696px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="364.4743"
x="170.3884"
id="tspan6872"
sodipodi:role="line">migration</tspan></text>
id="path6822"
d="M 143.44166,132.87083 C 143.44166,132.87083 150,144.44039 160,135.90128"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-size:19.79745483px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="387.81952"
y="168.02745"
id="text6824"><tspan
sodipodi:role="line"
id="tspan6826"
x="387.81952"
y="168.02745">call</tspan></text>
<text
xml:space="preserve"
style="font-size:8.67462254px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="232.76477"
y="179.68599"
id="text6828"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2781"
x="232.76477"
y="179.68599">Manager</tspan><tspan
sodipodi:role="line"
id="tspan2783"
x="232.76477"
y="190.52927">fibril #2</tspan></text>
<text
xml:space="preserve"
style="font-size:8.28535271px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="256.5809"
y="217.02353"
id="text6834"><tspan
sodipodi:role="line"
id="tspan6836"
x="256.5809"
y="217.02353">wait_for()</tspan></text>
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23734093;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1.23734094, 1.23734094;stroke-dashoffset:0;stroke-opacity:1"
d="M 10.842432,219.76056 C 1.8209309,256.71902 238.48598,252.18666 238.48598,252.18666"
id="path6842"
sodipodi:nodetypes="cs" />
<text
xml:space="preserve"
style="font-size:16.71392441px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="5.1449976"
y="218.74086"
id="text6844"><tspan
sodipodi:role="line"
id="tspan6846"
x="5.1449976"
y="218.74086">answer</tspan></text>
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64978778px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 286.62501,263.52181 L 286.62501,355.90994"
id="path6848" />
<text
xml:space="preserve"
style="font-size:10.10816383px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="244.62128"
y="90.758408"
id="text6850"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2775"
x="244.62128"
y="90.758408">fibril #2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.84474325px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="292.02628"
y="265.24155"
id="text6858"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2785"
x="292.02628"
y="265.24155">fibril #1</tspan></text>
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.82489389;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:0.82489396, 0.82489396;stroke-dashoffset:0;stroke-opacity:1"
d="M 253.28367,261.10255 C 253.28367,261.10255 264.10354,242.01523 280.60142,256.10295"
id="path6866" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.82489389;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:0.82489396, 0.82489396;stroke-dashoffset:0;stroke-opacity:1"
d="M 142.69356,199.61935 C 126.26059,352.21169 258.47811,254.51093 276.62577,262.53115"
id="path6868"
sodipodi:nodetypes="cs" />
<text
xml:space="preserve"
style="font-size:13.34469986px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="139.20274"
y="297.04135"
id="text6870"><tspan
sodipodi:role="line"
id="tspan6872"
x="139.20274"
y="297.04135">migration</tspan></text>
</g>
</svg>
/design/trunk/src/ch_synchronization.xml
11,9 → 11,9
parallelism offered by the hardware and to exploit concurrency of both the
kernel and userspace tasks. This is achieved through multiprocessor
support and several levels of multiprogramming such as multitasking,
multithreading and also through userspace pseudo threads. However, such a
highly concurrent environment needs safe and efficient ways to handle
mutual exclusion and synchronization of many execution flows.</para>
multithreading and also through userspace fibrils. However, such a highly
concurrent environment needs safe and efficient ways to handle mutual
exclusion and synchronization of many execution flows.</para>
</section>
 
<section>
/design/trunk/src/ch_arch_overview.xml
57,7 → 57,7
<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
can be several pseudo threads running within one userspace thread that
can be several so called fibrils 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).
<indexterm>
/design/trunk/src/ch_scheduling.xml
139,10 → 139,10
thread exits, its kernel structure usually stays in memory, until the
thread is detached by another thread using <code>thread_detach()</code>
function. Terminated but undetached threads are in the
<constant>Undead</constant> state. When the thread is detached or
<constant>Lingering</constant> state. When the thread is detached or
detaches itself during its life, it is destroyed in the
<constant>Exiting</constant> state and the <constant>Undead</constant>
state is not reached.<figure float="1">
<constant>Exiting</constant> state and the
<constant>Lingering</constant> state is not reached.<figure float="1">
<title>Transitions among thread states.</title>
 
<mediaobject id="thread_states" xreflabel="">
162,28 → 162,28
</formalpara>
 
<formalpara>
<title>Pseudo Threads</title>
<title>Fibrils</title>
 
<para>HelenOS userspace layer knows even smaller units of execution.
Each userspace thread can make use of an arbitrary number of pseudo
threads. These pseudo threads have their own synchronous register
context, userspace code and stack. They live their own life within the
userspace thread and the scheduler does not have any idea about them
because they are completely implemented by the userspace library. This
implies several things:<itemizedlist>
Each userspace thread can make use of an arbitrary number of fibrils.
These fibrils have their own synchronous register context, userspace
code and stack. They live their own life within the userspace thread and
the scheduler does not have any idea about them because they are
completely implemented by the userspace library. This implies several
things:<itemizedlist>
<listitem>
<para>pseudothreads schedule themselves cooperatively within the
time slice given to their userspace thread,</para>
<para>fibrils schedule themselves cooperatively within the time
slice given to their userspace thread,</para>
</listitem>
 
<listitem>
<para>pseudothreads share FPU context of their containing thread
<para>fibrils share FPU context of their containing thread
and</para>
</listitem>
 
<listitem>
<para>all pseudothreads of one userspace thread block when one of
them goes to sleep.</para>
<para>all fibrils of one userspace thread block when one of them
goes to sleep.</para>
</listitem>
</itemizedlist></para>
</formalpara>