Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

Christopher Moretti

Spring 2020


Directory
General Information | Schedule | Assignments | Announcements | Policies

Week-by-Week

The schedule will change throughout the course. Please check it frequently.

Weeks start on Mondays, and are indexed from 1.


Week 1: 2/3 - 2/9

Reading (required): C Programming (King) 1, 2 ,3

Reading (recommended): Unix Tutorial for Beginners

Reading (recommended): GNU Emacs Tutorial

Reading (recommended): Linux Pocket Guide (Barrett) pp. 166-179 (concerning composing Bash shell scripts) (available through Blackboard in the "Course Materials" section)

Reading (recommended): Wikipedia "Deterministic finite automaton" article

Lecture 1: (Monday) Introduction; C Overview

Precept 1: (Monday/Tuesday) Introduction; The Computing Environment; Program Preparation

Lecture 2: (Wednesday) A Taste of C

Precept 2: (Wednesday/Thursday) Linux and Bash; Emacs

(Thursday 2/6) Introductory Survey Assignment Due (at 9:00PM)


Week 2: 2/10 - 2/16

Reading (required): C Programming (King) 4, 5, 6, 7, 14, 15, 20.1

Reading (required): ARM 64-bit Assembly Language (Pyeatt with Ughetta) 1

Reading (recommended): GNU GDB Tutorial

Lecture 3: (Monday) Number Systems

Precept 3: (Monday/Tuesday) Simple C Programs; C Fundamentals

Lecture 4: (Wednesday) Data Types in C

Precept 4: (Wednesday/Thursday) Multi-File C Programs; GDB

(Thursday 2/13) De-Comment Assignment Due (at 9:00PM)


Week 3: 2/17 - 2/23

