next up previous
Next: Environments Up: Introduction Previous: Introduction

Implementation Notes

This section contains misc notes about the system as a whole. First, don't even try to use anything other than GCC. While almost all of the code is in C, there is still a good amount of inline asm sprinkled throughout as well as some other GCC-isms such as __attribute__ etc.

Second, man of the kernel data structures have been mapped read-only into each process. This avoids having to decide what information to expose to applications and which to hide. This is done by allocating most kernel data structures out of pages all mapped by the same page-directory. This page-directory can then be inserted into each application's page tables and marked RO.

Third, each system call usually takes an explicitly argument of which environment to operate on and a capability(s) proving access to the resources being manipulated. To save programmer effort and speed system calls, each system call usually has an abbreviated form that defaults to operating on the caller's environment. Thus, there are typically two variants of each system call: sys_foo and sys_self_foo.

Thomas Pinckney