MATH 389
 Computing
 Systems

   a survey of hardware and software systems from
   a programmer's perspective

A study of the design and implementation of computing systems, focusing on aspects whose underpinnings are firmly based in algorithms and applied logic or whose implementation offers interesting problems in those areas. A survey of computer architecture and the hardware-software interface, compilation and run time, and concurrent and networked programming. An introduction to theoretical approaches to problems related to the synchronization and coordination of independently executing processes.

Your charge this semester is to master C programming, examine the structure of its compiled code, and learn the layout of its programs' memory and the representation of its programs' runtime system. We'll look at support for concurrency in the form of POSIX threads. We consider methods for synchronizing threads and for managing concurrent data structures. We'll look at support for network communication in the form of Unix sockets and consider ways of structuring distributed systems and the design of the cloud computing infrastructure. We look at communiction protocols for maintaining consistent state within a cloud service, despite the distribution of control and data within its cloud, ones that are robust against component disconnections and failure.
Prerequisites: MATH 221

Meets: 1:40-3pm TuTh in Library 389.
Course web: http://www.reed.edu/~jimfix/math389
Instructor: Jim Fix
E-mail: jimfix@reed.edu
Office: Library 314
Office Hours: 1:10-2:30pm MW, 3:10-4:30 Tu
Texts:
    Bryant & O'Hallaron, Computer Systems: A Programmer's Perspective.
    Kernighan & Ritchie, The C Programming Language.

Materials:
Week 01: introduction to C

Assignments:
Homework 01: basic C due: 9/1/16