Syllabus
Description: 
    This course explores modern interrupt-driven computer systems. It
    considers models of computation and complex systems,
    techniques for communication and synchronization of parallel and
    concurrent software, and the protocols that make up the
    Internet.
    
Textbook: 
    The primary book for this course is:
      
Bryant,
        R.E.
        and
        D.R. O'Hallaron
    (2016)
  Computer Systems: A Programmer's Perspective, Pearson
    , Boston, MA.
         
    (Order from 
    
      amazon
    
    , order from
    
      Barnes and Noble
    
    , compare at
    
      bigwords
    
    , compare at
    
      CampusBooks4Less
    
    , order from
    
      Chegg
    
    , or search
    
      eFollett
    
    )
    
    The other required readings are available on-line (prefixed with
    one or more letters).
    
 
Outline: This course is organized as follows, though specific topics and dates may change. (Readings are listed in the right-most column.)
| 
Part I: Review and Background
 | 
| 1/10 | 
            A Review of C
           
      , 
      
	    Scope, Duration and Linkage
	  
      and 
      
	    System Calls
	  
 | 
            B1 
 | 
| 1/12 | 
	    Files
	   
      , 
      
	    Unix I/O
	   
      , 
      
	    File Descriptors
	   
      , 
      
	    Terminals
	  
      and 
      
	    The C Calling Convention
	  
 | 
	    10.1-10.3, 10.8-10.11
	   | 
| 1/17-1/19 | 
	    State Models
	  
      and 
      
	    Implementing State Models
	  
 | 
            B2 
      and 
      
            B3 
 | 
| 1/24 | 
	    Control Flows
	   
      , 
      
	    Exceptions/Interrupts
	  
      and 
      
            Coordination Problems
          
 | 
	    1.7.1, 8.1, 8.2
	   | 
| 
Part II: Concurrent Programming with Processes
 | 
| 1/26-1/31 | 
            Concurrent Processes without Interprocess Communication 
            
      and 
      
            An Aside on Memory Corruption
	  
 | 
            8.3, 12.1
	   | 
| 2/2 | 
            An Overview of Interprocess Communication
          
 | 
 | 
| 2/9 | 
          Concurrent Processes with Limited Interprocess Communication:
  	  
            Signals
          
 | 
            8.4, 8.5
	   | 
| 2/14 | 
Exam 1
 | 
 | 
| 2/16-2/21 | 
          Concurrent Processes with Byte Stream Data Transfer:
  	  
            Pipes and FIFOs
	  
 | 
 | 
| 2/23-2/28 | 
            Synchronization of Processes with Semaphores
	  
      and 
      
            Semaphores for Coordination Problems
	  
 | 
 | 
| 
Part III: Concurrent Programming with Threads
 | 
| 3/2 | 
            Thread Basics
	  
 | 
            12.3
	   | 
| 3/14 | 
University Closed due to Inclement Weather
 | 
 | 
| 3/16 | 
            Shared Variables
	  
 | 
            12.4
	   | 
| 3/21 | 
          Coordination:
  	  
            Ensuring Mutual Exclusion
	  
      and 
      
            Notification of State Changes
	  
 | 
            12.5
	   | 
| 3/23-3/28 | 
            Reentrancy
	   
      , 
      
            Thread-Specific Data
	   
      , 
      
            Thread-Local Storage
	   
      , 
      
            Thread-Safety
	  
      and 
      
            Comparing Multi-Threading and Multi-Processes
          
 | 
            12.7
	   | 
| 3/30 | 
Exam 2
 | 
 | 
| 
Part IV: Data Networks
 | 
| 4/4 | 
            Communication
	   
      , 
      
            A Layered View of Communication Networks
	   
      , 
      
            Internet Programming Basics
           
      , 
      
           An Application Layer Protocol: DNS
          
      and 
      
           Using DNS
          
 | 
 | 
| 4/6-4/13 | 
          The Transport Layer:
          
             Multiplexing
           
      , 
      
             UDP
	   
      , 
      
             UDP Sockets
           
      , 
      
             TCP
	  
      and 
      
             TCP Sockets
          
 | 
            11.4
	   | 
| 4/18-4/20 | 
          The Network Layer:
          
            Routers
           
      , 
      
            IP
	   
      , 
      
            ICMP
	  
      and 
      
            Routing
          
 | 
            11.3
	   | 
| 4/25 | 
          The Link Layer: 
  	  
            Ethernet
	   
      , 
      
            ARP
	  
      and 
      
            WiFi
	  
 | 
            11.1, 11.2
	   | 
| 
Part V: Parallel Programming
 | 
| 4/27 | 
            Architectures and Communication Models
	  
 | 
           L&K
	  
 | 
 
        Attendance at lectures is not mandatory but is strongly encouraged.
        You are expected to come to class prepared to ask and
        answer questions. Hence,
        you should complete the readings on a topic before it
        is discussed in lecture.
        
Grading: 
      Final grades will be based on your performance on: 
      1
early exam during the semester (20% total) 
      , 
      1
later exam during the semester (30% total) 
      , 
      1
final exam during the 
exam period (30% total)
      and 
      several
programming assignments (20% total).
      
 
Programming Assignments: 10
      programming assignments will be
      assigned during the semester.  Note that their due dates are subject
      to change.
      
      Make sure you read and understand all of the
      policies
      related to programming assignments.
      
 
Office Hours: 
      You may meet with Prof. Bernstein during his 
      
        scheduled office hours
       
      or you may schedule an appointment with him.