Distributed Systems

Just a brief follow-up on our conversation (totally tangential to 573).

When I say "Distributed Systems", here are the topics I'm thinking of,
other than the obvious OS issues, and basic networking, and client/server
architectures and RPC. And I'm wondering whether/where they're covered in
our curriculum.

 Distributed shared memory, cache consistency including loose 
   consistency, release consistency, etc.
 Process migration/process scheduling
 Naming (distributed)
 Reaching agreement: 
   (agreement procotols, two- or three-phase commit, byzantine agreement, etc.)
   (Message passing/direct communication vs. Shared memory vs. hybrid schemes)
 Fault tolerance/Recovery/Availability 
 Data representation (dealing with heterogeneity).

There are plenty of basic topics I haven't hit on.  I'd probably put causal
ordering or totally ordered communications systems into the agreement
protocol bin.  Is that stuff covered in a distributed database course?  I'm
sure there are plenty of topics covered in other courses that have
distributed systems spin, e.g. security, authentication (covered in
security), presentation protocols (covered in networking), logging and
transactions (covered in databases).