Annotation of prex/doc/html/doc/overview.html, Revision 1.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"
! 26: style="width: 250px; height: 54px;"></a>
! 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>
! 46: <td id="doc" style="vertical-align: top;">
! 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