Description: 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:
Differentiate between different internal formats to represent numerical data.
Develop an ability to explain of the role of the basic computer system components.
Enhanced programming skills through the development, testing and debugging of C programs in Unix.
Develop an appreciation of the need for security and ethics in computer use.

Instructor: Mirela Damian, Professor of Computer Science