Operating Systems in Depth

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

This book is designed for a one-semester operating-systems course for advanced undergraduates and beginning graduate students. Prerequisites for the course generally include an introductory course on computer architecture and an advanced programming course.

The goal of this book is to bring together and explain current practice in operating systems. This includes much of what is traditionally covered in operating-system textbooks: concurrency, scheduling, linking and loading, storage management (both real and virtual), file systems, and security. However, the book also covers issues that come up every day in operating-systems design and implementation but are not often taught in undergraduate courses. For example, the text includes:

Deferred work, which includes deferred and asynchronous procedure calls in Windows, tasklets in Linux, and interrupt threads in Solaris. The intricacies of thread switching, on both uniprocessor and multiprocessor systems. Modern file systems, such as ZFS and WAFL. Distributed file systems, including CIFS and NFS version 4. The book and its accompanying significant programming projects make students come to grips with current operating systems and their major operating-system components and to attain an intimate understanding of how they work.

Author(s): Thomas W. Doeppner
Publisher: Wiley
Year: 2010

Language: English
Pages: 444

Cover
Title Page
Copyright
Preface
Contents
1 Introduction
1.1 Operating Systems
1.1.1 Operating Systems as a Field of Study
1.2 A Brief History of Operating Systems
1.2.1 The 1950s: The Birth of the Concept
1.2.2 The 1960s: The Modern OS Takes Form
1.2.3 Minicomputers and Unix
1.2.4 The Personal Computer
1.3 A Simple OS
1.3.1 OS Structure
1.3.2 Processes, Address Spaces, and Threads
1.3.3 Managing Processes
1.3.4 Loading Programs into Processes
1.3.5 Files
1.4 Beyond a Simple OS
1.4.1 Extensions
1.4.2 New Functionality
1.5 Conclusions
1.6 Exercises
1.7 References
2 Multithreaded Programming
2.1 Why Threads?
2.2 Programming with Threads
2.2.1 Thread Creation and Termination
2.2.2 Threads and C++
2.2.3 Synchronization
2.2.4 Thread Safety
2.2.5 Deviations
2.3 Conclusions
2.4 Exercises
2.5 References
3 Basic Concepts
3.1 Context Switching
3.1.1 Procedures
3.1.2 Threads and Coroutines
3.1.3 System Calls
3.1.4 Interrupts
3.2 Input/Output Architectures
3.3 Dynamic Storage Allocation
3.3.1 Best-Fit and First-Fit Algorithms
3.3.2 Buddy System
3.3.3 Slab Allocation
3.4 Linking and Loading
3.4.1 Static Linking and Loading
3.4.2 Shared Libraries
3.5 Booting
3.6 Conclusions
3.7 Exercises
3.8 References
4 Operating-System Design
4.1 A Simple System
4.1.1 A Framework for Devices
4.1.2 Low-Level Kernel
4.1.3 Processes and Threads
4.1.4 Storage Management
4.2 Rethinking Operating-System Structure
4.2.1 Virtual Machines
4.2.2 Microkernels
4.3 Conclusions
4.4 Exercises
4.5 References
5 Processor Management
5.1 Threads Implementations
5.1.1 Strategies
5.1.2 A Simple Threads Implementation
5.1.3 Multiple Processors
5.2 Interrupts
5.2.1 Interrupt Handlers
5.2.2 Deferred Work
5.2.3 Directed Processing
5.3 Scheduling
5.3.1 Strategy
5.3.2 Tactics
5.3.3 Case Studies
5.4 Conclusions
5.5 Exercises
5.6 References
6 File Systems
6.1 The Basics of File Systems
6.1.1 Unix’s S5FS
6.1.2 Disk Architecture
6.1.3 Problems with S5FS
6.1.4 Improving Performance
6.1.5 Dynamic Inodes
6.2 Crash Resiliency
6.2.1 What Goes Wrong
6.2.2 Dealing with Crashes
6.3 Directories and Naming
6.3.1 Directories
6.3.2 Name-Space Management
6.4 Multiple Disks
6.4.1 Redundant Arrays of Inexpensive Disks (RAID)
6.5 Flash Memory
6.5.1 Flash Technology
6.5.2 Flash-Aware File Systems
6.5.3 Augmenting Disk Storage
6.6 Case Studies
6.6.1 FFS
6.6.2 Ext3
6.6.3 Reiser FS
6.6.4 NTFS
6.6.5 WAFL
6.6.6 ZFS
6.7 Conclusions
6.8 Exercises
6.9 References
7 Memory Management
7.1 Memory Management in the Early Days
7.2 Hardware Support for Virtual Memory
7.2.1 Forward-Mapped Page Tables
7.2.2 Linear Page Tables
7.2.3 Hashed Page Tables
7.2.4 Translation Lookaside Buffers
7.2.5 64-Bit Issues
7.2.6 Virtualization
7.3 Operating-System Issues
7.3.1 General Concerns
7.3.2 Representative Systems
7.3.3 Copy on Write and Fork
7.3.4 Backing Store Issues
7.4 Conclusions
7.5 Exercises
7.6 References
8 Security
8.1 Security Goals
8.1.1 Threats
8.2 Security Architectures
8.2.1 Access Control in Traditional Systems
8.2.2 Mandatory Access Control
8.2.3 Capability Systems
8.3 Conclusions
8.4 Exercises
8.5 References
9 Introduction to Networking
9.1 Network Basics
9.1.1 Network Protocols
9.2 Remote Procedure Call Protocols
9.2.1 Marshalling
9.2.2 Reliable Semantics
9.3 Conclusions
9.4 Exercises
9.5 References
10 Distributed File Systems
10.1 The Basics
10.2 NFS Version 2
10.2.1 RPC Semantics
10.2.2 Mount Protocol
10.2.3 NFS File Protocol
10.2.4 Network Lock Manager
10.3 Common Internet File System (CIFS)
10.3.1 Server Message Block (SMB) Protocol
10.3.2 Opportunistic Locks
10.4 DFS
10.5 NFS Version 4
10.5.1 Managing State
10.5.2 Dealing with Failure
10.6 Conclusions
10.7 Exercises
10.8 References
Appendix Index of URLs
Index