Subversion Repositories HelenOS-doc

Rev

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

Rev 51 Rev 78
Line 12... Line 12...
12
to fill gaps after functionality that the genuine HelenOS code did
12
to fill gaps after functionality that the genuine HelenOS code did
13
not provide itself.
13
not provide itself.
14
 
14
 
15
There is simply too much third party software that is somehow related to
15
There is simply too much third party software that is somehow related to
16
HelenOS to be covered all. This chapter attempts to present our experience
16
HelenOS to be covered all. This chapter attempts to present our experience
17
with the key softare tools, programs and libraries.
17
with the key software tools, programs and libraries.
18
 
18
 
19
\section{Communication tools}
19
\section{Communication tools}
20
Although the developers know each other in person, the development, with the
20
Although the developers know each other in person, the development, with the
21
exception of kernel camps, has been pretty much independent as far as locality
21
exception of kernel camps, has been pretty much independent as far as locality
22
and time goes. In order to work effectively, we have established several communication
22
and time goes. In order to work effectively, we have established several communication
Line 115... Line 115...
115
to control subsriptions and search mailing list archives on-line.
115
to control subsriptions and search mailing list archives on-line.
116
\end{description}
116
\end{description}
117
 
117
 
118
\section{Third party components of HelenOS}
118
\section{Third party components of HelenOS}
119
HelenOS itself contains third party software. In the first place, amd64 and ia32 architectures
119
HelenOS itself contains third party software. In the first place, amd64 and ia32 architectures
120
make use of GNU Grub boot loader. This software replaced the original limited boot loader
120
make use of the GNU Grub boot loader. This software replaced the original limited boot loader
121
after the Kernel Camp 2005 when {\MD} had made HelenOS Multiboot specification compliant. Because of
121
after the Kernel Camp 2005 when {\MD} had made HelenOS Multiboot specification compliant. Because of
122
Grub, HelenOS can be booted from several types of devices. More importantly, we use
122
Grub, HelenOS can be booted from several types of devices. More importantly, we use
123
Grub to load HelenOS userspace modules as well.
123
Grub to load HelenOS userspace modules as well.
124
 
124
 
125
Another third-party piece of the HelenOS operating system is the userspace {\tt malloc()}.
125
Another third-party piece of the HelenOS operating system is the userspace {\tt malloc()}.
Line 127... Line 127...
127
domain {\tt dlmalloc} instead. This allocator could be easily integrated into our uspace tree
127
domain {\tt dlmalloc} instead. This allocator could be easily integrated into our uspace tree
128
and has proven itself in other projects as well. Its derivative, {\tt ptmalloc}, has been part of the
128
and has proven itself in other projects as well. Its derivative, {\tt ptmalloc}, has been part of the
129
GNU C library for some time. However, the version we are using is not optimized for SMP and multithreading.
129
GNU C library for some time. However, the version we are using is not optimized for SMP and multithreading.
130
We plan to eventually replace it with another allocator.
130
We plan to eventually replace it with another allocator.
131
 
131
 
132
Finally, the {\tt pci} userspace task is using the {\tt libpci} library. The
132
Next, the {\tt pci} userspace task is using the {\tt libpci} library. The
133
library was simplified and ported to HelenOS. Even though filesystem
133
library was simplified and ported to HelenOS. Even though filesystem
134
calls were removed from the library, it still heavily depends on {\tt libc}.
134
calls were removed from the library, it still heavily depends on {\tt libc}.
135
By porting {\tt libpci} to HelenOS, we demonstrated that applications and libraries
135
By porting {\tt libpci} to HelenOS, we demonstrated that applications and libraries
136
are, given enough effort, portable to HelenOS.
136
are, given enough effort, portable to HelenOS.
137
 
137
 
-
 
138
Finally, we demonstrated the idea presented in the previous paragraph by porting
-
 
139
over 13 years old BSD game of {\tt tetris} to HelenOS. This particular version
-
 
