Course Information

About

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, Osman Batur Ince, Doga Kukul, Yusuf Bayindir, Muhammed Burak Kizil, Idil Gorgulu, Atalay Görgün, Eda Güven, Mehmet Harmanli, Tufan Kivanc Kurt.

                                                    
                                                                    

Time and Location

Lectures: Monday, Wednesday at 13:00-14:10 (SNA A52)
Labs: Friday at 14:00-15:40 (Lab A) (SNA B242), 16:00-17:40 (Lab B) (SNA B149)
Office Hours Mondays at 17:30-18:30 (Aykut)

Reference Books

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.

Communication

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.

Pre-requisites

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.

Course Requirements and Grading

Grading will be based on

Schedule

Date Topic Notes
Feb 12 Introduction. Course logistics, A tour of C programs (slides) (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 14 Bits and Bytes, Representing and Operating on Integers (slides) (code) B&O 2.2-2.3

Additional Readings:
Feb 16 Bootcamp: Programming with C and Git basics
Feb 19 Bits and Bitwise Operators (slides) (code) B&O 2.1
Feb 21 Floating point (slides) (code)
Assg0 out: Getting Started with Unix and C
B&O 2.4
Additional Reading: how floating point works, jan Misali
What Every Computer Scientist Should Know About Floating-Point Arithmetic, David Goldberg, ACM Computing Surveys, 23(1), 1991

Demos:
Feb 23 Lab 1: The Linux Shell (slides) MIT MS The Shell
Stanford CS107 Unix videos 1-15, 24, 25
Feb 26 Chars and Strings in C (slides) (code) K&R 1.9, 5.5, Appx B3
Feb 28 More Strings, Pointers (slides) (code)
Assg0 in, Assg1 out: Strings in C
K&R 1.6, 5.5, Essential C 3 (strings and string.h library functions, The mechanics of pointers and arrays)
Mar 1 Lab 2: Bits, Ints and Floats, Vim (slides) MIT MS Editors (Vim)
Stanford CS107 Unix videos 28
Mar 4 Arrays and Pointers (slides)(code) K&R 5.2-5.5, Essential C 6 (Advanced pointers)
Mar 6 The Stack and The Heap (slides) K&R 5.6-5.9, Essential C 6 (The heap)
Mar 8 Lab 3: C-Strings and Valgrind (slides) Stanford CS107 Unix videos 26
Mar 11 Realloc, Memory Bugs (slides) (code) K&R 5.6-5.9, Essential C 6 (The Heap)
Mar 13 void *, Generics (slides) (code)
Assg1 in, Assg2 out: Heap Management
K&R 5.6-5.9, Essential C 6 (The Heap)
Mar 15 Lab 4: Arrays/Pointers and GDB (slides) Stanford CS107 Unix videos 27
Harvard CS50 short on GDB
Mar 18 Function Pointers (slides) (code) K&R 5.11
Mar 20 const, Structures (slides) (code) K&R 6.1-6.7
Mar 22 No labs this week
Mar 25 Compiling C programs (slides) (code) Stanford Unix Programming Tools 1
Mar 27 Introduction to x86-64, Data Movement (slides) (code)
Assg2 in
B&O 3.1-3.4

Additional reading:
Mar 29 Lab 5: Structs, Working with multiple files, writing your own Makefiles
Apr 1 No class - Elections
Apr 3 Arithmetic and Logic Operations (slides) B&O 3.5-3.6
Apr 5 No labs this week
Apr 8 No class - Ramadan holiday
Apr 10 No class - Ramadan holiday
Apr 12 No lab this week - Ramadan holiday
Apr 15 No class - Spring break
Apr 17 No class - Spring break
Apr 19 No lab this week - Spring break
Apr 22 x86-64 Control Flow (slides) B&O 3.6.1-3.6.2
Apr 24 More Control Flow (slides
Assg3 out: Defusing a Binary Bomb
B&O 3.6.3-3.6.8
Apr 26 No lab this week
Apr 28 Midterm Exam (Midterm Exam Guide)
Apr 29 x86-64 Procedures (slides) (code) B&O 3.7
May 1 No class - May Day
May 3 Lab 6: Machine Programming with Assembly
May 6 Data and Stack Frames B&O 3.8-3.9
May 8 Security Vulnerabilities (code)
Assg3 in, Assg4 out: Buffer Overflow Attacks
B&O 3.10
Additional Reading: Smashing the Stack for Fun and Profit, Aleph One
May 10 Lab 7: Runtime Stack
May 13 Cache Memories B&O 6.1-6.4.2
May 15 More Cache Memories B&O 6.4-6.7
Demos:
Cache Simulator
May 17 Lab 8: Memory organization
May 20 Optimization (code) B&O 5
May 22 Linking
Assg4 in
B&O 7
May 24 Lab 9: Code Optimization (slides)
TBA Final Exam