Class 1:
 | Introduction to the course -- exams, homeworks, projects, lectures,
book
|
 | Introduction to Multiprocessor Operating Systems
|
 | Introduction to Distributed Operating Systems
|
 | Ramblings on Turing Machines and Distributed Systems Theory
|
Class 2:
 | Why multiprocessors
|
 | Multiprocessor Classifications
|
 | Caching in uniprocessors
|
 | Caching in Multiprocessors
|
 | Coherence problems, snoopy caches, cache coherent multiprocessors
|
 | Memory contention, code and data
|
 | Read write data contention
|
Class 3:
 | Memory Contention and memory conflicts
|
 | Atomicity, Race conditions
|
 | Errors due to race conditions
|
 | Structuring a OS kernel -- interrupt driven
|
 | API calls
|
 | Multi-threaded executions in the OS kernel
|
 | Atomicity via Interrupt Disable
|
Class 4:
 | Atomicity
|
 | Critical sections (mutual exclusion, progress, bounded waiting)
|
 | Software solutions (Peterson, Dekker, Lamport)
|
 | Need atomicity to get atomicity (Hardware assist -- interrupt
disable or test-and-set)
|
 | Semaphores-- Dijkstra
|
 | Semaphore implementations (queuing of PCBs in real systems)
|
 | Test and set - atomic instructions
|
 | Using test and set to get atomicity
|
Class 5: Sept 7
 | Semaphores (mutex locks) and Spin locks
|
 | Choice of locks depending on hardware and application
|
 | Process Synchronization
|
 | Producer consumer and variants
|
 | one item buffer, bounded buffer, multiple produces/consumers
|
 | Semaphore implementation for multiprocessors
|
Class 6: Sept 9
 | Reading assignment:
Readers and Writers
|
 | Processes, threads and shared memory
|
 | UNIX IPC
|
 | Programming concurrent threads
|
Class 7: Sept 14
 | programming threads with fork/join, start-thread and cobegin-coend (parbegin-parend)
|
 | thread properties and different types of threads
|
 | barrier synchronization
|
 |
POSIX Threads
|
Class 8:
Class 9:
 | Kernel threads and programming
|
 | User level threads
|
 | How to implement user level threads
|
 | Cooperating multitasking
|
Class 10:
 | Threads, again
|
 | Non preemptive, cooperative multiprogramming
|
 | Preemptive threads
|
 | Kernel Level threads
|
 | Atomicity/Synchronization/MT Safe libraries
|
 | Shared Memory Parallel Programming (loops, threads and barriers)
|
Class 11:
 | Scheduling in Multiprocessors (Round Robin, Co-Scheduling, Affinity
Scheduling, Handoff Scheduling)
|
 | Parallel Programming - shared memory and message passing
|
 | PVM, MPI, Open MP
|
 | Linda
|
Class 12:
 | Linda
|
 | NUMA architecture and programming
|
 | NORMA (Cluster) architecture and programming
|
 | Distributed Systems.....
 | Autonomy and collaboration
|
 | Load balancing, efficiency, reliability
|
 | USAGE: Distributed Application - Info sharing - resource sharing
- reliability - flexibility
|
 | Issues - TRANSPARENCY (access/location/replication/failure)
|
|
Class 13:
 | Physical/Logical centralization and distribution
|
 | Distributable system models - message, object, shared memory
|
 | History of Networking and Distributed Systems
|
 | Data-less Workstation Configuration for Sun-NFS
|
 | Design of Unix File System (inodes, inumbers)
|
 | Mounting remote directories, in NFS
|
|
Class 14:
Class 15:
 | Distributable System Models (message, object, shared memory)
|
 | Basics of Messages
|
 | Semantics of SEND
|
 | Semantics of RECEIVE
|
 | Programming with Send and Rcv
|
 | Using PORTS
|
Class 16:
 | Client server programs
|
 | Why are servers needed (global state)
|
 | Post assignment for multiple client single server (also
connectionless communications)
|
 | Nameservers
|
Class 17:
 |
Micro-kernels |
 |
How micro-kernels work |
 |
Advantages, Disadvantages of micro-kernels |
 |
How to implement PORTS -- in single machine
systems (or multiprocessors) |
 |
|
Class 18:
 | Port implementations (Use a buffer and semaphores, and a producer
consumer structure) |
 | Ports in multiprocessors |
 | Ports in distributed systems |
 | Messaging across a network |
Class 19:
 | Global ports, or distributed implementation of ports
|
 | Local and remote sends and receives
|
 | The NetMsg Service (network message service)
|
 | add network send and receive for message transport
|
 | path send and receive to interface with netmsg service
|
 | use threads for waiting in netmsg service
|
 | netmsg serice without threads (more the delivery of messages to the
sender, in case the receiver has to wait)
|
Class 20:
 | Multithreading servers
|
 | Using separate multiple processes
|
 | Dynamic threads
|
 | Static Threads
|
 | Passing arguments to threads
|
 | Advantages, disadvantages of multithreading
|
 | Recursive servers
|
 | Stateless/Single threaded servers and Cookies
|
Class 21:
 | Cookies revisted
|
 | Lock server
|
 | Locking modes and semantics
|
 | Algortihms for locking - starvation prevention
|
Class 22:
 | Upgrades and downgrades of locks
|
 | RPC - introduction
|
Class 23:
 | RPC properties and semantics (parameter passing)
|
 | IDL for defining RPC
|
 | IDL Compiler
|
 | Generation of RPC server
|
 | Generation of Client Stubs
|
 | Client server version control
|
 | Introduction to DSM
|
Class 24:
 | "page based" Distributed Shared Memory
|
 | DSM server and DSM clients
|
 | Algorithms for client and server for coherence
|
 | Page modes
|
 | Invalidation
|
 | Page shuttling -- advantages and disadvantages of DSM
|
 | False sharing -- and locking
|
 | Release Consistent DSM
|
Class 25:
 | Muddy Children Problem (read Halpern and Moses, see reading list)
|
 | Hierarchies of Knowledge
|
 | Consensus in Distributed Systems (Coordinated Attack Problem)
|
 | Two Phase Commit algorithm
|
Class 26:
 | Time-Even Ordering-Lamport Clocks-Distributed Mutual Exclusion (see
paper)
|
Class 27:
 | Distributed Snapshots |
Class 28:
 | Review |
|