Weekly Syllabus





September 3
Introduction / Course Overview   Introductory notes

September 8
The System Interface - background
Ch. 1

September 10
Libraries versus system calls
Ch. 3
Assignment 0 (primer)

September 15
Assignment 0 discussion
Building static and dynamic libraries
From the links in the assignment, read about static and dynamic libraries, and the BFD library

Also see information from the first lab
September 17
File I/O: file descriptors, unbuffered I/O etc
Ch. 3 Notes on file IO

September 22 File I/O operations, file descriptor duplication, file types, kernel data structures
Ch. 4 Notes on files and directories
September 24 File access rights, set-user/group-ID, file status (stat/fstat/lstat) etc
Ch. 4

September 29 Filesystems, i-nodes, hard vs symbolic links
Ch. 5 Primer assignment due September 30th by 4:00pm EDT (Hard deadline)
You must demo your assignment via zoom in a lab time slot that we will set up using doodle.

Please make sure all files are submitted via Gradescope before labs, as there will be a timeout for file uploads and you will not be graded otherwise.
October 1
The Standard I/O library: buffered I/O
Ch. 7 Assignment 1

October 6 Standard I/O library continued (writing your own printf, supporting variadic arguments, function calling conventions, comparison of buffering semantics)

Notes on the standard I/O Library
October 8
The process environment
Ch. 7
Notes on the process environment

October 13
** No Class ** Ch. 8 - Substitute Monday Schedule -
October 15
Control flow (setjmp, longjmp, basis for exception handling and multi-threading)
Ch. 8 Notes on process creation and execution

October 20 Assignment 1 discussion: file tree walking, grep/regular expressions, process creation/fork etc.
Ch. 10 Lab discussion will now be moved to October 21 instead of October 28
October 22 Process creation: fork and exec, etc Ch. 10

October 27 Signals
Ch. 11 Notes on signals

Assignment 1 due at 4:00pm October 28 US Eastern via Gradescope.
Demos will be conducted during lab times.

Second & Third Editions of the textbook have a chapter on threads
October 29
Signals continued
Ch. 11 Assignment 2

November 3
Overview of assignment 2

Threads: concepts, context functions to support implementation of threads (code walkthrough)
Ch. 15
November 5
Sigaltstack approach to portable multi-threading (code walkthrough)
Ch. 15 See technical paper in Assignment 2 for details of writing your own threads using sigaltstack, setjmp, and longjmp

November 10 Interprocess communication overview: pipes, FIFOs, semaphores, message queues, etc
Ch. 14 Notes on inter process communication 
November 12 Shared memory-based IPC Ch. 14

November 17 Non-blocking I/O, asynchronous I/O, I/O multiplexing, poll vs select

Assignment 2 due at 4:00pm November 18 US Eastern via Gradescope (No extensions)
November 19 Miscellaneous I/O topics: scatter-gather, memory-mapped I/O, Linux sendfile, record locking

Notes on advanced I/O topics

November 24 Assignment 3 discussion: sockets, web/file servers, serial communication/terminal I/O

Assignment 3

Example socket files
Exam guide
November 26
** Classes Suspended **
- Thanksgiving Recess -

December 1
Class Exam

December 3
Physical computing: Arduino basics, Raspberry Pi basics
Physical computing and more advanced features: GPIOs, Linux sysfs, etc
See information on AVR libc, newlib (alternate C library implementations)
Example code (aactrl.c and aactrl.h) to show
how I use sockets to communicate between a remote
device (for me, an Android device) and a PC, followed by relaying commands from a PC to an Arduino via serial terminal IO

December 8
Short (5-10) minute slide presentations for group assignments -- Session 1    
December 10 Short (5-10) minute slide presentations for group assignments -- Session 2
  - Last Day of Classes -

Assignment 3 due 3:00pm 12/18/2020 (GMT-5) via Gradescope