This course is the first part of a two semester sequence, Computer Systems I and II. The goal of this sequence is to bridge the gap between high-level programming and actual computer systems -- processors, caches, operating systems, compilers and linkers. Computer Systems I comprises three major parts: machine organization and assembly language programming, C program design and development, and operating system tools. Unix will be used as a running example.

Note that this is a class on systems concepts, not on C programming. Most of the basic constructs such as if statements, loops, function syntax, switch case statements and operators are the same in C and Java, and you are expected to know them from CSC 1052. You will have a chance to refresh your knowledge on these topics using the online zyBook Programming in C. However, class time will be dedicated only to those programming features that are different in C and Java and that are relevant to systems topics.

Specific Outcomes