140
of tetris looks almost the same both on other people's operating systems and on HelenOS.
-
 
141
Similar to {\tt libpci}, {\tt tetris} had to be modified in order to compile and run.
-
 
142
The filesystem calls were removed or replaced as well as references to terminal I/O
-
 
143
 calls.
-
 
144
 
138
\section{Build tools}
145
\section{Build tools}
139
Assembler, linker and compiler are by all means the very focal point of attention
146
Assembler, linker and compiler are by all means the very focal point of attention
140
of all operating system projects. Quality of these tools influences
147
of all operating system projects. Quality of these tools influences
141
operating system performance and, what is more important, stability. HelenOS has
148
operating system performance and, what is more important, stability. HelenOS has
142
been tailored to build with GNU {\tt binutils} (i.e. the assembler and linker) and GNU~{\tt gcc}
149
been tailored to build with GNU {\tt binutils}\cite{binutils} (i.e. the assembler and linker) and GNU~{\tt gcc}\cite{gcc}
143
(i.e. the compiler). There is only little chance that it could be compiled and
150
(i.e. the compiler). There is only little chance that it could be compiled and
144
linked using some other tools unless those tools are compatible with the GNU build tools.
151
linked using some other tools unless those tools are compatible with the GNU build tools.
145
 
152
 
146
As our project declares support for five different processor architectures,
153
As our project declares support for five different processor architectures,
147
we needed to have five different flavors of the build utilities installed.
154
we needed to have five different flavors of the build utilities installed.
Line 195... Line 202...
195
From the second point of view, we have tested these programs by our operating system.
202
From the second point of view, we have tested these programs by our operating system.
196
Because of the scope and uniqueness of this testing and because we did find some issues,
203
Because of the scope and uniqueness of this testing and because we did find some issues,
197
we want to dedicate some more space to what we have found.
204
we want to dedicate some more space to what we have found.
198
 
205
 
199
\subsection{Bochs}
206
\subsection{Bochs}
200
Bochs has been used to develop the SPARTAN kernel since its beginning in 2001.
207
Bochs\cite{bochs} has been used to develop the SPARTAN kernel since its beginning in 2001.
201
It is capable of emulating ia32 machine and for some time also amd64.
208
It is capable of emulating ia32 machine and for some time also amd64.
202
Bochs is an emulator and thus the slowest from virtual environments capable
209
Bochs is an emulator and thus the slowest from virtual environments capable
203
of simulating the same cathegory of hardware. On the other hand, it is extremely
210
of simulating the same cathegory of hardware. On the other hand, it is extremely
204
portable, compared to much faster virtualizers and emulators using dynamic translation
211
portable, compared to much faster virtualizers and emulators using dynamic translation
205
of instructions. Lately, there have been some plans to develop or port dynamic translation
212
of instructions. Lately, there have been some plans to develop or port dynamic translation
Line 220... Line 227...
220
simulation, but this has also proven not very useful as we often needed to debug
227
simulation, but this has also proven not very useful as we often needed to debug
221
problems that existed only in multiprocessor configurations, which {\tt gdb}
228
problems that existed only in multiprocessor configurations, which {\tt gdb}
222
does not understand.
229
does not understand.
223
 
230
 
224
\subsection{GXemul}
231
\subsection{GXemul}
225
GXemul is an emulator of several processor architectures. Nevertheless, we have
232
GXemul\cite{gxemul} is an emulator of several processor architectures. Nevertheless, we have
226
used it only for mips32 emulation in both little-endian and big-endian modes.
233
used it only for mips32 emulation in both little-endian and big-endian modes.
227
It seems to be pretty featurefull and evolving but we don't use all its functionality.
234
It seems to be pretty featurefull and evolving but we don't use all its functionality.
228
GXemul is very user friendly and has debugging features. It is more realistic
235
GXemul is very user friendly and has debugging features. It is more realistic
229
than msim. However, our newly introduced TLS support triggered a bug in the {\tt rdhwr}
236
than msim. However, our newly introduced TLS support triggered a bug in the {\tt rdhwr}
230
instruction emulation while msim functioned as expected. Fortunatelly, the author
237
instruction emulation while msim functioned as expected. Fortunatelly, the author
231
of GXemul is very cooperative and has fixed the problem for future versions as well as
238
of GXemul is very cooperative and has fixed the problem for future versions as well as
232
provided a quick hack for the old version.
239
provided a quick hack for the old version.
233
 
