Course Content
UNIX Standards
- Brief History of UNIX
- AT&T and Berkeley UNIX Systems
- Major Vendors
- What is a Standard?
- What is POSIX?
- Other Industry Specs and Standards
- Library vs. System-Level Functions
Files and Directories
- Basic File Types
- File Descriptors
- The open() and creat() Functions
- Keeping Track of Open Files
- File Table Entries
- The v-node Structure
- The fcntl() Function
- The fcntl() Function - with F_DUPFD Command
- File Attributes
- The access() Function
- link(), unlink(), remove(), and rename() Functions
- Functions to Create, Remove, and Read Directories
System I/O
- Standard I/O vs system I/O
- System I/O Calls
- File and Record Locking
Processes
- What is a Process?
- Process Creation and Termination
- Process Memory Layout
- Dynamic Memory Allocation
- Accessing Environment Variables
- Real and Effective User IDs
Process Management
- The Difference Between Programs and Processes
- The fork() System Function
- Parent and Child
- The exec System Functions
- Current Image and New Image
- The wait() Functions
- The waitpid() Function
- Interpreter files and exec
Basic Interprocess Communication: Pipes
- Interprocess Communication
- Pipes
- FIFOs
Signals
- What is a Signal?
- Types of Signals
- Signal Actions
- Blocking Signals from Delivery
- The sigaction() function
- Signal Sets and Operations
- Sending a Signal to Another Process
- Blocking Signals with sigprocmask()
- Scheduling and Waiting for Signals
- Restarting System Calls (SVR4)
- Signals and Reentrancy
Introduction to Pthreads
- Processes and Threads
- Creating Threads
- Multitasking
- Overview of Thread Architectures
- Processes Versus Threads
- The Pthreads API
- Thread Termination
- Joining Threads
- Detaching Threads
- Passing Arguments to Threads
Pthreads Synchronization
- The Sharing Problem
- Mutexes
- Creating and Initializing Mutexes
- Using Mutexes
- Additional Synchronization Requirement
- Using Condition Variables
Overview of Client/Server Programming with Berkeley Sockets
- Designing Applications for a Distributed Environment
- Clients and Servers
- Ports and Services
- Connectionless vs. Connection-Oriented Servers
- Stateless vs. Stateful Servers
- Concurrency Issues
The Berkeley Sockets API
- Berkeley Sockets
- Data Structures of the Sockets API
- Socket System Calls
- Socket Utility Functions
TCP Client Design
- Algorithms instead of Details
- Client Architecture
- Generic Client/Server Model - TCP
- The TCP Client Algorithm
TCP Server Design
- General Concepts
- Iterative Servers
- Concurrent Servers
- Performance Consideration
- An Iterative Server Design
- A Concurrent Server Design
System V Interprocess Communication
- System V IPC
- Elements Common to msg, shm, and sem Facilities
- The Three System V IPC Facilities
- IPC via Message Queues
- IPC via Shared Memory
- Coordinating the Use of Shared Memory Segments
- Semaphore Sets - semget()
- Semaphore Sets - semctl()
- Semaphore Sets - the semop() call
- Shared Memory Coordination Using Semaphores
- Commands for IPC Facility Handling - ipcs and ipcrm