27 to <codeph>fork()</codeph> and <codeph>exec()</codeph> for creating child |
27 to <codeph>fork()</codeph> and <codeph>exec()</codeph> for creating child |
28 processes</xref></p></li> |
28 processes</xref></p></li> |
29 <li><p><xref href="GUID-545DA961-217E-49CA-A90E-7A41E2C03A99.dita">Forking without <codeph>exec()</codeph></xref></p></li> |
29 <li><p><xref href="GUID-545DA961-217E-49CA-A90E-7A41E2C03A99.dita">Forking without <codeph>exec()</codeph></xref></p></li> |
30 <li><p><xref href="GUID-B58D282E-E6EC-4AE1-96DB-30A5FB850563.dita"><codeph>exec()</codeph> without |
30 <li><p><xref href="GUID-B58D282E-E6EC-4AE1-96DB-30A5FB850563.dita"><codeph>exec()</codeph> without |
31 forking using <apiname>posix_spawn()</apiname></xref></p></li> |
31 forking using <apiname>posix_spawn()</apiname></xref></p></li> |
32 </ul> <p><b>Omission of fork()</b> </p> <p>A Unix-like kernel |
32 </ul> <p><b>Omission of fork()</b> </p> <p>A Unix-like kernel is designed |
33 is designed with the two stage process creation in mind. On Symbian platform |
33 with the two stage process creation in mind. On the Symbian platform (and |
34 (and Microsoft Windows®) the kernel was designed to create a process, which |
34 Microsoft Windows®), the kernel was designed to create a process, which runs |
35 runs a single executable, in a single step. </p> <p>P.I.P.S. does not implement |
35 a single executable, in a single step. </p> <p>P.I.P.S. does not implement |
36 the <codeph>fork()</codeph> operation because this would require an entirely |
36 the <codeph>fork()</codeph> operation because this would require an entirely |
37 new way of dealing with processes in the kernel and memory model. For example, |
37 new way of dealing with processes in the kernel and memory model. For example, |
38 duplicating the address space of an existing process was not something that |
38 duplicating the address space of an existing process was not something that |
39 was considered in the Symbian platform kernel's design. Symbian took this |
39 was considered in the Symbian platform kernel's design. Symbian took this |
40 decision as the effort involved in customising this feature would be more |
40 decision as the effort involved in customising this feature would be more |
42 in the provision of Pthreads. For more information about Pthreads, see the <xref href="http://en.wikipedia.org/wiki/POSIX_Threads" scope="external">Pthread |
42 in the provision of Pthreads. For more information about Pthreads, see the <xref href="http://en.wikipedia.org/wiki/POSIX_Threads" scope="external">Pthread |
43 Wikipage</xref>. </p> <p><b>Omission of exec()</b> </p> <p>On Unix-like systems, <codeph>exec()</codeph> is |
43 Wikipage</xref>. </p> <p><b>Omission of exec()</b> </p> <p>On Unix-like systems, <codeph>exec()</codeph> is |
44 the standard way to load a process image into memory. Only the initialisation |
44 the standard way to load a process image into memory. Only the initialisation |
45 process is loaded directly into a new address space (special case code in |
45 process is loaded directly into a new address space (special case code in |
46 the kernel), all other processes are loaded into an existing address space |
46 the kernel), all other processes are loaded into an existing address space |
47 which was initially created by forking. </p> <p>On Symbian platform, the only |
47 which was initially created by forking. </p> <p>On the Symbian |
48 way to load a process image into memory is using the loader. It assumes that |
48 platform, the only way to load a process image into memory is using the loader. |
49 the image is being loaded as a new process - one that owns no resources, has |
49 It assumes that the image is being loaded as a new process - one that owns |
50 no open handles and so on. The change to the loader and any associated kernel |
50 no resources, has no open handles and so on. The change to the loader and |
51 changes, to support the <codeph>exec()</codeph> function were deemed to be |
51 any associated kernel changes, to support the <codeph>exec()</codeph> function |
52 too risky. </p> <p><b>Generic IPC</b> </p> <p>P.I.P.S. supports two types |
52 were deemed to be too risky. </p> <p><b>Generic IPC</b> </p> <p>P.I.P.S. supports |
53 of Inter-Process Communication (IPC) between processes or threads: </p> <ul> |
53 two types of Inter-Process Communication (IPC) between processes or threads: </p> <ul> |
54 <li><p> <b>Pipes (named and unnamed):</b> Unnamed pipes are created using <xref href="GUID-EC7F85FF-FD4E-324C-8D01-EF6F7E7A79FE.dita"><apiname>pipe()</apiname></xref> and |
54 <li><p> <b>Pipes (named and unnamed):</b> Unnamed pipes are created using <xref href="GUID-EC7F85FF-FD4E-324C-8D01-EF6F7E7A79FE.dita"><apiname>pipe()</apiname></xref> and |
55 named pipes are created using <xref href="GUID-F4749DAA-1B29-3D1D-A3AA-0D52B851E501.dita"><apiname>mkfifo()</apiname></xref>. Pipe-based communication |
55 named pipes are created using <xref href="GUID-F4749DAA-1B29-3D1D-A3AA-0D52B851E501.dita"><apiname>mkfifo()</apiname></xref>. Pipe-based communication |
56 is also possible between a parent and a child process when the child is created |
56 is also possible between a parent and a child process when the child is created |
57 using <xref href="GUID-A9DB6E7C-B8D6-377A-BBE6-39E0A7A09E5D.dita"><apiname>popen()</apiname></xref> or <xref href="GUID-A1E2E172-C4E4-30FB-99CF-E4140E31DF59.dita"><apiname>popen3()</apiname></xref>. </p></li> |
57 using <xref href="GUID-A9DB6E7C-B8D6-377A-BBE6-39E0A7A09E5D.dita"><apiname>popen()</apiname></xref> or <xref href="GUID-A1E2E172-C4E4-30FB-99CF-E4140E31DF59.dita"><apiname>popen3()</apiname></xref>. </p></li> |
58 <li><p> <b>Local file sockets:</b> These correspond to sockets created with <codeph>AF_LOCAL/PF_LOCAL/AF_UNIX</codeph> as |
58 <li><p> <b>Local file sockets:</b> These correspond to sockets created with <codeph>AF_LOCAL/PF_LOCAL/AF_UNIX</codeph> as |