Daily Schedule

Unit 1: Introduction to C + Data Representation

Sep. 11: Lesson 1 - It's Nice to C You
Sep. 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 All
Oct. 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 Pipe
Oct. 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 mantis
Lab 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

Calendar


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)