Weekly Syllabus


Date

Topic

Reading

Notes

links will become active on the assigned date

January 21
Introduction / Course Overview   Introductory notes
January 23 The System Interface - background Ch. 1 Old Linux notes (for background to how syscalls are made)




January 28
Libraries versus system calls
Ch. 3
Assignment 0 (primer)
January 30 Assignment 0 discussion
Building static and dynamic libraries
From the links in the assignment, read about static and dynamic libraries, and the BFD library Notes on benchmarking time measurements
Notes on libraries

Also see information from the first lab




February 4
File I/O: file descriptors, unbuffered I/O etc
Ch. 3 Notes on file IO
February 6
File I/O operations, file descriptor duplication, file types, kernel data structures
Ch. 4 Notes on files and directories




February 11
File access rights, set-user/group-ID, file status (stat/fstat/lstat) etc
Ch. 4
Primer assignment due February 12

You must demo your assignment in a lab time slot that will be available via a signup sheet

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.
February 13
Filesystems, i-nodes, hard vs symbolic links
Ch. 5 Assignment 1




February 18
No Class

Substitute Monday Schedule for Presidents' Day Holiday
February 20
The Standard I/O library: buffered I/O
Ch. 7




February 25
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
February 27
Assignment 1 discussion: file tree walking, grep/regular expressions Ch. 7
Notes on regular expressions

Additional notes on Perl, which has powerful regexp capabilities




March 4
Process control -- creation and execution
Ch. 8

Paper on two-level segregated fit (TLSF) memory allocation
Assignment 1 due via Gradescope on March 6
Demos will be conducted during lab times

Notes on the process environment

Dynamic memory allocation notes
March 6
Process control -- environment, address spaces
Ch. 10 Notes on process creation and execution




March 11
Spring Recess


March 13
Spring Recess






March 18
Control flow -- setjmp/longjmp

Signals
Ch. 10 Notes on signals
March 20
Signals

Overview of assignment 2
Ch. 11 Assignment 2




March 25
Introduction to threads: pthreads, creation, execution and termination
Ch. 11 Notes on threads
Pthread example with circular buffer
Context function example
March 27
Thread concepts continued: synchronization (mutexes, condition variables), attributes, semantics

Producer -- consumer example
Ch. 15 Second & Third Editions of the textbook have a chapter on threads




April 1
Synchronous vs asynchronous communication -- Simpson's 4-slot vs fifo-buffered communication

Code examples

4-slot buffering example
Supporting Perl script to work with live gnuplots
April 3
Sigaltstack approach to portable multi-threading (code walkthrough)
Ch. 15
Portable multithreading
See technical paper in Assignment 2 for details of writing your own threads using sigaltstack, setjmp, and longjmp




April 8
Interprocess communication overview: pipes, FIFOs, semaphores, message queues, etc
Ch. 14 Notes on inter process communication

Assignment 2 due via Gradescope on April 9
April 10
Shared memory-based IPC Ch. 14





April 15
Non-blocking I/O, asynchronous I/O, I/O multiplexing, poll vs select


Notes on advanced I/O topics
April 17
Assignment 3 discussion: sockets, web/file servers, serial communication/terminal I/O
Assignment 3 (Group Project)

Overview of the Quest-V SDK

Example socket files
Exam guide




April 22
Miscellaneous I/O topics: scatter-gather, memory-mapped I/O, Linux sendfile, record locking
Notes on network sockets
April 24
Class Exam






April 29
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
May 1
Short (5-10) minute slide presentations for group assignments
 - Last Day of Classes

Assignment 3 due 3 via Gradescope before final demos