Daily Schedule
Unit 1: Introduction to C + Data Representation
Sep. 11: Lesson 1 - It's Nice to C YouSep. 13: Lesson 2 - Adding a Little Character
Sep. 15: Lesson 3 - Some Helpful Pointers
Sep. 18: Lesson 4 - The Hype About Types
Sep. 20: Lesson 5 - It's Dangerous To Go Alone
Sep. 22: Lesson 6 - A Bit of an Operation
Sep. 25: Lesson 7 - Where Oh Where Has My Little Byte Gone
Sep. 27: Lesson 8 - Complementary Counting
Sep. 29: Lesson 9 - What Goes Around Comes Around
Oct. 02: Lesson 10 - Make-ing Sense of It All
Oct. 04: Lesson 11 - Once More, With Feeling
Oct. 06: Lesson 12 - Exam 1
Unit 2: Instruction Set Architecture + Attacks + Processes
Oct. 02: Lesson 10 - Make-ing Sense of It AllOct. 09: Lesson 13 - Your Registration Code
Oct. 11: Lesson 14 - Making Decisions, Maybe
Oct. 13: Lesson 15 - The Function of Functions
Oct. 18: Lesson 16 - It's Turtles All the Way Down
Oct. 20: Lesson 17 - Diving Deeper into the Rabbit Hole
Oct. 23: Lesson 18 - A Constructive Construction
Oct. 25: Lesson 19 - The Best Defense is a Good Offense
Oct. 27: Lesson 20 - This is not a Pipe
Oct. 30: Lesson 21 - The Process of Multitasking
Nov. 01: Lesson 22 - What a Long, Strange Trip It's Been
Nov. 03: Lesson 23 - Exam 2
Unit 3: Processes + Memory Hierarchies
Oct. 27: Lesson 20 - This is not a PipeOct. 30: Lesson 21 - The Process of Multitasking
Nov. 06: Lesson 24 - A Shell of a Descriptor
Nov. 08: Lesson 25 - Sending Signals
Nov. 10: Lesson 26 - Making Memories
Nov. 13: Lesson 27 - Remembered by Association
Nov. 15: Lesson 28 - So Long, and Thanks for All the Fish
Labs
Lab 1: Using VS Code and mantisLab 2: Debugging C with VS Code
Lab 3: A little data representation
Lab 4: Assembly language
Lab 5: Debugging C with gdb
Lab 6: Debugging x86-64 with gdb
Lab 7: Getting started with processes
Calendar view
Schedule by Week
Week 1:
- Monday: intro to C, file I/O
- Wednesday: strings and memory addresses (“pointers”) in C, 1D and 2D arrays
- Friday: more on pointers, bases and conversions, assignment #2
Week 2:
- Monday: C types and variables, structs, VS Code debugging lab
- Wednesday: C vocab, hexdump, tips in C, academic integrity discussion
- Friday: binary operations, character encoding preview, assignment #3
Week 3:
- Monday: character encoding, data representation lab
- Wednesday: byte ordering, number reps and 2’s complement
- Friday: type conversions, arithmetic and overflow
Week 4:
- Monday: compiling a C program, x86-64 preview, exploring assembly lab
- Wednesday: review
- Friday: Exam #1
Week 5:
- Monday: data movement in x86-64, condition codes, assignment #4 puzzle0
- Wednesday: data movement cont’d, arithmetic operations, conditional handout
- Friday: block diagrams for conditionals, function calls in x86-64
Week 6:
- Monday: Fall Break!
- Wednesday: function calls and the stack, gdb+C debugging lab
- Friday: gdb+assembly debugging lab, arrays, switch statements, assignment #5
Week 7:
- Monday: structs
- Wednesday: buffer overflow attacks, assignment #6
- Friday: Unix commands, redirecting input/output, pipes, processes preview
Week 8:
- Monday: assignment #6, processes, fork
- Wednesday: review
- Friday: Exam #2
Week 9:
- Monday: fork, file descriptors, redirecting
stdout
- Wednesday: pipes, signals
- Friday: memory hierarchy, cache basics
Week 10:
- Monday: cache parameters, direct-mapped caches, fully and set-associative caches
- Wednesday: cache performance, dining philosophers
Exams
There will be two in-class midterm exams, as well as a final exam. The final is scheduled according to the Carleton College final exam schedule, with the option to self-schedule.
- Midterm 1: Friday, October 6th (in class)
- Midterm 2: Friday, November 3rd (in class)
- Final: Monday, November 20th (8:30am-11:00am)