Chapter 1. Introduction

Table of Contents

1. Intended Audience
2. Required background

GeekOS is an educational operating system kernel. GeekOS tries to combine realism and simplicity. It is a realistic system because it targets a real hardware platform - the x86 PC. It strives for simplicitly in that it contains the bare minimum functionality necessary to provide the services of a modern operating system, such as virtual memory, a filesystem, and interprocess communication.

[Important]Important

This document and the GeekOS distribution are works in progress. At the time of writing (March 3, 2004) this document is about 80% complete, and the GeekOS code is about 95% complete. We will be filling in the remaining text and code in the near future. In the meantime, if you have any questions about this manual or about GeekOS itself, please send email to .

This document has two purposes. The first purpose is to give an overview of the GeekOS kernel, and to cover the topics needed to read, understand, and modify the kernel source code. The second purpose is to present a series of projects in which you can build important new functionality on top of the GeekOS kernel. These projects are suitable for use in a senior level undergraduate course, or for self-study.

1. Intended Audience

This document is for anyone interested in gaining hands-on experience in operating system kernel programming. Most operating system textbooks focus on high level theory and concepts. This document is intended to bridge the gap between those concepts and actual, working kernel code. We will try to give you all of the information and background you need to start hacking. In this way, this document complements your operating system textbook.

2. Required background

Before you start hacking on GeekOS, we assume that you have the following skills and knowledge:

  • Basic understanding of what an operating system kernel does

  • A strong understanding of the C programming language

  • Experience programming at the system call level in an operating system such as Linux or Windows

  • Experience programming using threads, such as pthreads or Java threads

  • Some knowledge of computer architecture and organization

  • Familiarity with assembly language for some CPU architecture, and a willingness to learn x86 (a.k.a. Intel IA32) assembly language