Reading (required): Computer Systems (Bryant & O'Hallaron) 1 (available through Blackboard in the "Course Materials" section)

Reading (required): C Programming (King) 8, 9, 11, 12, 13, 24.1

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 2

Reading (recommended): The Practice of Programming (Kernighan & Pike) 6

Lecture 5: (Monday) The Design of C (Operators, Statements, I/O)

Precept 5: (Monday/Tuesday) C Pointers and Arrays

Lecture 6: (Wednesday) Testing

Precept 6: (Wednesday/Thursday) C Arrays and Strings


Week 4: 2/24 - 3/1

Reading (required): C Programming (King) 16, 17

Reading (recommended): The Practice of Programming (Kernighan & Pike) 2, 5

Reading (recommended): GNU Make Tutorial

Lecture 7: (Monday) Building; Debugging Part 1

Precept 7: (Monday/Tuesday) C Command-Line Arguments; C Structures; C Dynamic Memory Management

(Tuesday 2/25) String Module Assignment Due (at 9:00PM)

Lecture 8: (Wednesday) Debugging (Part 2); Data Structures

Precept 8: (Wednesday/Thursday) Tools for Debugging Dynamic Memory Management; Abstract Data Types in C


Week 5: 3/2 - 3/8

Reading (required): C Programming (King) 19, 22

Reading (recommended): The Practice of Programming (Kernighan & Pike) 1, 4, 8

Lecture 9: (Monday) Modularity

Precept 9: (Monday/Tuesday) C Void Pointers; The Symbol Table Assignment

Lecture 10: (Wednesday) Programming Style

Precept 10: (Wednesday/Thursday) C Function Pointers; A DynArray ADT


Week 6: 3/9 - 3/15

Reading (required): C Programming (King) 10, 18

Reading (recommended): The Practice of Programming (Kernighan & Pike) 7

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 5.1-5

Reading (recommended, for reference only): GNU Gprof Tutorial

Lecture 11: (Monday) Midterm Exam Review

Precept 11: (Monday/Tuesday) C Declarations and Definitions

Lecture 12: (Wednesday) Midterm Examination (Midterm Exams and Answers from Previous Semesters, This Semester's Exam, Answers to This Semester's Exam, Walkthrough of This Semester's Exam)

Precept 12: (Wednesday/Thursday) NO PRECEPT


Week 7: 3/16 - 3/22

(Monday - Sunday) Spring Recess


Week 8: 3/23 - 3/29

Reading (required): ARM 64 Bit Assembly Language (Pyeatt with Ughetta) 2-5

Reading (recommended, for reference only): ARMv8 Instruction Set Overview

Reading (recommended, for reference only): ARM Architecture Reference Manual

Reading (recommended, for reference only): Using as

Lecture 13: (Monday) Language-Levels Tour: Assembly Language 1 (video)

Precept 13: (Monday/Tuesday) Assembly Language: Getting Started

(Tuesday 3/24) Symbol Table Assignment Due (at 9:00PM)

Lecture 14: (Wednesday) Language-Levels Tour: Assembly Language 2 (video)

Precept 14: (Wednesday/Thursday) Assembly Language: Fundamentals, Control Transfer (Part 1), Linux File Permissions and File Sharing


Week 9: 3/30 - 4/5

Reading (recommended): ARM 64 Bit Assembly Language (Pyeatt with Ughetta) 6-7 (available as hard copy through Pequod)

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 7

Lecture 15: (Monday) Language-Levels Tour: Assembly Language Function Calls (video)

Precept 15: (Monday/Tuesday) Assembly Language: Control Transfer (Part 2), Instruction Operands, GDB for Assembly Language

Lecture 16: (Wednesday) Performance Improvement (video)

Precept 16: (Wednesday/Thursday) Assembly Language: Local Variables, Functions, The Assignment 4 BigInt_add Function


Week 10: 4/6 - 4/12

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.1-8.3 (available through Blackboard in the "Course Materials" section)

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 6

Lecture 17: (Monday) Buffer Overrun Attacks, Machine Language 1 (video)

Precept 17: (Monday/Tuesday) Buffer Overrun Attack "B", Writing Binary Data

(Tuesday 4/7) Assembly Language and Testing Assignment Due (at 9:00PM)

Lecture 18: (Wednesday) Machine Language 2; Assembler and Linker (video)

Precept 18: (Wednesday/Thursday) MiniAssembler, Buffer Overrrun Attack "A"


Week 11: 4/13 - 4/19

Reading (required): The C Programming Language (Kernighan & Ritchie) 8.7 (available through Blackboard in the "Course Materials" section)

Reading (required): Computer Systems (Bryant & O'Hallaron) 9 (available through Blackboard in the "Course Materials" section)

Lecture 19: (Monday) Service-Levels Tour: Processes and Exceptions (video)

Precept 19: (Monday/Tuesday) C Abstract Objects; The HeapMgr Assignment: Introduction

Lecture 20: (Wednesday) Service-Levels Tour: Storage Hierarchy and Virtual Memory (video)

Precept 20: (Wednesday/Thursday) The HeapMgr Assignment: Linked List Implementation Data Structures, Algorithms, and Code

(Thursday 4/16) Buffer Overrun Assignment Due (at 9:00PM)


Week 12: 4/20 - 4/26

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.4 (available through Blackboard in the "Course Materials" section)

Lecture 21: (Monday) Service-Levels Tour: Dynamic Memory Management (video)

Precept 21: (Monday/Tuesday) The HeapMgr Assignment: Doubly-Linked List Implementation Data Structures, Algorithms, and (Partial) Code, Bins Implementation Data Structures, Algorithms, and (Partial) Code

Lecture 22: (Wednesday) Service-Levels Tour: Process Management (video)

Precept 22: (Wednesday/Thursday) The Unix Shell Assignment: Introduction


Week 13: 4/27 - 5/3

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 10

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.5 (available through Blackboard in the "Course Materials" section)

Reading (required): C Programming (King) 24.2-3

Lecture 23: (Monday) Service-Levels Tour: I/O Management (video)

Precept 23: (Monday/Tuesday) The Unix Shell Assignment: Processes

Lecture 24: (Wednesday) Service-Levels Tour: Signals (video)

Precept 24: (Wednesday/Thursday) The Unix Shell Assignment: I/O Redirection and Signals

(Thursday 4/30) Heap Manager Assignment Due (at 9:00PM)


Reading Period: 5/4 - 5/12

(Tuesday 5/12) Dean's Date

(Tuesday 5/12) Shell Assignment Due (at 5:00PM)


Final Exam Period: 5/13 - 5/23

(TBA) Final Exam Prep Session, TBA, TBA

(Friday 5/15) Final Examination, 9:00AM, McDonnell A02 (Final Exam Prep Document, Final Exams and Answers from Previous Semesters)

(Online) Final Exam Preparation Mateirals: Final Exam Prep Document, Final Exams and Answers from Previous Semesters, Piazza post @596 for additional materials as they become available.

(5/15-5/18) Final Examination, any 3 hour window between 9am EDT on Friday 5/15 and 9am EDT on Monday 5/18. See Piazza post @601 for additional details as they become available.


All lecture notes are copyright 2001-2020 by Andrew W. Appel, David August, Thomas Funkhouser, Aarti Gupta, David R. Hanson, Kai Li, Christopher Moretti, Vivek Pai, Larry Peterson, Jennifer Rexford, Szymon Rusinkiewicz, Jaswinder Pal Singh, Randolph Wang, and/or Robert M. Dondero, Jr. All precept handouts are copyright 2001-2020 by Robert M. Dondero, Jr. Permission to reproduce these notes for not-for-profit educational purposes is hereby granted. These notes may not be reproduced for commercial purposes without the express written consent of the author.