Annotation of prex-old/doc/html/doc/overview.html, Revision 1.1.1.1.2.1
1.1 nbrk 1: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2: <html>
3: <head>
4: <title>Prex Technology Overview</title>
5: <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
6: <meta name="keywords" content="Prex, embedded, real-time, operating system, RTOS, open source, free">
7: <meta name="author" content="Kohsuke Ohtani">
8: <link rel="stylesheet" type="text/css" href="../default.css" media="screen">
9: <link rel="stylesheet" type="text/css" href="../print.css" media="print">
10: </head>
11: <body>
12: <div id="top">
13: </div>
14: <div id="middle">
15:
16: <table id="content" cellpadding="0" cellspacing="0">
17: <tbody>
18:
19: <tr>
20: <td id="header" colspan="2" valign="top">
21: <table width="100%" border="0" cellspacing="0" cellpadding="0">
22: <tr>
23: <td id="logo">
24: <a href="http://prex.sourceforge.net/">
25: <img alt="Prex logo" src="../img/logo.gif" border="0"
1.1.1.1.2.1! nbrk 26: style="width: 250px; height: 54px;"></a>
1.1 nbrk 27: </td>
28: <td id="brief" align="right" valign="bottom">
29: An Open Source, Royalty-free,<br>
30: Real-time Operating System
31: </td>
32: </tr>
33: </table>
34: </td>
35: </tr>
36:
37: <tr>
38: <td id="directory" style="vertical-align: top;">
39: <a href="http://prex.sourceforge.net/">Prex Home</a> >
40: <a href="index.html">Document Index</a> >
41: Technology Overview
42: </tr>
43: <tr><td class="pad" colspan="2" style="vertical-align: top;"></td></tr>
44:
45: <tr>
1.1.1.1.2.1! nbrk 46: <td id="doc" style="vertical-align: top;">
1.1 nbrk 47: <h1>Prex Technology Overview</h1>
48:
49: <i>Version 1.1, 2005/09/01</i>
50:
51: <h3>Table of Contents</h3>
52: <ul>
53: <li><a href="#component">Prex Components</a></li>
54: <li><a href="#microkernel">Microkernel</a></li>
55: <li><a href="#driver">Device Drivers</a></li>
56: <li><a href="#server">System Servers</a></li>
57: <li><a href="#lib">Emulation Libraries</a></li>
58: <li><a href="#loader">Boot Loader</a></li>
59: </ul>
60: <br>
61:
62: <h2 id="component">Prex Components</h2>
63: <p>
64: The following figure illustrates the Prex components.
65: </p>
66: <img alt="Prex Overview" src="img/overview.gif" border="1"
67: style="width: 600px; height: 416px;"><br>
68:
69: <i><b>Figure 1. Prex Components</b></i>
70: <p>
71: The Prex microkernel provides only fundamental functions to abstract
72: a processor and minimum hardware. In addition, it provides some real-time
73: support functions for a real-time task.
74: The microkernel also provides standard kernel services
75: for the device drivers.
76: There exists a strict interface for the thin layer called
77: as "Architecture Dependent Layer" in the microkernel.
78: </p>
79: <p>
80: The other basic OS functions like process, file system, networking etc.,
81: are provided by system server tasks.
82: There is no characteristic difference between server tasks and normal tasks.
83: The tasks will communicate with other by using IPC message via a microkernel.
84: Prex will also provide some interface emulation libraries for an application
85: interoperability.
86: Although the server tasks are required to run UNIX processes, a native
87: real-time task can work without any system servers.
88:
89: </p>
90:
91: <h2 id="microkernel">Microkernel</h2>
92:
93: The design policies for the Prex kernel are as follows:
94: <ul>
95: <li><b>Simple & Small</b>: Move OS functions to user mode as much as possible.</li>
96: <li><b>Easy to Port</b>: Define common interface for various processor architectures.</li>
97: <li><b>POSIX Support</b>: Provide minimum kernel support for POSIX.</li>
98: <li><b>Real-time Capable</b>: Execute native real-time tasks directory on the Prex kernel.</li>
99: </ul>
100:
101: Kernel has responsibility to handle the following items.
102: <ul>
103: <li><b>Object</b> - holds a queue of messages.</li>
104: <li><b>Message</b> - is used to communicate between threads.</li>
105: <li><b>Task</b> - is a container which holds threads, memory maps, and objects.</li>
106: <li><b>Thread</b> - is a minimum execution unit including processor's register state.</li>
107: <li><b>Scheduler</b> - decides which thread can use processor.</li>
108: <li><b>Virtual Memory</b> - provides memory protection, virtual address mapping.</li>
109: <li><b>Timer</b> - manages timer lists for applications & drivers.</li>
110: <li><b>Exception</b> - is a hardware interrupt or event from processor.</li>
111: <li><b>Device</b> - provides common interface to access device drivers.</li>
112: <li><b>Synchronize Object</b> - supports mutexes, condition variables, semaphores.</li>
113: <li><b>System</b> - provides some useful system functions. e.g. statistics, log, time etc.</li>
114: </ul>
115:
116: <h2 id="driver">Device Drivers</h2>
117: <p>
118: Prex device drivers work in kernel mode.
119: All device drivers are stored in one single driver module, and this is
120: separated from the kernel module.
121: The driver module is linked with the kernel at boot time, and all device
122: drivers are initialized at that time.
123: </p>
124: <p>
125: The interface between the kernel and drivers are defined clearly as
126: "Driver Kernel Interface (DKI)". The kernel provides the following services
127: for device drivers.
128: </p>
129: <ul>
130: <li>Device object service</li>
131: <li>Kernel memory allocation</li>
132: <li>Physical page allocation</li>
133: <li>Interrupt handling service</li>
134: <li>Scheduler service</li>
135: <li>Timer service</li>
136: <li>Debug service</li>
137: </ul>
138:
139: <h2 id="server">System Servers</h2>
140: <p>
141: The Prex tasks can communicate with each other by sending message to the
142: specific object, as illustrated below.
143: </p>
144:
145: <img alt="Microkernel bus" src="img/ipc.gif" border="1"
146: style="width: 482px; height: 333px;"><br>
147:
148: <i><b>Figure 2. Prex message passing</b></i>
149:
150: <p>
151: Prex provides some standard server tasks to support generic OS functions
152: that are removed from the kernel. The server tasks include:
153: </p>
154: <ul>
155: <li>Process server</li>
156: <li>File system server</li>
157: <li>Exec server</li>
158: <li>Network server</li>
159: <li>Boot server</li>
160: </ul>
161: <p>
162: A server task will create its object named like "fs", "proc", or "exec"
163: in the kernel object name space.
164: Each user mode task will send a message to these objects in order to use
165: the server services.
166: </p>
167: <p>
168: A server task can re-send the received message to another task.
169: This mechanism can allow servers to "forward" the specific message
170: to another server.
171: For example, the proxy server will forward a received message to
172: the remote proxy server via network.
173: </p>
174:
175: <h2 id="lib">Emulation Libraries</h2>
176: <p>
177: Prex provides some libraries to emulate POSIX interfaces. They will include
178: standard UNIX system calls, pthread, and real-time extension.
179: The typical works of these libraries are to pack the application's
180: request into a message, and send it to the appropriate server.
181: It will encapsulate the message structure defined by each server task.
182: For example, an application can use fork() system call as a library routine,
183: which will automatically send the message to the process server.
184: So, there is no need to modify the source code of the existing UNIX
185: applications to run it on Prex.
186: </p>
187:
188: <img alt="OS Emulation" src="img/emulate.gif" border="1"
189: style="width: 485px; height: 331px;"><br>
190: <i><b>Figure 3. OS Emulation</b></i>
191:
192: <p>
193: The emulation libraries can be made not only for POSIX
194: but also for API of other OS. This allows Prex to support the execution
195: of various different OS applications without changing the system servers.
196: The developers will benefit from the source level compatibility of
197: existing applications.
198: </p>
199:
200: <h2 id="loader">Boot Loader</h2>
201: <p>
202: Prex provides the OS boot loader if it is required on the target platform.
203: The boot loader will support the following minimum functions:
204: </p>
205: <ul>
206: <li><b>Minimum Setup:</b> Program some essential registers for processor
207: or hardware. e.g. disabling interrupts</li>
208: <li><b>Boot Information:</b> Collect some boot information if it needed. e.g. memory size</li>
209: <li><b>Program Loading:</b> Copy some programs to RAM if it is needed. e.g. kernel, driver,
210: boot tasks etc.</li>
211: </ul>
212: <p>
213: Since the boot mechanism depends on the hardware of each system,
214: its design is not strictly defined.<br>
215: Note: It's better to use existing boot loader if possible.
216: </p>
217:
218: </td>
219: </tr>
220: <tr>
221: <td id="footer" colspan="2" style="vertical-align: top;">
222: <a href="http://sourceforge.net">
223: <img src="http://sourceforge.net/sflogo.php?group_id=132028&type=1"
224: alt="SourceForge.net Logo" border="0" height="31" width="88"></a><br>
225: Copyright© 2005-2007 Kohsuke Ohtani
226: </td>
227: </tr>
228:
229: </tbody>
230: </table>
231:
232: </div>
233: <div id="bottom"></div>
234:
235: </body>
236: </html>
CVSweb