CS 417 Prerequisites

Throughout the course, I will make certain assumptions about your knowledge. In particular, I will assume the following:

  • You have taken an undergraduate course in operating systems and understand basic operating system concepts such as processes, threads, file system implementation, mutual exclusion, process synchronization, and process scheduling.

  • You can program proficiently in the C or C++ programming language as well as Java. If you know one, you can learn the other without too much grief. A tutorial that seems pretty good (on casual inspection) on C can be found at http://www.eskimo.com/~scs/cclass/cclass.html

    I learned C eons ago via Kernighan and Ritchie's text. It is still one of my favorites because of its concise nature. It is particularly good if you already know how to program in some language: Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition , Prentice-Hall, 1988, ISBN 0-13-110362-8, 0-13-110370-9. . For more info on C, take a look at http://www.lysator.liu.se/c/index.html.

    I expect you to have both a command of the language and a clear and concise programming style. My opinions on style can be found in C Programming Style. Rob Pike has useful comments in his Notes on Programming in C document.

    One of my favorite books on Java, again for its brevity, is Java in a Nutshell. There are many, many web tutorials on Java, but I usually start with http://www.java.sun.com/.

  • You can compile and run programs. If you are intimidated by anything longer than a three-page program and have not developed techniques in debugging or functional decomposition, I strongly recommend dropping the class and getting a copy of: Brian W. Kernighan and Rob Pike, The Practice of Programming, Prentice-Hall, 1999, ISBN 0-20-161586-X.

  • You have a rudimentary knowledge of using the UNIX System.

  • You have a basic understanding of the structure of conventional computers (a CPU communicating with memory and other peripherals over a bus, the memory management unit) and some aspects of operating systems (virtual memory, file systems, device drivers).. If you studied operating systems, this shouldn't be a problem. If you're not familiar with some of this, be prepared to do some catch-up reading.

  • You have a basic understanding of how microprocessors work work and how programs are compiled into machine code.

If you are unfamiliar with any of these items, it should not necessarily deter you from taking the course (most are easy to learn) but you may wish to speak with me. If, on the other hand, you feel that you have difficulty programming then I recommend that you drop the course.