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 - the teaching assistants are Ahmed Imam Shah, Farzin Negahbani , and Samet Demir.
Lectures: Monday, Wednesday at 10:00-11:15 online via Zoom)
Labs: Friday at 08:00-9:50 (Lab A), 12:00-13:50 (Lab B, Lab C) (online via Zoom)
Office Hours Thursday 19:00-20:00 (Aykut), Wed 16:00-17:00 (Ahmed), Friday 11:00-12:00 (Farzin), Friday 18:00-19:00 (Samet)
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 |
Feb 15 | Introduction. Course logistics, A tour of C programs (slides) (video) (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 |
Feb 17 | Bits and Bytes, Representing and Operating on Integers (slides) (video) (video) (code) Assg0 out: Getting Started with Unix and C |
B&O 2.2-2.3 Additional Readings:
|
Feb 19 | Bootcamp: Programming with C and Git (slides) (video) | |
Feb 22 | Bits and Bitwise Operators (slides) (code) | B&O 2.1 |
Feb 24 | Floating point (slides) (video) (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: |
Feb 26 | Lab 1: The Linux Shell (slides) | MIT MS The Shell Stanford CS107 Unix videos 1-15, 24, 25 |
Mar 1 | Chars and Strings in C (slides) (video) (code) | K&R 1.9, 5.5, Appx B3 |
Mar 3 | More Strings, Pointers (slides) (video) (code) | K&R 1.6, 5.5, Essential C 3 (strings and string.h library functions, The mechanics of pointers and arrays) |
Mar 5 | Lab 2: Bits, Ints and Floats, Vim (slides) | MIT MS Editors (Vim) Stanford CS107 Unix videos 28 |
Mar 8 | Arrays and Pointers (slides) (video) (code) | K&R 5.2-5.5, Essential C 6 (Advanced pointers) |
Mar 10 | The Stack and The Heap (slides) (video) (code) Assg1 in, Assg2 out: Strings in C |
|
Mar 12 | Lab 3: C-Strings and Valgrind (slides)/td> | Stanford CS107 Unix videos 26 |
Mar 15 | void *, Generics (slides) (video) (code) | K&R 5.6-5.9, Essential C 6 (The Heap) |
Mar 17 | Function Pointers (slides) (video) (code) | K&R 5.11 |
Mar 19 | Lab 4: Arrays/Pointers and GDB (slides) | Stanford CS107 Unix videos 27 Harvard CS50 short on GDB |
Mar 22 | const, Structures (slides) (video) (code) | K&R 6.1-6.7 |
Mar 24 | Compiling C programs (slides) (video) (code) Assg2 in, Assg3 out: Heap Management |
Stanford Unix Programming Tools 1 |
Mar 26 | Lab 5: Structs, Working with multiple files, writing your own Makefiles (slides) | |
Mar 29 | Introduction to x86-64, Data Movement (slides) (video) (code) | B&O 3.1-3.4 Additional reading:
|
Mar 31 | Arithmetic and Logic Operations (slides) (video) | B&O 3.5-3.6 |
Apr 2 | No labs this week | |
Apr 5 | No class - Spring break | |
Apr 7 | No class - Spring break | |
Apr 9 | No lab this week - Spring break | |
Apr 12 | x86-64 Control Flow (slides) (video) | B&O 3.6.1-3.6.2 |
Apr 14 | More Control Flow (slides) (video) Assg3 in, Assg4 out: Defusing a Binary Bomb |
B&O 3.6.3-3.6.8 |
Apr 16 | Lab 6: Machine Programming with Assembly (slides) | |
Apr 19 | x86-64 Procedures (slides) (video) (code) | B&O 3.7 |
Apr 21 | Data and Stack Frames (slides) (video) | B&O 3.8-3.9 |
Apr 23 | No labs this week (National Sovereignty and Children's Day) | |
Apr 25 | Midterm Exam (Midterm Exam Guide) | |
Apr 26 | Security Vulnerabilities (slides) (video) (code) | B&O 3.10 Additional Reading: Smashing the Stack for Fun and Profit, Aleph One |
Apr 28 | The Memory Hierarchy (slides) (video) Assg4 in, Assg5 out: Buffer Overflow Attacks |
B&O 6.1-6.3 |
Apr 30 | Lab 7: Runtime Stack (slides) | |
May 3 | Cache Memories (slides) (video) (code) | B&O 6.4-6.7 Demos: Cache Simulator |
May 5 | Debugging, Design, and Optimization (slides) (video) (code) | B&O 5 |
May 7 | Lab 8: Memory organization (slides) | |
May 10 | No class - Ramadan Holiday | |
May 12 | No class - Ramadan Holiday Assg5 in, Assg6 out: Cache Memories |
|
May 14 | No labs this week | |
May 17 | Linking (slides) (video) | B&O 7 |
May 19 | No Class (Comm. of Ataturk, Youth and Sports Day) | |
May 21 | Lab 9: Code Optimization | |
May 24 | Managing The Heap (slides) (video) | B&O 9.9 |
May 26 | Wrap-up, What's next (slides) Assg6 in |
|
May 28 | No labs this week | |
June 6, 08:30am | Final Exam |