Subversion Repositories HelenOS-doc

Rev

Rev 112 | Rev 117 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 112 Rev 114
Line 79... Line 79...
79
        <listitem>
79
        <listitem>
80
          <para>Notification queue</para>
80
          <para>Notification queue</para>
81
        </listitem>
81
        </listitem>
82
      </itemizedlist>
82
      </itemizedlist>
83
 
83
 
-
 
84
      <figure float="1">
-
 
85
        <mediaobject id="ipc1">
-
 
86
          <imageobject role="pdf">
-
 
87
            <imagedata fileref="images/ipc1.pdf" format="PDF" />
-
 
88
          </imageobject>
-
 
89
 
-
 
90
          <imageobject role="html">
-
 
91
            <imagedata fileref="images/ipc1.png" format="PNG" />
-
 
92
          </imageobject>
-
 
93
 
-
 
94
          <imageobject role="fop">
-
 
95
            <imagedata fileref="images/ipc1.svg" format="SVG" />
-
 
96
          </imageobject>
-
 
97
        </mediaobject>
-
 
98
 
-
 
99
        <title>Low level IPC</title>
-
 
100
      </figure>
-
 
101
 
84
      <para>The communication between task A, that is connected to task B
102
      <para>The communication between task A, that is connected to task B
85
      looks as follows: Task A sends a message over it's phone to the target
103
      looks as follows: Task A sends a message over it's phone to the target
86
      asnwerbox. The message is saved in task B incoming call queue. When task
104
      asnwerbox. The message is saved in task B incoming call queue. When task
87
      B fetches the message for processing, it is automatically moved into the
105
      B fetches the message for processing, it is automatically moved into the
88
      dispatched call queue. After the server decides to answer the message,
106
      dispatched call queue. After the server decides to answer the message,
Line 103... Line 121...
103
      immediately closed. The client connection identification (phone id) is
121
      immediately closed. The client connection identification (phone id) is
104
      not reused, until the client issues closes it's own side of the
122
      not reused, until the client issues closes it's own side of the
105
      connection ("hangs his phone up").</para>
123
      connection ("hangs his phone up").</para>
106
 
124
 
107
      <para>When a task dies (whether voluntarily or by being killed), cleanup
125
      <para>When a task dies (whether voluntarily or by being killed), cleanup
108
      process is started. </para>
126
      process is started.</para>
109
 
127
 
110
      <orderedlist>
128
      <orderedlist>
111
        <listitem>
129
        <listitem>
112
          <para>Hangs up all outgoing connections and sends hangup messages to
130
          <para>Hangs up all outgoing connections and sends hangup messages to
113
          all target answerboxes.</para>
131
          all target answerboxes.</para>
Line 138... Line 156...
138
 
156
 
139
      <para>On top of this simple protocol the kernel provides special
157
      <para>On top of this simple protocol the kernel provides special
140
      services closely related to the inter-process communication. A range of
158
      services closely related to the inter-process communication. A range of
141
      method numbers is allocated and protocol is defined for these functions.
159
      method numbers is allocated and protocol is defined for these functions.
142
      The messages are interpreted by the kernel layer and appropriate actions
160
      The messages are interpreted by the kernel layer and appropriate actions
143
      are taken depending on the parameters of message and answer. </para>
161
      are taken depending on the parameters of message and answer.</para>
144
 
162
 
145
      <para>The kernel provides the following services:</para>
163
      <para>The kernel provides the following services:</para>
146
 
164
 
147
      <itemizedlist>
165
      <itemizedlist>
148
        <listitem>
166
        <listitem>
Line 167... Line 185...
167
      functionality. To open a new outgoing connection, the client sends a
185
      functionality. To open a new outgoing connection, the client sends a
168
      <constant>CONNECT_ME_TO</constant> message using any of his phones. If
186
      <constant>CONNECT_ME_TO</constant> message using any of his phones. If
169
      the recepient of this message answers with an accepting answer, a new
187
      the recepient of this message answers with an accepting answer, a new
170
      connection is created. In itself, this mechanism would allow only
188
      connection is created. In itself, this mechanism would allow only
171
      duplicating existing connection. However, if the message is forwarded,
189
      duplicating existing connection. However, if the message is forwarded,
172
      the new connection is made to the final recipient. </para>
190
      the new connection is made to the final recipient.</para>
173
 
191
 
174
      <para>On startup every task is automatically connect to the name service
192
      <para>On startup every task is automatically connect to the name service
175
      task, which acts as a switchboard and forwards requests for connection
193
      task, which acts as a switchboard and forwards requests for connection
176
      to specific services. To be able to forward a message it must have a
194
      to specific services. To be able to forward a message it must have a
177
      phone connected to the service tasks. The task creates this connection
195
      phone connected to the service tasks. The task creates this connection
Line 180... Line 198...
180
      asks name service task to create a callback connection.</para>
198
      asks name service task to create a callback connection.</para>
181
 
199
 
182
      <para>Tasks can share their address space areas using IPC messages. The
200
      <para>Tasks can share their address space areas using IPC messages. The
183
      2 message types - AS_AREA_SEND and AS_AREA_RECV are used for sending and
201
      2 message types - AS_AREA_SEND and AS_AREA_RECV are used for sending and
184
      receiving an address area respectively. The shared area can be accessed
202
      receiving an address area respectively. The shared area can be accessed
185
      as soon as the message is acknowledged. </para>
203
      as soon as the message is acknowledged.</para>
186
    </section>
204
    </section>
187
  </section>
205
  </section>
188
 
206
 
189
  <section>
207
  <section>
190
    <title>Userspace view</title>
208
    <title>Userspace view</title>
Line 208... Line 226...
208
      <emphasis>manager</emphasis> task is found or a new one is created and
226
      <emphasis>manager</emphasis> task is found or a new one is created and
209
      control is transfered to this manager task. The manager tasks pops
227
      control is transfered to this manager task. The manager tasks pops
210
      messages from the answerbox and puts them into appropriate queues of
228
      messages from the answerbox and puts them into appropriate queues of
211
      running tasks. If a task waiting for a message is not running, the
229
      running tasks. If a task waiting for a message is not running, the
212
      control is transferred to it.</para>
230
      control is transferred to it.</para>
-
 
231
     
-
 
232
      <figure float="1">
-
 
233
        <mediaobject id="ipc2">
-
 
234
          <imageobject role="pdf">
-
 
235
            <imagedata fileref="images/ipc2.pdf" format="PDF" />
-
 
236
          </imageobject>
-
 
237
 
-
 
238
          <imageobject role="html">
-
 
239
            <imagedata fileref="images/ipc2.png" format="PNG" />
-
 
240
          </imageobject>
-
 
241
 
-
 
242
          <imageobject role="fop">
-
 
243
            <imagedata fileref="images/ipc2.svg" format="SVG" />
-
 
244
          </imageobject>
-
 
245
        </mediaobject>
-
 
246
 
-
 
247
        <title>Single point of entry</title>
-
 
248
      </figure>
-
 
249
 
213
 
250
 
214
      <para>Very similar situation arises when a task decides to send a lot of
251
      <para>Very similar situation arises when a task decides to send a lot of
215
      messages and reaches kernel limit of asynchronous messages. In such
252
      messages and reaches kernel limit of asynchronous messages. In such
216
      situation 2 remedies are available - the userspace liberary can either
253
      situation 2 remedies are available - the userspace liberary can either
217
      cache the message locally and resend the message when some answers
254
      cache the message locally and resend the message when some answers