Rev 32 | Rev 36 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 32 | Rev 33 | ||
|---|---|---|---|
| Line 103... | Line 103... | ||
| 103 | \begin{description} |
103 | \begin{description} |
| 104 | \item [Chora] is a part of the Horde framework and can be used to comfortably |
104 | \item [Chora] is a part of the Horde framework and can be used to comfortably |
| 105 | browse Subversion repository from the web. We altered it a little bit to also |
105 | browse Subversion repository from the web. We altered it a little bit to also |
| 106 | show number of commits per developer on our homepage. |
106 | show number of commits per developer on our homepage. |
| 107 | 107 | ||
| 108 | \item [WHUPS] is another component of the Horde framework. It provides |
108 | \item [Whups] is another component of the Horde framework. It provides |
| 109 | feature request and bug tracking features. However, in the light of being rather |
109 | feature request and bug tracking features. However, in the light of being rather |
| 110 | closed group of people, we used this tool only seldomly. On the other hand, |
110 | closed group of people, we used this tool only seldomly. On the other hand, |
| 111 | any possible beta tester of our operating system has had a chance to |
111 | any possible beta tester of our operating system has had a chance to |
| 112 | submit bug reports. |
112 | submit bug reports. |
| 113 | 113 | ||
| Line 161... | Line 161... | ||
| 161 | \section{Virtual environments} |
161 | \section{Virtual environments} |
| 162 | After the build tools, simulators, emulators and virtualizers were the second focal point |
162 | After the build tools, simulators, emulators and virtualizers were the second focal point |
| 163 | in our project. These invaluable programs really sped the code-compile-test cycle. |
163 | in our project. These invaluable programs really sped the code-compile-test cycle. |
| 164 | In some cases, they were, and still are, the only option to actually run HelenOS on certain |
164 | In some cases, they were, and still are, the only option to actually run HelenOS on certain |
| 165 | processor architectures, because real hardware was not available to us. Using virtual environment |
165 | processor architectures, because real hardware was not available to us. Using virtual environment |
| 166 | for developing our system provided us with deterministic environment on wich it is much easier to do |
166 | for developing our system provided us with deterministic environment on which it is much easier to do |
| 167 | troubleshooting. Moreover, part of the simulators featured integrated debugging facilities. |
167 | troubleshooting. Moreover, part of the simulators featured integrated debugging facilities. |
| 168 | Without them, a lot of bugs would remain unresolved or even go unnoticed. |
168 | Without them, a lot of bugs would remain unresolved or even go unnoticed. |
| 169 | 169 | ||
| 170 | From one point of view, we have tested our system on eight different virtual environments: |
170 | From one point of view, we have tested our system on eight different virtual environments: |
| 171 | 171 | ||
| Line 192... | Line 192... | ||
| 192 | portable, compared to much faster virtualizers and emulators using dynamic translation |
192 | portable, compared to much faster virtualizers and emulators using dynamic translation |
| 193 | of instructions. Lately, there have been some plans to develop or port dynamic translation |
193 | of instructions. Lately, there have been some plans to develop or port dynamic translation |
| 194 | to Bochs brewing in its developer community. |
194 | to Bochs brewing in its developer community. |
| 195 | 195 | ||
| 196 | The biggest virtue of Bochs is that it has traditionally supported SMP. For some time, Bochs |
196 | The biggest virtue of Bochs is that it has traditionally supported SMP. For some time, Bochs |
| 197 | has been our only environment on wich we could develop and test SMP code. Unfortunatelly, |
197 | has been our only environment on which we could develop and test SMP code. Unfortunatelly, |
| 198 | the quality of SMP support in Bochs was different from version to version. Because of SMP |
198 | the quality of SMP support in Bochs was different from version to version. Because of SMP |
| 199 | breakage in Bochs, we had to avoid some versions thereof. So far, Bochs versions 2.2.1 and 2.2.6 |
199 | breakage in Bochs, we had to avoid some versions thereof. So far, Bochs versions 2.2.1 and 2.2.6 |
| 200 | have been best in this regard. |
200 | have been best in this regard. |
| 201 | 201 | ||
| 202 | Our project has not only used Bochs. We also helped to identify some SMP related problems |
202 | Our project has not only used Bochs. We also helped to identify some SMP related problems |
| Line 228... | Line 228... | ||
| 228 | Curiously, this simulator contained the biggest number of defects and inaccuracies |
228 | Curiously, this simulator contained the biggest number of defects and inaccuracies |
| 229 | that we have ever discovered in a simulator. Fortunately, all of them have been |
229 | that we have ever discovered in a simulator. Fortunately, all of them have been |
| 230 | eventually fixed. |
230 | eventually fixed. |
| 231 | 231 | ||
| 232 | \subsection{PearPC} |
232 | \subsection{PearPC} |
| 233 | PearPC is the only emulator on wich we have run ppc32 port of HelenOS. It has |
233 | PearPC is the only emulator on which we have run ppc32 port of HelenOS. It has |
| 234 | no debugging features, but fortunatelly its sources are available under |
234 | no debugging features, but fortunatelly its sources are available under |
| 235 | an open source license. This enabled {\OP} and {\MD} to alter its sources |
235 | an open source license. This enabled {\OP} and {\MD} to alter its sources |
| 236 | in a way that this modified version allowed some basic debugging. |
236 | in a way that this modified version allowed some basic debugging. |
| 237 | 237 | ||
| 238 | \subsection{QEMU} |
238 | \subsection{QEMU} |
| Line 244... | Line 244... | ||
| 244 | This emulator seemed to realistically emulate the {\tt hlt} instruction, |
244 | This emulator seemed to realistically emulate the {\tt hlt} instruction, |
| 245 | which was nice for those of us who use notebooks as their development |
245 | which was nice for those of us who use notebooks as their development |
| 246 | machine. |
246 | machine. |
| 247 | 247 | ||
| 248 | \subsection{Simics} |
248 | \subsection{Simics} |
| 249 | Simics simulator can be compared to a Swiss-army knife for operating system debugging. |
249 | Virtutech's Simics simulator can be compared to a Swiss-army knife for operating system debugging. |
| 250 | This proprietary piece of software was available to us under an academic license for free. |
250 | This proprietary piece of software was available to us under an academic license for free. |
| 251 | 251 | ||
| 252 | Simics can be set to simulate many different configurations of many different machines. |
252 | Simics can be set to simulate many different configurations of many different machines. |
| 253 | It has the most advanced debugging features we have ever seen. To highlight some, its |
253 | It has the most advanced debugging features we have ever seen. To highlight some, its |
| 254 | memory access tracing ability has been really helpfull to us. During device driver |
254 | memory access tracing ability has been really helpfull to us. During device driver |
| Line 262... | Line 262... | ||
| 262 | during application processors start. Another bugs found were related to amd64 and mips32. |
262 | during application processors start. Another bugs found were related to amd64 and mips32. |
| 263 | As for amd64, Simics did not report general protection fault when {\tt EFER.NXE} was 0 and a non-executable |
263 | As for amd64, Simics did not report general protection fault when {\tt EFER.NXE} was 0 and a non-executable |
| 264 | page was found (\#4214). As for mips32, Simics misemulated {\tt MSUB} and {\tt MSUBU} instructions. |
264 | page was found (\#4214). As for mips32, Simics misemulated {\tt MSUB} and {\tt MSUBU} instructions. |
| 265 | 265 | ||
| 266 | \subsection{Ski} |
266 | \subsection{Ski} |
| - | 267 | The ia64 port of HelenOS has been developed and debugged on the HP's IA-64 Ski simulator. |
|
| - | 268 | Ski is just an Itanium processor simulator and as such does not simulate a real machine. In fact, there |
|
| - | 269 | 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 |
|
| - | 270 | is actually how Linux runs in this simulator.}. The simulator provides means of interaction with |
|
| - | 271 | host system devices via Simulator SystemCalls (SSC). The simulator itself has graphical interface |
|
| - | 272 | with pretty powerful, but not as good as those of Simics, debugging facilities. |
|
| - | 273 | ||
| - | 274 | Ski is a proprietary program with no source code available. Its binaries are available |
|
| - | 275 | for free under a non-free license. It comes packaged with insufficient documentation |
|
| - | 276 | which makes the development pretty problematic. For instance, there is no public documentation |
|
| - | 277 | of all the SSC's. All one can do is to look into Linux/ia64-Ski port, which was written by the |
|
| - | 278 | same people as Ski, and use it as a refernce. We had to look into Linux once more when our kernel |
|
| - | 279 | started to fail in some memory-intensive stress tests. In fact, the problem was that the tests |
|
| - | 280 | hit the IA-32 legacy videoram area. We fixed the problem, in the light of absence of any memory map, by blacklisting |
|
| - | 281 | this piece of memory to our frame allocator. |
|
| - | 282 | ||
| - | 283 | The way HelenOS is booted on Ski is by simply loading its ELF image |
|
| - | 284 | and jumping to it. The ELF header contains two fields describing where and how to load the program image into memory: |
|
| - | 285 | VMA and LMA. VMA\footnote{Virtual Memory Address} is an address where the program's segment gets mapped in virtual memory. |
|
| - | 286 | LMA\footnote{Load Memory Address} is the physical address where the segment is loaded in memory. {\JV} discovered |
|
| - | 287 | 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 |
|
| - | 288 | LMA equal to VMA. People from the Ski mailing list had tried to help us but our repeated problem report didn't |
|
| - | 289 | make it far enough for the HP to fix or at least clarify the issue. Finally, we adopted a workaround implemented by {\JJ} |
|
| - | 290 | that simply swaps LMA and the program entry point in the kernel ELF image. |
|
| - | 291 | ||
| 267 | \subsection{VMware} |
292 | \subsection{VMware} |
| - | 293 | VMware is the only virtualizer we have used in HelenOS development. It virtualizes the ia32 host machine. |
|
| - | 294 | Since VMware version 5.5, we made use of its possibility to run the guest system (i.e. HelenOS) on multiple processors. |
|
| - | 295 | VMware has no support for debugging but is very useful for compatibility and regression testing because |
|
| - | 296 | it's closest to the real hardware. VMware, being a virtualizer, is also the fastest of all the virtual environments |
|
| - | 297 | we have utilized. |
|
| - | 298 | ||
| 268 | 299 | ||
| 269 | \section{Authoring tools} |
300 | \section{Authoring tools} |