This course is an introduction to system-aware computer programming. Beginning with an overview of the fundamental elements and concepts that are common to all computer systems, including computer architecture, operating systems, compilers, and networks, students will learn how these affect the performance and behavior of computer programs. Additionally, students will learn a system-level programming language and set of tools for writing low-level programs at the operating system boundary. Students completing COMP251 will be prepared for advanced topics in systems, including operating system programming, parallel and distributed computing, and networking. Topics include: memory management and organization; caching and the memory hierarchy; system calls; network programming and I/O; processes, threads, synchronization, and concurrency; performance analysis and measurement; and debugging.
Prerequisite: COMP 142