240
 
234
\subsection{msim}
241
\subsection{msim}
235
msim has been our first mips32 simulator. It simulates 32-bit side of R4000 processor.
242
msim\cite{msim} has been our first mips32 simulator. It simulates 32-bit side of R4000 processor.
236
Its simulated environment is not very realistic, but the processor simulation
243
Its simulated environment is not very realistic, but the processor simulation
237
is good enough for operating system development. In this regard, the simulator is
244
is good enough for operating system development. In this regard, the simulator is
238
comparable to HP's ia64 simulator Ski. Another similar aspect of these two is
245
comparable to HP's ia64 simulator Ski. Another similar aspect of these two is
239
relatively strong debugger.
246
relatively strong debugger.
240
 
247
 
Line 243... Line 250...
243
Curiously, this simulator contained the biggest number of defects and inaccuracies
250
Curiously, this simulator contained the biggest number of defects and inaccuracies
244
that we have ever discovered in a simulator.  Fortunately, all of them have been
251
that we have ever discovered in a simulator.  Fortunately, all of them have been
245
eventually fixed.
252
eventually fixed.
246
 
253
 
247
\subsection{PearPC}
254
\subsection{PearPC}
248
PearPC is the only emulator on which we have run ppc32 port of HelenOS. It has
255
PearPC\cite{pearpc} is the only emulator on which we have run ppc32 port of HelenOS. It has
249
no debugging features, but fortunatelly its sources are available under
256
no debugging features, but fortunatelly its sources are available under
250
an open source license. This enabled {\OP} and {\MD} to alter its sources
257
an open source license. This enabled {\OP} and {\MD} to alter its sources
251
in a way that this modified version allowed some basic debugging.
258
in a way that this modified version allowed some basic debugging.
252
 
259
 
253
\subsection{QEMU}
260
\subsection{QEMU}
254
QEMU emulates several processor architectures. We have used it to emulate
261
QEMU\cite{qemu} emulates several processor architectures. We have used it to emulate
255
ia32 and amd64. It can simulate SMP, but contrary to Bochs, it uses dynamic
262
ia32 and amd64. It can simulate SMP, but contrary to Bochs, it uses dynamic
256
translation of emulated instructions and performs much better because of
263
translation of emulated instructions and performs much better because of
257
that.
264
that.
258
 
265
 
259
This emulator seemed to realistically emulate the {\tt hlt} instruction,
266
This emulator seemed to realistically emulate the {\tt hlt} instruction,
Line 264... Line 271...
264
with {\tt gdb} can be pretty comfortable\footnote{Especially when the kernel is
271
with {\tt gdb} can be pretty comfortable\footnote{Especially when the kernel is
265
compiled with {\tt -g3}.} until one needs to debug a SMP kernel running on multiple
272
compiled with {\tt -g3}.} until one needs to debug a SMP kernel running on multiple
266
processors.
273
processors.
267
 
274
 
268
\subsection{Simics}
275
\subsection{Simics}
269
Virtutech's Simics simulator can be compared to a Swiss-army knife for operating system debugging.
276
Virtutech's Simics\cite{simics} simulator can be compared to a Swiss-army knife for operating system debugging.
270
This proprietary piece of software was available to us under an academic license for free.
277
This proprietary piece of software was available to us under an academic license for free.
271
 
278
 
