1. To become good general-purpose C programmers
This means that when you see a problem that needs to be coded, you can envision the overall structure of the solution, and then set about solving it in an ordered way, using the appropriate data structures where necessary.
2. To become decent Unix hackers
This means that you know how to make use of the many tools that Unix provides, be it commands, library calls or system calls. This also means that you understand the model of computation that Unix presents.
3. To become well-versed in the language of systems programming
If you finish this course with a decent grade (B or better), then my goal is to ensure that you can talk systems. This means that when you go out to the job market or to graduate school, when anyone wants to talk systems with you, you not only understand what they are saying, but can communicate back with them in a common language. This also means that if you have to read research papers in systems, you can do so without a huge amount of difficulty.
4. To understand basic uniprocessor organization.
This means to know pretty much what goes on from the time that a computer gets turned on, to writing and executing programs in a multi-user enviroment.