/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> |