
Welcome to CS258, Winter 2014. Last year's materials are
in directories 2009/ -- 2013/. 

Grading policies: 50% midterm, 50% final project.  
The final project will be take-home. You will be expected to
produce working kernel code for a real-life OS (Linux,
Illumos/OpenSolaris, Android, or even Windows) implementing or in-depth exploring an
"advanced" OS feature. For some sample topics, see 2012/project-topics.txt.

1. Listen to Bryan Cantrill's talk on the history of innovation in Solaris: 
   http://www.youtube.com/watch?v=-zRN7XLCRhc
   (blog link with slides: http://smartos.org/2011/12/15/fork-yeah-the-rise-and-development-of-illumos-2/)

   This talk, besides a history of adavnced features we are going to study 
   has much wisdom on project management and history of Unix.

2. Unless you are using a Linux computer, install a Linux distribution 
   in a virtual machine. I will be using VirtualBox (http://virtualbox.org) with
   Ubuntu (http://www.ubuntu.com/) and then with OpenIndiana (http://openindiana.org/)
   distributions. I'll expect you to go along with my shell sessions in class.

3. If you haven't encountered x86 assembly before, look at 
    A Tiny Guide to Programming in 32-bit x86 Assembly Language, by Adam Ferrari
    http://www.cs.dartmouth.edu/~sergey/cs258/tiny-guide-to-x86-assembly.pdf

4. Other resources/links I mentioned today are in resources.txt  (in this class directory)

5. Books:

  Textbook (Dartmouth bookstore should have it):
   Solaris Internals by Richard McDougall and Jim Mauro (second edition)
   (http://www.amazon.com/Solaris-Internals-OpenSolaris-Kernel-Architecture/dp/0131482092)

  Other reading: 
   Linkers and Loaders, John Levine 
     Free online: http://www.iecc.com/linker/ or 
      http://www.amazon.com/Linkers-Kaufmann-Software-Engineering-Programming/dp/1558604960

   Linux Assembly Language Programming, by Bob Neveln 
     http://www.amazon.com/Linux-Assembly-Language-Programming-Neveln/dp/0130879401

   This book is unique in its approach. It is not really about "assembly
   programming for Linux", it actually explains computing from the ground up,
   from the basic physics of implementing a bit in memory, to core PC IO.
   Linux and assembly are only icing on the cake.

   If you are interested in Linux kernel programming for your project,
   consider 
     http://www.amazon.com/Linux-Kernel-Programming-Michael-Beck/dp/0201719754
   or 
     http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/

     


