The following are expectations for the Midterm Exam of what you should know
based on material covered in lecture, from Chapters 11, 12 and 15 in
SGG, Chapter 6 in TOS, and Chapters 1 and 2 in TDS.

Understand Projects 0 and 1.

% File Systems

Know that a file is a collection of permanent data that has a name assigned
to it.

Know that files are abstract entities provided by the operating system.

Understand issues in naming files including file lengths and use of
extensions, 

Know what a directory is and how it is used.

Understand how a hierarchical vs. a flat file system is organized.

Understand the difference between an absolute vs. a relative file name.

Know that operating systems may use the file namespace for other types of
objects such as devices or processes.

Understand the concept of a file alias or hard link.

Understand the concept of an indirect file or symbolic/soft link.

Know the use of special aliases "." and ".." in a directory.

Know the types of access operations for an object.

Understand the general concept of an access matrix and what it represents.

Know what a capability list is along with its advantages and disadvantages.

Know what an access list is along with its advantages and disadvantages.

Understand that access lists can use classes.  Understand how access
lists and classes are used in Unix and Windows NT.

Know the difference between sequential access, direct access, memory mapped
access and structured record access to a file.

Understand how the experimental observation that most files
are small with a few files being large affects file system design.

Know what are disk blocks in file system design and how they are used
in file system design.

Know how free disk blocks are managed.

Know that caching is important in improving file system performance and how
it is used.

Understand what a journaling-based (or log-based) file system works along
with its advantages and disadvantages.

Know that file dumps are used to allow recovery of a file system.

Understand how RAID is used to improve file system reliability.

Understand the purpose of the File Allocation Table in the FAT file
system including the fields it contains.

Know the types of information maintained in a FAT-16 directory entry.

Understand that each FAT file system occupies a partition on disk.

Understand the difference between the FAT-16 and FAT-32 file systems
and the reason for the change.

Understand how the NT File System (NTFS) uses attributes to store
file name, security descriptor and the contents of a file.

Know what information is maintained in a Master File Table (MFT) entry
for each file in a NTFS volume.

Know that the unit of disk allocation is a cluster (like a disk block)
in NTFS.

Know how directory information is stored in NTFS.

Know how file data not stored in the MFT entry is stored in clusters
with a LCN-to-VCN mapping table for consecutive clusters.

Know that each Unix file system is stored in a partition on disk.

Know that each Unix file system contains a boot block, a super block,
an array of inodes and data blocks.

Know what is contained (and not contained) in an inode.

Understand the set of steps to find the inode for a file in the Unix
file system.

Understand the algorithm for finding the path name for the current
working directory in a Unix file system.

Understand how Unix stores file contents.

Understand what problems with the original Unix file system led to
changes in the Berkeley Unix Fast File System.

Know what cylinder groups are used for in the Fast File System.

Know how the Linux file system ext2fs compares with the Fast File
System.

Understand what is file mounting and how it is used.

Know interesting characteristics of other file systems we discussed in
class.

% Distributed Systems

Understand how a multiprocessor with a Uniform Memory Access model
is organized.

Understand how a multiprocessor with a Non-Uniform Memory Access model
is organized.

Understand the distinguishing features of distributed operating systems,
network operating systems and middleware systems.

Be aware of the following design issues in distributed systems: resource
sharing, transparency, flexibility, reliability, performance,
scalability, naming, communication and consistency.

% Communication

Understand the client-server model.

Understand the difference between a blocking and non-blocking send.

Understand the motivation in developing the remote procedure call (RPC)
paradigm for distributed computing.

Know the basic steps in making a remote procedure call.

Understand issues in marshaling parameters in a RPC mechanism.

Understand issues in handling call-by-reference parameters.

Understand issues in naming and location of RPC services.

Understand the semantics of RPC mechanisms when failures occur.

Know how breadth-of-life packets can be used to detect a network or server
failure in an RPC mechanism.

Understand what it means for an operation to be idempotent.

Be able to explain the semantics "exactly once," "at most once," and
"at least once" for RPCs in the face of failures.

Understand how transport protocols are used by RPC mechanisms.

Know what it means for a message delivery mechanism to be persistent.  Know
what it means for a message sender to be synchronous.  Know how these ideas
can be combined to create different forms of communication.

Understand how group communication can be used in distributed computing.