272
Simics can be set to simulate many different configurations of many different machines.
279
Simics can be set to simulate many different configurations of many different machines.
273
It has the most advanced debugging features we have ever seen. To highlight some, its
280
It has the most advanced debugging features we have ever seen. To highlight some, its
274
memory access tracing ability has been really helpfull to us. During device driver
281
memory access tracing ability has been really helpfull to us. During device driver
Line 282... Line 289...
282
during application processors start. Another bugs found were related to amd64 and mips32.
289
during application processors start. Another bugs found were related to amd64 and mips32.
283
As for amd64, Simics did not report general protection fault when {\tt EFER.NXE} was 0 and a non-executable
290
As for amd64, Simics did not report general protection fault when {\tt EFER.NXE} was 0 and a non-executable
284
page was found (\#4214). As for mips32, Simics misemulated {\tt MSUB} and {\tt MSUBU} instructions.
291
page was found (\#4214). As for mips32, Simics misemulated {\tt MSUB} and {\tt MSUBU} instructions.
285
 
292
 
286
\subsection{Ski}
293
\subsection{Ski}
287
The ia64 port of HelenOS has been developed and debugged on the HP's IA-64 Ski simulator.
294
The ia64 port of HelenOS has been developed and debugged on the HP's IA-64 Ski\cite{ski} simulator.
288
Ski is just an Itanium processor simulator and as such does not simulate a real machine. In fact, there
295
Ski is just an Itanium processor simulator and as such does not simulate a real machine. In fact, there
289
is no firmware and no configuration tables (e.g. memory map) present in Ski! On the other hand, the missing parts can be supplied externally\footnote{This
296
is no firmware and no configuration tables (e.g. memory map) present in Ski! On the other hand, the missing parts can be supplied externally\footnote{This
290
is actually how Linux runs in this simulator.}. The simulator provides means of interaction with
297
is actually how Linux runs in this simulator.}. The simulator provides means of interaction with
291
host system devices via Simulator SystemCalls (SSC). The simulator itself has graphical interface
298
host system devices via Simulator SystemCalls (SSC). The simulator itself has graphical interface
292
with pretty powerful, but not as good as those of Simics, debugging facilities.
299
with pretty powerful, but not as good as those of Simics, debugging facilities.
Line 307... Line 314...
307
that Ski confuses VMA and LMA. This, what we believe to be a bug in Ski, has not shown in Linux since Linux always has
314
that Ski confuses VMA and LMA. This, what we believe to be a bug in Ski, has not shown in Linux since Linux always has
308
LMA equal to VMA. People from the Ski mailing list had tried to help us but our repeated problem report didn't
315
LMA equal to VMA. People from the Ski mailing list had tried to help us but our repeated problem report didn't
309
make it far enough for the HP to fix or at least clarify the issue. Finally, we adopted a workaround implemented by {\JJ}
316
make it far enough for the HP to fix or at least clarify the issue. Finally, we adopted a workaround implemented by {\JJ}
310
that simply swaps LMA and the program entry point in the kernel ELF image.
317
that simply swaps LMA and the program entry point in the kernel ELF image.
311
 
318
 
312
\subsection{VMware} VMware is the only virtualizer we have used in
319
\subsection{VMware} VMware\cite{vmware} is the only virtualizer we have used in
313
HelenOS development. It virtualizes the ia32 host machine. Since VMware
320
HelenOS development. It virtualizes the ia32 host machine. Since VMware
314
version 5.5, we made use of its possibility to run the guest system
321
version 5.5, we made use of its possibility to run the guest system
315
(i.e. HelenOS) on multiple processors. VMware has no support for
322
(i.e. HelenOS) on multiple processors. VMware has no support for
316
debugging but is very useful for compatibility and regression testing
323
debugging but is very useful for compatibility and regression testing
317
because it's closest to the real hardware. VMware, being a virtualizer,
324
because it's closest to the real hardware. VMware, being a virtualizer,