Available:*
Library | Item Barcode | Call Number | Material Type | Item Category 1 | Status |
---|---|---|---|---|---|
Searching... | 30000010184057 | QA76.9.D5 B76 2008 | Open Access Book | Book | Searching... |
On Order
Summary
Summary
Distributed processing has a strong theoretical foundation, but many day-to-day practitioners make limited use of the advantages this theory can give them. The result includes unreliable systems with obscure and intermittent failures, that can cost time, money and in extreme cases, lives. Reliable construction of distributed and concurrent systems must incorporate theory in practice.
This book provides a concise presentation of the theory closely linked to the practical realisation of these concepts. Practical presentation is given with examples from C, Java and Eiffel in this comprehensive textbook which contains all the elements needed for a complete development of a distributed system. Theoretical models of concurrency are linked with practical realisation of systems, providing an integrated approach to the field.
Written with undergraduates in mind, especially relevant for intermediate level students, this textbook will prove a comprehensive guide to the topic. Example code will be provided on a website.
Reviews 1
Choice Review
Brooke (Univ. of Teesside, UK) and Paige (Univ. of York, UK) attempt to summarize the most relevant theoretical and practical aspects of distributed computing in an accessible book written for upper-level undergraduate students in software-related studies. The book is certainly comprehensive enough to meet the breadth goal, but as a result, much of its content is presented at a high level, and students may find that they lack the detailed information to fully understand and practice the concepts introduced. To make full use of this work, it is essential to read the additional material cited in the bibliography. The presence of case studies thus becomes not only a welcome addition, but a necessary (and mandatory) section, which allows one to witness meaningful examples of the application of distributed processing concepts. The addition of hints and solutions to the exercises helps students better understand the concepts presented, although not enough for self-learning. The examples and case studies are modern and appropriate. Summing Up: Recommended. Upper-division undergraduate through researchers and faculty. L. Benedicenti University of Regina
Table of Contents
Preface | p. v |
Contents | p. ix |
1 What is Distributed Processing? | p. 1 |
1.1 Overview | p. 1 |
1.2 Evolution of computing and networking | p. 2 |
1.3 Distributed processing | p. 3 |
1.4 Application areas | p. 4 |
1.5 Models | p. 4 |
1.6 Mobile code | p. 5 |
1.7 Challenges with distributed systems | p. 6 |
1.8 Summary | p. 7 |
Exercises | p. 8 |
2 Concepts of Concurrency | p. 11 |
2.1 Overview | p. 11 |
2.2 Architectures in concurrency | p. 12 |
2.3 Naming and addressing | p. 12 |
2.3.1 Examples of names and addresses | p. 13 |
2.3.2 Address mapping mechanisms | p. 14 |
2.4 Sharing and synchronisation | p. 16 |
2.4.1 Allocation of resources | p. 17 |
2.4.2 Example: File synchronisation | p. 17 |
2.5 Low-level synchronisation | p. 18 |
2.5.1 Race conditions | p. 18 |
2.5.2 Mutual exclusion | p. 19 |
2.5.3 Semaphores | p. 20 |
2.5.4 Monitors | p. 23 |
2.5.5 Rendezvous | p. 25 |
2.6 Timing and real-time systems | p. 26 |
2.7 Dependability | p. 26 |
2.7.1 Types of faults and failures | p. 27 |
2.7.2 Responding to failure | p. 28 |
2.8 Server types | p. 28 |
2.9 Clusters, load-balancing and Grids | p. 29 |
2.10 Summary | p. 30 |
Exercises | p. 31 |
3 Models of Concurrency | p. 33 |
3.1 Overview | p. 33 |
3.2 State machines and automata | p. 34 |
3.3 SPIN and Promela | p. 35 |
3.4 Process algebras | p. 36 |
3.4.1 Communicating Sequential Processes | p. 37 |
3.4.2 ¿-calculus and mobility | p. 39 |
3.5 Linda | p. 41 |
3.5.1 JavaSpaces | p. 42 |
3.6 Deadlock revisited | p. 43 |
3.7 Summary | p. 45 |
Exercises | p. 47 |
4 Concurrency in Operating Systems | p. 49 |
4.1 Overview | p. 49 |
4.2 Why use operating systems? | p. 50 |
4.3 Processes and threads | p. 51 |
4.3.1 Concept of a process | p. 51 |
4.3.2 User and supervisor modes in CPUs | p. 52 |
4.3.3 Multitasking | p. 52 |
4.3.4 Threads and lightweight processes | p. 54 |
4.4 Process and thread examples in Linux | p. 54 |
4.4.1 Fork | p. 54 |
4.4.2 Pthreads | p. 56 |
4.5 Tasking in Ada | p. 58 |
4.6 Summary | p. 60 |
Exercises | p. 60 |
5 Interprocess Communication | p. 63 |
5.1 Overview | p. 63 |
5.2 Pthreads IPC examples in Linux | p. 64 |
5.2.1 Mutexes and shared memory | p. 64 |
5.2.2 Semaphores | p. 66 |
5.2.3 Condition variables | p. 68 |
5.3 Mutual exclusion in Ada | p. 71 |
5.4 BSD sockets | p. 74 |
5.5 TCP client-server example | p. 75 |
5.5.1 A simple TCP server | p. 75 |
5.5.2 String termination and networks | p. 80 |
5.5.3 A simple TCP client | p. 81 |
5.5.4 TCP client with name lookup | p. 85 |
5.6 UDP client-server example | p. 85 |
5.6.1 UDP server | p. 85 |
5.6.2 UDP client | p. 87 |
5.7 Two-way communications | p. 89 |
5.8 A forking TCP server | p. 91 |
5.9 Blocking and select | p. 94 |
5.9.1 Select for two-way communications | p. 95 |
5.9.2 Select for serving multiple connections | p. 97 |
5.10 Fault tolerance and IPC timing | p. 97 |
5.11 Summary | p. 98 |
Exercises | p. 98 |
6 Protocols | p. 101 |
6.1 Overview | p. 101 |
6.2 Purpose of protocols | p. 102 |
6.3 Issues in protocols | p. 102 |
6.3.1 High- and low-level protocols | p. 102 |
6.3.2 Messages | p. 105 |
6.3.3 Platform dependence | p. 106 |
6.3.4 Fault tolerance | p. 107 |
6.4 Defining protocols | p. 109 |
6.4.1 Encoding | p. 111 |
6.4.2 Notation | p. 112 |
6.5 Example: HTTP | p. 112 |
6.6 Example: SMTP | p. 113 |
6.7 Example: Alternating bit protocol | p. 114 |
6.8 Summary | p. 117 |
Exercises | p. 117 |
7 Security | p. 121 |
7.1 Overview | p. 121 |
7.2 Definitions, concepts and terminology | p. 122 |
7.2.1 Risk, threat and vulnerability | p. 122 |
7.2.2 Objectives of security | p. 122 |
7.2.3 Design | p. 123 |
7.3 Security issues in distributed systems | p. 124 |
7.4 Cryptography | p. 126 |
7.4.1 Cryptography example: Digital signatures | p. 128 |
7.4.2 Key management | p. 128 |
7.4.3 Matching a public key to a user | p. 129 |
7.5 Case study: Needham-Schroeder | p. 129 |
7.6 Practical issues | p. 131 |
7.6.1 C programming | p. 131 |
7.6.2 Web applications | p. 132 |
7.6.3 Operating system and network issues | p. 133 |
7.6.4 SSL | p. 133 |
7.6.5 Using SSL | p. 134 |
7.7 Summary | p. 136 |
Exercises | p. 136 |
8 Languages and Distributed Processing | p. 139 |
8.1 Overview | p. 139 |
8.2 Suitability of languages | p. 140 |
8.3 Distributed processing in C | p. 141 |
8.3.1 C generally | p. 141 |
8.3.2 Debugging C | p. 142 |
8.4 Distributed processing in Java | p. 143 |
8.4.1 Overview: the RMI model | p. 144 |
8.4.2 Example | p. 145 |
8.4.3 Alternatives | p. 147 |
8.5 Distributed processing in Ada | p. 148 |
8.6 Distributed processing in Eiffel and SCOOP | p. 149 |
8.6.1 SCOOP: A concurrency model for Eiffel | p. 151 |
8.6.2 Related work and prototypes | p. 152 |
8.7 Comparison of languages | p. 153 |
8.7.1 Language paradigm | p. 155 |
8.7.2 Typing discipline | p. 156 |
8.7.3 Networking support | p. 156 |
8.7.4 Concurrency support | p. 157 |
8.7.5 Interprocess communication support | p. 158 |
8.8 Summary | p. 158 |
Exercises | p. 159 |
9 Building Distributed Systems | p. 161 |
9.1 Overview | p. 161 |
9.2 Method | p. 162 |
9.3 Case study: Email | p. 163 |
9.3.1 Typical use and requirements | p. 163 |
9.3.2 Platform and language requirements | p. 164 |
9.3.3 Architecture | p. 165 |
9.3.4 Protocols and formats | p. 165 |
9.3.5 Example: Sending email using PHP | p. 168 |
9.4 Case study: Secure shell | p. 170 |
9.4.1 Typical use and requirements | p. 171 |
9.4.2 Platform requirements | p. 172 |
9.4.3 Architecture | p. 172 |
9.4.4 Protocols | p. 173 |
9.5 Case study: Version control and synchronisation | p. 174 |
9.5.1 Typical use and requirements | p. 175 |
9.5.2 Platform requirements | p. 176 |
9.5.3 Architecture | p. 177 |
9.5.4 Protocols | p. 178 |
9.6 Case study: Web applications | p. 178 |
9.7 Summary | p. 180 |
Exercises | p. 180 |
10 Case Study: A Networked Game | p. 183 |
10.1 Motivation and organisation | p. 183 |
10.2 Outline structure and basic requirements | p. 184 |
10.3 Analysis and design | p. 185 |
10.3.1 Outline use cases | p. 186 |
10.3.2 Detailed design issues | p. 189 |
10.3.3 Security | p. 190 |
10.4 Protocol | p. 191 |
10.4.1 Protocol messages | p. 191 |
10.4.2 Client login | p. 192 |
10.4.3 Map server start-up and shutdown | p. 192 |
10.4.4 UDP messages | p. 194 |
10.4.5 Remarks on protocol | p. 196 |
10.4.6 Data view | p. 197 |
10.5 Implementation | p. 198 |
10.5.1 Admin server | p. 199 |
10.5.2 Map server | p. 200 |
10.5.3 Player client | p. 200 |
10.5.4 Running the example | p. 201 |
10.6 Testing | p. 202 |
10.7 Summary | p. 202 |
Exercises | p. 203 |
11 The End | p. 205 |
11.1 Summary | p. 205 |
11.2 Suggestions | p. 207 |
11.2.1 Future directions | p. 209 |
11.2.2 Interesting projects | p. 210 |
A Exercises: Hints and Comments | p. 213 |
B About the Example Code | p. 245 |
Bibliography | p. 247 |
Glossary | p. 253 |
Index | p. 267 |