Subversion Repositories HelenOS-doc

Rev

Rev 155 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 155 Rev 156
Line 1... Line 1...
1
\chapter{Specification}
1
\chapter{Goals and Achievements}
2
 
2
 
3
\section{Overall Conception}
3
\section{Overall Conception}
4
 
4
 
5
General-purpose and portable operating system with elements of
5
General-purpose and portable operating system with elements of
6
microkernel design and fully preemptive kernel.
6
microkernel design and fully preemptive kernel.
Line 32... Line 32...
32
       management and protection, hardware resource management, IPC).
32
       management and protection, hardware resource management, IPC).
33
       Device drivers, filesystems, network stacks, etc. will be
33
       Device drivers, filesystems, network stacks, etc. will be
34
       implemented in user-space.
34
       implemented in user-space.
35
\end{itemize}
35
\end{itemize}
36
 
36
 
-
 
37
{\em The overall conecption of the kernel design was completely met. The kernel
-
 
38
is fully preemptible, SMP ready with fine-grained locking. If possible,
-
 
39
device drivers are implemented as standalone userspace tasks. HelenOS
-
 
40
fully supports statically linked tasks. Both userspace tasks and kernel
-
 
41
tasks are supported (N:M multithreading model).
-
 
42
 
-
 
43
The kernel was successfully ported to 5 architectures with one other
-
 
44
architecture to come. The interfaces in the kernel are designed in such
-
 
45
a way to fully utilize specifics of every platform, e.g. ASID and RID
-
 
46
allocation in MIPS and IA64, two stacks for IA64 and SMP routines.
-
 
47
}
-
 
48
 
37
\section[1a]{Research Domains}
49
\section[1a]{Research Domains}
38
 
50
 
39
Following features can be eventually implemented as research subjects,
51
Following features can be eventually implemented as research subjects,
40
but are optional to the overall design of the system:
52
but are optional to the overall design of the system:
41
 
53
 
42
\begin{itemize}
54
\begin{itemize}
43
 \item Kernel-level virtualization: Apart from some standard security
55
 \item Kernel-level virtualization: Apart from some standard security
44
       model (i.e. unix-like or any other) the OS might support
56
       model (i.e. unix-like or any other) the OS might support
45
       kernel-level context separation allowing to run more virtual
57
       kernel-level context separation allowing to run more virtual
46
       operating environments on a single physical machine.
58
       operating environments on a single physical machine.
-
 
59
 
-
 
60
       {\em Kernel-level virtualization was not attempted, although the microkernel
-
 
61
design by itself allows completely different namespace simply by connecting
-
 
62
the task to different name service daemon. Because new IPC connections can
-
 
63
be created only through existing paths in the graph of the connections,
-
 
64
messages can never flow between unconnected components of the graph.
-
 
65
}
47
 \item Framework for running GNU/Linux applications: There should be no
66
 \item Framework for running GNU/Linux applications: There should be no
48
       syscall or native API compatibility, but rather some kind of
67
       syscall or native API compatibility, but rather some kind of
49
       compile-time layer (libc and other shared libraries) allowing to
68
       compile-time layer (libc and other shared libraries) allowing to
50
       compile common GNU/Linux applications from sources.
69
       compile common GNU/Linux applications from sources.
-
 
70
 
-
 
71
       {\em Two applications were ported with little effort - libpci and tetris. The
-
 
72
     porting of the tetris consisted mainly in rewriting termios dependent
-
 
73
     code. The libc library contains emulation layer for the most common functions.}
-
 
74
 
51
 \item Object/message paradigm: In the contrary to Unix file paradigm
75
 \item Object/message paradigm: In the contrary to Unix file paradigm
52
       (where every object in the system is represented by a file - even
76
       (where every object in the system is represented by a file - even
53
       if there is no consistent mapping from the given object's methods
77
       if there is no consistent mapping from the given object's methods
54
       to generic file methods), HelenOS might have a tree of objects
78
       to generic file methods), HelenOS might have a tree of objects
55
       instead of a tree of files. Each object in the tree can support an
79
       instead of a tree of files. Each object in the tree can support an
56
       arbitrary set of messages and files are those objects which
80
       arbitrary set of messages and files are those objects which
57
       support the set of messages representing file methods (i.e. open,
81
       support the set of messages representing file methods (i.e. open,
58
       close, read, write, seek, etc.). All objects might support several
82
       close, read, write, seek, etc.). All objects might support several
