This course gives a solid understanding of the principles and abstractions used in computer systems and machine programs using C. Towards this aim, it covers a broad range of topics, providing students with an in-depth perspective and programming experience regarding the basic topics of C language and how programs are formed and executed at the microprocessor-level.
Upon the completion of COMP201, student will be able to (1) demonstrate proficiency in writing C programs that require effective memory management, (2) gain a deep knowledge of the compilation flow and runtime behavior of C programs, (3) have a clear understanding of computer arithmetic in a modern computing system, (4) recognize the relationship between a C program and its assembly translation, and (5) gain a general sense of working in a Unix environment as a power user, getting familiar with shell tools, version control systems, compilers, debuggers, profilers.
The course is taught by Aykut Erdem, Mustafa Orkun Acar, Samet Demir, Mert Cokelek, and Nafiseh Jabbari Tofighi, Efehan Guner as graduate TAs and Yagmur Akarken, Doga Demirturk, Pinar Erbil, Doga Ege Inhanli, and Atakan Kara, Ahmet Uyar as undergraduate TAs. We also have a KOLT tutor, Baris Samed Yakar.
Lectures: Monday, Wednesday at 12:30-13:40 (SOS B07)
Labs: Friday at 14:00-15:40 (Lab A, ENG Z21), 16:00-17:40 (Lab B, ENG B19), 18:00-19:40 (Lab C, ENG Z21), 12:00-13:40 (Lab D, ENG Z21), 10:00-11:40 (Lab F) (SNA A42)
Office Hours Tuesday 11:00-12:00 (Aykut)
Policies: All work on assignments must be done individually unless stated otherwise. You are encouraged to discuss with your classmates about the given assignments, but these discussions should be carried out in an abstract way. That is, discussions related to a particular solution to a specific problem (either in actual code or in the pseudocode) will not be tolerated.
In short, turning in someone else’s work, in whole or in part, as your own will be considered as a violation of academic integrity. Please note that the former condition also holds for the material found on the web as everything on the web has been written by someone else.
The course webpage will be updated regularly throughout the semester with lecture notes, presentations, assignments and important deadlines. All other course related communications will be carried out through Blackboard.
COMP201 is open to second-year undergraduate students. Non-COMP students should ask the course instructor for approval before the add/drop period. The prerequisites for this course is COMP 132 - Advanced Programming.
Grading will be based on
Date | Topic | Notes |
Sep 27 | Introduction. Course logistics, A tour of C programs (slides) (video fall'21) (video spring'21) (code) | B&O 1 Additional Reading: The Strange Birth and Long Life of Unix, Warren Toomey, IEEE Spectrum, 28 Nov 2011 “A damn stupid thing to do”—the origins of C, Arstechnica |
Sep 29 | Bits and Bytes, Representing and Operating on Integers (slides) (video fall'21) (video spring'21) (code) Assg0 out: Getting Started with Unix and C |
B&O 2.2-2.3 Additional Readings:
|
Oct 1 | Bootcamp: Programming with C and Git (slides) (video) | |
Oct 4 | Bits and Bitwise Operators (slides) (video fall'21) (video spring'21) (code) | B&O 2.1 |
Oct 6 | Floating point (slides) (video fall'21) (video spring'21) (code) Assg0 in, Assg1 out: Manipulating Bits |
B&O 2.4 Additional Reading: What Every Computer Scientist Should Know About Floating-Point Arithmetic, David Goldberg, ACM Computing Surveys, 23(1), 1991 Demos: |
Oct 8 | Lab 1: The Linux Shell (slides) | MIT MS The Shell Stanford CS107 Unix videos 1-15, 24, 25 |
Oct 11 | Chars and Strings in C (slides) (video fall'21) (video spring'21) (code) | K&R 1.9, 5.5, Appx B3 |
Oct 13 | More Strings, Pointers (slides) (video fall'21) (video spring'21) (code) | K&R 1.6, 5.5, Essential C 3 (strings and string.h library functions, The mechanics of pointers and arrays) |
Oct 15 | Lab 2: Bits, Ints and Floats, Vim (slides) | MIT MS Editors (Vim) Stanford CS107 Unix videos 28 |
Oct 18 | Arrays and Pointers (slides) (video fall'21) (video spring'21) (code) | K&R 5.2-5.5, Essential C 6 (Advanced pointers) |
Oct 20 | The Stack and The Heap (slides) (video fall'21) (video spring'21) Assg1 in, Assg2 out: Strings in C |
K&R 5.6-5.9, Essential C 6 (The heap) |
Oct 22 | Lab 3: C-Strings and Valgrind (slides) | Stanford CS107 Unix videos 26 |
Oct 25 | Realloc, Memory Bugs (slides) (video fall'21) (code) | K&R 5.6-5.9, Essential C 6 (The Heap) |
Oct 27 | void *, Generics (slides) (video fall'21) (video spring'21) (code) | K&R 5.6-5.9, Essential C 6 (The Heap) |
Oct 29 | No labs this week | |
Nov 1 | Function Pointers (slides) (video fall'21) (video spring'21) (code) | K&R 5.11 |
Nov 3 | const, Structures (slides) (video fall'21) (video spring'21) (code) Assg2 in, Assg3 out: Heap Management |
K&R 6.1-6.7 |
Nov 5 | Lab 4: Arrays/Pointers and GDB (slides) | Stanford CS107 Unix videos 27 Harvard CS50 short on GDB |
Nov 8 | Compiling C programs (slides) (video fall'21) (video spring'21) (code) | Stanford Unix Programming Tools 1 |
Nov 10 | Introduction to x86-64, Data Movement (slides) (video fall'21) (video spring'21) (code) | B&O 3.1-3.4 Additional reading:
|
Nov 12 | Lab 5: Structs, Working with multiple files, writing your own Makefiles (slides) | |
Nov 15 | No class - Winter break | |
Nov 17 | No class - Winter break | |
Nov 19 | No lab this week - Winter break | |
Nov 22 | Arithmetic and Logic Operations (slides) (video fall'21) (video spring'21) | B&O 3.5-3.6 |
Nov 24 | x86-64 Control Flow (slides) (video fall'21) (video spring'21) Assg3 in, Assg4 out: Defusing a Binary Bomb |
B&O 3.6.1-3.6.2 |
Nov 26 | Lab 6: Machine Programming with Assembly (slides) | |
Nov 29 | More Control Flow (slides) (video fall'21) (video spring'21) | B&O 3.6.3-3.6.8 |
Dec 1 | x86-64 Procedures (slides) (video fall'21) (video) (code) | B&O 3.7 |
Dec 3 | No labs this week | |
Dec 5 | Midterm Exam (Midterm Exam Guide) | |
Dec 6 | Data and Stack Frames (slides) (video fall'21) (video spring'21) | B&O 3.8-3.9 |
Dec 8 | Security Vulnerabilities (slides) (video fall'21) (video spring'21) (code) Assg4 in, Assg5 out: Buffer Overflow Attacks |
B&O 3.10 Additional Reading: Smashing the Stack for Fun and Profit, Aleph One |
Dec 10 | Lab 7: Runtime Stack (slides) | |
Dec 13 | The Memory Hierarchy (slides) (video fall'21) (video spring'21) | B&O 6.1-6.3 |
Dec 15 | Cache Memories (slides) (video fall'21) (video spring'21) | B&O 6.4-6.7 Demos: Cache Simulator |
Dec 17 | No labs this week | |
Dec 20 | More Cache Memories (slides) (video fall'21) | B&O 6.4-6.7 |
Dec 22 | Optimization (slides) (video fall'21) (code) Assg5 in, Assg6 out: Understanding Cache Memories |
B&O 5 |
Dec 24 | Lab 8: Memory organization (slides) | |
Dec 27 | Debugging and Design (slides) (video fall'21) (video spring'21) | |
Dec 29 | Linking (slides) (video fall'21) (video spring'21) | B&O 7 |
Dec 31 | No labs this week | |
Jan 3 | Managing The Heap (slides) (video fall'21) (video spring'21) | B&O 9.9 |
Jan 5 | More Heap Allocators, Wrapping Up (slides) (video fall'21) (video spring'21) Assg6 in |
B&O 9.9 |
Jan 7 | Lab 9: Code Optimization | |
Jan 14 | Final Exam (Final Exam Guide) |