UID:
edoccha_9960074156002883
Format:
1 online resource (xxv, 522 pages) :
,
illustrations
ISBN:
0-12-800817-2
,
0-12-800729-X
Content:
Systems Programming: Designing and Developing Distributed Applications explains how the development of distributed applications depends on a foundational understanding of the relationship among operating systems, networking, distributed systems, and programming. Uniquely organized around four viewpoints (process, communication, resource, and architecture), the fundamental and essential characteristics of distributed systems are explored in ways which cut across the various traditional subject area boundaries. The structures, configurations and behaviours of distributed systems are all examined, allowing readers to explore concepts from different perspectives, and to understand systems in depth, both from the component level and holistically. Explains key ideas from the ground up, in a self-contained style, with material carefully sequenced to make it easy to absorb and follow. Features a detailed case study that is designed to serve as a common point of reference and to provide continuity across the different technical chapters. Includes a 'putting it all together' chapter that looks at interesting distributed systems applications across their entire life-cycle from requirements analysis and design specifications to fully working applications with full source code. Ancillary materials include problems and solutions, programming exercises, simulation experiments, and a wide range of fully working sample applications with complete source code developed in C++, C# and Java. Special editions of the author's established 'workbenches' teaching and learning tools suite are included. These tools have been specifically designed to facilitate practical experimentation and simulation of complex and dynamic aspects of systems.
Note:
Includes index.
,
Front Cover -- Systems Programming: Designing and Developing Distributed Applications -- Copyright -- Dedication -- Contents -- Preface -- The origin and purpose of this book -- The intended audience -- The organization of the book -- In-text activities -- How to use the book -- The support materials -- Acknowledgments -- Chapter 1: Introduction -- 1.1. Rationale -- 1.1.1. The Traditional Approach to Teaching Computer Science -- 1.1.2. The Systems Approach Taken in This Book -- Chapter 2: Process View -- Chapter 3: Communication View -- Chapter 4: Resource View -- Chapter 5: Architecture View -- Chapter 6: Distributed Systems -- Chapter 7: Case Studies-Putting it All Together -- 1.2. The Significance of Networking and Distributed Systems in Modern Computing-A Brief Historical Perspective -- 1.3. Introduction to Distributed Systems -- 1.3.1. Benefits and Challenges of Distributed Systems -- 1.3.2. The Nature of Distribution -- 1.3.3. Software Architectures for Distributed Applications -- 1.3.4. Metrics for Measuring the Quality of Distributed Systems and Applications -- 1.3.5. Introduction to Transparency -- 1.3.5.1. Access Transparency -- 1.3.5.2. Location Transparency -- 1.3.5.3. Replication Transparency -- 1.3.5.4. Concurrency Transparency -- 1.3.5.5. Migration Transparency -- 1.3.5.6. Failure Transparency -- 1.3.5.7. Scaling Transparency -- 1.3.5.8. Performance Transparency -- 1.3.5.9. Distribution Transparency -- 1.3.5.10. Implementation Transparency -- 1.3.5.11. Achieving Transparency -- 1.4. Introduction to the Case Studies -- 1.4.1. The Main (Distributed Game) Case Study -- 1.4.2. The Additional Case Studies -- 1.5. Introduction to Supplementary Material and Exercises -- 1.5.1. In-Text Activities -- 1.6. The Workbenches Suite of Interactive Teaching and Learning Tools -- 1.6.1. Operating Systems Workbench 3.1 "Systems Programming Edition".
,
1.6.2. The Networking Workbench 3.1 "Systems Programming Edition" -- 1.6.3. Distributed Systems Workbench 3.1 "Systems Programming Edition" -- 1.7. Sample Code and Related Exercises -- 1.7.1. Source Code, in C + +, C#, and Java -- 1.7.2. Application Development Exercises -- Chapter 2: The process View -- 2.1. Rationale and Overview -- 2.2. Processes -- 2.2.1. Basic Concepts -- 2.2.2. Creating a Process -- 2.3. Process Scheduling -- 2.3.1. Scheduling Concepts -- 2.3.1.1. Time Slices and Quanta -- 2.3.1.2. Process States -- 2.3.1.3. Process Behavior -- IO-Intensive Processes -- Compute-Intensive (or CPU-Intensive) Processes -- Balanced Processes -- 2.3.1.4. Scheduler Behavior, Components, and Mechanisms -- 2.3.1.5. Additional Process States: Suspended-Blocked and Suspended-Ready -- 2.3.1.6. Goals of Scheduling Algorithms -- 2.3.1.7. Scheduling Algorithms -- First Come, First Served (FCFS) -- Shortest Job First (SJF) -- Round Robin (RR) -- Shortest Remaining Job Next (SRJN) -- Multilevel Queues -- Multilevel Feedback Queues (MLFQ) -- 2.4. Scheduling for Real-Time Systems -- 2.4.1. Limitations of General-Purpose Schedulers for Real-Time Systems -- 2.4.1.1. The Deadline Scheduling Algorithm -- 2.4.1.2. The Rate Monotonic Scheduling Algorithm -- Introducing Variable, Bursty Workloads -- 2.5. Specific Scheduling Algorithms and Variants, Used in Modern Operating Systems -- 2.6. Interprocess Communication -- 2.6.1. Introduction to Sockets -- 2.7. Threads: An Introduction -- 2.7.1. General Concepts -- 2.7.2. Thread Implementations -- 2.7.3. Thread Scheduling Approaches -- 2.7.4. Synchronous (Sequential) Versus Asynchronous (Concurrent) Thread Operation -- 2.7.5. Additional Complexity Accompanying Threading -- 2.7.5.1. Application Scenarios for Multithreading -- 2.7.6. A Multithreaded IPC Example -- 2.8. Other Roles of the Operating System.
,
2.9. Use of Timers Within Programs -- 2.9.1. Use of Timers to Simulate Threadlike Behavior -- 2.10. Transparency from the Process Viewpoint -- 2.10.1. Concurrency Transparency -- 2.10.2. Migration Transparency -- 2.11. The Case Study from the Process Perspective -- 2.11.1. Scheduling Requirements -- 2.11.2. Use of Timers -- 2.11.3. Need for Threads -- 2.11.4. IPC, Ports, and Sockets -- 2.12. End-of-Chapter Exercises -- 2.12.1. Questions -- 2.12.2. Exercises with the Workbenches -- 2.12.3. Programming Exercises -- 2.12.4. Answers to End-of-Chapter Questions -- 2.12.5. List of In-text Activities -- 2.12.6. List of Accompanying Resources -- Chapter 3: The Communication View -- 3.1. Rationale and Overview -- 3.2. The Communication View -- 3.2.1. Communication Basics -- 3.3. Communication Techniques -- 3.3.1. One-Way Communication -- 3.3.2. Request-Reply Communication -- 3.3.3. Two-Way Data Transfer -- 3.3.4. Addressing Methodologies -- 3.3.4.1. Unicast Communication -- 3.3.4.2. Broadcast Communication -- 3.3.4.3. Multicast Communication -- 3.3.4.4. Anycast Communication -- 3.3.5. Remote Procedure Call -- 3.3.6. Remote Method Invocation -- 3.3.6.1. Java Interfaces -- 3.4. Layered Models of Communication -- 3.4.1. The OSI Model -- 3.4.2. The TCP/IP Model -- 3.5. The TCP/IP Suite -- 3.5.1. The IP -- 3.5.2. The TCP -- 3.5.3. The TCP Connection -- 3.5.3.1. Higher-Layer Protocols That Use TCP as a Transport Protocol -- 3.5.4. The UDP -- 3.5.4.1. Higher-Layer Protocols That Use UDP as a Transport Protocol -- 3.5.5. TCP and UDP Compared -- 3.5.6. Choosing Between TCP and UDP -- 3.6. Addresses -- 3.6.1. Flat Versus Hierarchical Addressing -- 3.6.2. Addresses in the Link Layer -- 3.6.3. Addresses in the Network Layer -- 3.6.3.1. IP Addresses -- 3.6.3.2. IPv4 Addresses -- 3.6.3.3. IPv6 Addresses -- 3.6.3.4. Translation Between IP Addresses and MAC Addresses.
,
3.6.4. Addresses in the Transport Layer (Ports) -- 3.6.5. Well-Known Ports -- 3.7. Sockets -- 3.7.1. The Socket API: An Overview -- 3.7.2. The Socket API: UDP Primitive Sequence -- 3.7.3. The Socket API: TCP Primitives Sequence -- 3.7.4. Binding (Process to Port) -- 3.8. Blocking and Nonblocking Socket Behaviors -- 3.8.1. Handling Nonblocking Socket Behavior -- 3.8.2. Communication Deadlock -- 3.9. Error Detection and Error Correction -- 3.9.1. A Brief Introduction to Error Detection and Error Correction Codes -- 3.10. Application-Specific Protocols -- 3.11. Integrating Communication with Business Logic -- 3.12. Techniques to Facilitate Components Locating Each Other -- 3.13. Transparency Requirements from the Communication Viewpoint -- 3.13.1. Logical and Physical Views of Systems -- 3.14. The Case Study from the Communication Perspective -- 3.15. End-of-Chapter Exercises -- 3.15.1. Questions -- 3.15.2. Exercises with the Workbenches -- 3.15.3. Programming Exercises -- 3.15.4. Answers to End-of-Chapter Questions -- 3.15.5. Answers/Outcomes of the Workbench Exercises -- 3.15.6. List of in-Text Activities -- 3.15.7. List of Accompanying Resources -- Appendix. Socket API Reference -- A1. Socket -- A2. Socket Options -- A3. Socket Address Formats -- A4. Setting a Socket to Operate in Blocking or Nonblocking IO Mode -- A5. Bind -- A6. Listen -- A7. Connect -- A8. Accept -- A9. Send (Over a TCP Connection) -- A10. Recv (Over a TCP Connection) -- A11. SendTo (Send a UDP Datagram) -- A12. Recvfrom (Receive a UDP Datagram) -- A13. Shutdown -- A14. CloseSocket -- Chapter 4: The resource View -- 4.1. Rationale and Overview -- 4.2. The CPU as a Resource -- 4.3. Memory as a Resource for Communication -- 4.3.1. Memory Hierarchy -- 4.4. Memory Management -- 4.4.1. Virtual Memory -- 4.4.1.1. VM Operation -- 4.4.1.2. Page Replacement Algorithms.
,
4.4.1.3. General Mechanism -- 4.4.1.4. Specific Algorithms -- 4.5. Resource Management -- 4.5.1. Static Versus Dynamic Allocation of Private Memory Resources -- 4.5.2. Shared Resources -- 4.5.3. Transactions -- 4.5.4. Locks -- 4.5.5. Deadlock -- 4.5.6. Replication of Resources -- 4.6. The Network as a Resource -- 4.6.1. Network Bandwidth -- 4.6.1.1. Minimal Transmissions -- 4.6.1.2. Frame Size (Layer 2 Transmission) -- 4.6.1.3. Packet Size (Layer 3 Transmission) -- 4.6.1.4. Message Size (Upper Layers Transmission) -- 4.6.2. Data Compression Techniques -- 4.6.2.1. Lossy Versus Lossless Compression -- 4.6.2.2. Lossless Data Compression -- 4.6.2.3. Lossy Data Compression -- 4.6.3. Message Format -- 4.6.3.1. Fixed Versus Variable-Length Fields -- 4.6.3.2. Application-Level PDUs -- 4.6.4. Serialization -- 4.6.5. The Network as a Series of Links -- 4.6.6. Routers and Routing -- 4.6.7. Overheads of Communication -- 4.6.8. Recovery Mechanisms and Their Interplay with Network Congestion -- 4.7. Virtual Resources -- 4.7.1. Sockets -- 4.7.2. Ports -- 4.7.3. Network Addresses -- 4.7.4. Resource Names -- 4.8. Distributed Application Design Influences on Network Efficiency -- 4.9. Transparency from the Resource Viewpoint -- 4.9.1. Access Transparency -- 4.9.2. Location Transparency -- 4.9.3. Replication Transparency -- 4.9.4. Concurrency Transparency -- 4.9.5. Scaling Transparency and Performance Transparency -- 4.10. The Case Study from the Resource Perspective -- 4.11. End-of-Chapter Exercises -- 4.11.1. Questions -- 4.11.2. Exercises with the Workbenches -- 4.11.3. Programming Exercises -- 4.11.4. Answers to End-of-Chapter Questions -- 4.11.5. Answers/Outcomes of the Workbenches Exercises -- 4.11.6. List of in-Text Activities -- 4.11.7. List of Accompanying Resources -- Chapter 5: The Architecture View -- 5.1. Rationale and Overview.
,
5.2. The Architecture View.
Language:
English