59
       compulsory messages (GetName, GetSupportedMessages, etc.). The
83
       compulsory messages (GetName, GetSupportedMessages, etc.). The
60
       message passing mechanism will be synchronous.
84
       message passing mechanism will be synchronous.
-
 
85
 
-
 
86
       {\em Every IPC message contains a field that specifies method number. However,
-
 
87
     tree of objects or any more complex functionality were not implemented. }
61
\end{itemize}
88
\end{itemize}
-
 
89
{\em However, because we have decided to use asynchronous message passing,
-
 
90
a framework was needed to facilitate reasonably synchronous application view.
-
 
91
This framework, heavily using userspace thread switching, allows writing
-
 
92
transparent applications without the hassle usually connected with
-
 
93
asynchronous applications, at the same time being easily portable to
-
 
94
kernel-threaded environment. }
62
 
95
 
63
\section{Particular features}
96
\section{Particular features}
64
 
97
 
65
\begin{itemize}
98
\begin{itemize}
66
 \item Kernel features
99
 \item Kernel features
67
       \begin{itemize}
100
       \begin{itemize}
68
        \item Preemptive multiprocessing, SMP support, threads (tasks)
101
        \item Preemptive multiprocessing, SMP support, threads (tasks)
69
              \begin{itemize}
102
              \begin{itemize}
70
               \item Simple scheduler (but more complex than round-robin),
103
               \item Simple scheduler (but more complex than round-robin),
71
                     with threads as basic scheduling element
104
                     with threads as basic scheduling element. {\em Achieved.}
72
               \item Support for thread priorities (possibly classes of
105
               \item Support for thread priorities (possibly classes of
73
                     priorities for user-space tasks)
106
                     priorities for user-space tasks). {\em Achieved}
-
 
107
 
74
               \item Support for SMP CPU bounding
108
               \item Support for SMP CPU bounding. {\em Achieved.}
75
               \item Utilization of non-boot CPU(s)
109
               \item Utilization of non-boot CPU(s). {\em Achieved.}
76
               \item Support for user-space threads (tasks as sets of
110
               \item Support for user-space threads (tasks as sets of
77
                     threads)
111
                     threads).  {\em Achieved.}
-
 
112
 
78
               \item Support for kernel threads (independent code executed
113
               \item Support for kernel threads (independent code executed
79
                     within the kernel)
114
                     within the kernel) {\em Achieved.}
80
              \end{itemize}
115
              \end{itemize}
81
        \item Kernel synchronization primitives, small granularity
116
        \item Kernel synchronization primitives, small granularity
82
              synchronization (preemptive kernel)
117
              synchronization (preemptive kernel)
83
              \begin{itemize}
118
              \begin{itemize}
84
               \item Semaphores, mutexes, condition variables, RW-locks,
119
               \item Semaphores, mutexes, condition variables, RW-locks,
85
                     spin-locks, etc.
120
                     spin-locks, etc. {\em Achieved.}
86
               \item No "big kernel lock"
121
               \item No "big kernel lock". {\em Achieved.}
87
              \end{itemize}
122
              \end{itemize}
-
 
123
 
88
        \item Physical and virtual memory management
124
        \item Physical and virtual memory management
89
              \begin{itemize}
125
              \begin{itemize}
90
               \item Proper handling of physical memory regions
126
               \item Proper handling of physical memory regions. {\em Achieved.}
-
 
127
         
91
               \item Physical memory heap (allocating of continuous blocks of
128
               \item Physical memory heap (allocating of continuous blocks of
92
                     physical memory)
129
                     physical memory). {\em Achieved.}
93
               \item Arbitrary number of independent virtual memory mappings
130
               \item Arbitrary number of independent virtual memory mappings
94
                     (both for threads and internal kernel usage)
131
                     (both for threads and internal kernel usage). {\em Achieved.}
95
               \item Kernel allocator in virtual memory (buddy/slab)
132
               \item Kernel allocator in virtual memory (buddy/slab). {\em Achieved.}
96
               \item Named (text, stack, heap) and unnamed virtual memory
133
               \item Named (text, stack, heap) and unnamed virtual memory
97
                     areas
134
                     areas. {\em Achieved.}
98
               \item Copying and sharing pages between different memory
135
               \item Copying and sharing pages between different memory
99
                     mappings
136
                     mappings. {\em Achieved.}
100
              \end{itemize}
137
              \end{itemize}
101
        \item Basic hardware handling
138
        \item Basic hardware handling
102
              \begin{itemize}
139
              \begin{itemize}
103
               \item Handling of basic boot-time hardware (CPU, PCI buses,
140
               \item Handling of basic boot-time hardware (CPU, PCI buses,
104
                     memory, display, keyboard, RTC, etc.) in kernel
141
                     memory, display, keyboard, RTC, etc.) in kernel. {\em Achieved.}
105
               \item Handling of specific hardware resources which are
142
               \item Handling of specific hardware resources which are
106
                     fundamentaly unreachable from user-space on given
143
                     fundamentaly unreachable from user-space on given
107
                     platform
144
                     platform. {\em Achieved.}
108
              \end{itemize}
145
              \end{itemize}
109
        \item IPC, user-space hardware access framework
146
        \item IPC, user-space hardware access framework
110
              \begin{itemize}
147
              \begin{itemize}
111
               \item Abstraction for implementing inter-process communication
148
               \item Abstraction for implementing inter-process communication
112
                     (message passing, etc.)
149
                     (message passing, etc.). {\em Achieved.}
113
               \item Interface for enabling the user-space threads to gain
150
               \item Interface for enabling the user-space threads to gain
114
                     access and manage hardware resources (with kernel
151
                     access and manage hardware resources (with kernel
115
                     modules where needed)
152
                     modules where needed). {\em Achieved.}
116
              \end{itemize}
153
              \end{itemize}
117
       \item User-space features
154
       \item User-space features
118
             \begin{itemize}
155
             \begin{itemize}
119
              \item Basic API
156
              \item Basic API
120
                    \begin{itemize}
157
                    \begin{itemize}
121
                     \item Memory management API (memory regions creation,
158
                     \item Memory management API (memory regions creation,
122
                           descruction, resizing)
159
                           descruction, resizing). {\em Achieved.}
123
                     \item Task/thread management API
160
                     \item Task/thread management API. {\em Achieved.}
124
                     \item Synchronization API
161
                     \item Synchronization API. {\em Futexes implemented.}
125
                    \end{itemize}
162
                    \end{itemize}
126
             \end{itemize}
163
             \end{itemize}
127
     \end{itemize}
164
     \end{itemize}
128
\end{itemize}
165
\end{itemize}
129
 
166
 
Line 133... Line 170...
133
 \item Supported platforms
170
 \item Supported platforms
134
       \begin{itemize}
171
       \begin{itemize}
135
        \item Real hardware support
172
        \item Real hardware support
136
              \begin{itemize}
173
              \begin{itemize}
137
               \item IA-32 (will be tested on multiple consumer Intel Pentium~4,
174
               \item IA-32 (will be tested on multiple consumer Intel Pentium~4,
138
                     Intel Pentium~M, AMD Athlon~XP and AMD Athlon~MP machines)
175
                     Intel Pentium~M, AMD Athlon~XP and AMD Athlon~MP machines)
-
 
176
 
-
 
177
                 {\em Runs on comodity hardware. Tested on several multiprocessor computers.}
139
               \item PowerPC (will be tested on a consumer IBM PowerPC G5 machine)
178
               \item PowerPC (will be tested on a consumer IBM PowerPC G5 machine)
-
 
179
                 {\em To some extent runs on the G4 machine. G5 machine is a 64-bit architecture completely different from 32-bit port that was attampted. }
140
              \end{itemize}
180
              \end{itemize}
141
        \item Emulated support
181
        \item Emulated support
142
              \begin{itemize}
182
              \begin{itemize}
143
               \item MIPS (will be tested in MSIM R4000 simulator)
183
               \item MIPS (will be tested in MSIM R4000 simulator)
-
 
184
                 {\em Tested in msim, gxemul and partially in simics simulators. Booted kernel on SGI Indy, however no real hardware input/output support was attempted.}
144
               \item IA-64 (will be tested in Ski simulator)
185
               \item IA-64 (will be tested in Ski simulator)
-
 
186
                 {\em Tested in Ski simulator.}
145
               \item AMD64 (will be tested in Simics simulator)
187
               \item AMD64 (will be tested in Simics simulator)
-
 
188
                 {\em Tested on single-processor computer. Runs in simics, bochs and qemu simulators.}
146
              \end{itemize}
189
              \end{itemize}
147
       \end{itemize}
190
       \end{itemize}
148
\end{itemize}
191
\end{itemize}