1
0
Fork 0
cl-sites/w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/index.html
2025-01-28 10:11:14 +01:00

599 lines
No EOL
43 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Chapter 0   Preface &mdash; Computer Systems Fundamentals</title>
<link rel="stylesheet" href="_static/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous" />
<link rel="stylesheet" href="_static/css/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/normalize.css" type="text/css" />
<link rel="stylesheet" href="../../../JSAV/css/JSAV.css" type="text/css" />
<link rel="stylesheet" href="../../../lib/odsaMOD-min.css" type="text/css" />
<link rel="stylesheet" href="_static/css/jquery-1.11.4-smoothness-ui.css" type="text/css" />
<link rel="stylesheet" href="../../../lib/odsaStyle-min.css" type="text/css" />
<link rel="stylesheet" href="_static/css/csf.css" type="text/css" />
<style>
.underline { text-decoration: underline; }
</style>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.4.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'], ['\\(','\\)']],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"HTML-CSS": {
scale: "80"
}
});
</script>
<link rel="shortcut icon" href="_static/favicon.ico"/>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="index" title="Computer Systems Fundamentals" href="index.html#" />
<link rel="next" title="1. About OpenCSF" href="About.html" />
<style>
ul li {
background: none;
list-style-type: none;
}
</style>
</head><body class="no-top">
<div class="jumbotron jumbotron-custom jmu-dark-purple-bg">
<div class="container">
<div class="row">
<h1 class="display-4 jmu-gold-no-hover">
<img src="_static/CSF-Logo.png" class="p-3 mr-2 align-center bg-white rounded-lg d-inline logo-wrap" height="120em" alt="OpenCSF Logo" /> Computer Systems Fundamentals</h1>
</div>
</div>
</div>
<script type="text/javascript" src="_static/js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/jquery-1.11.4-ui.min.js"></script>
<script type="text/javascript" src="_static/js/forge-0.7.0.min.js"></script>
<script type="text/javascript" src="../../../JSAV/lib/jquery.transit.js"></script>
<script type="text/javascript" src="../../../JSAV/lib/raphael.js"></script>
<script type="text/javascript" src="../../../JSAV/build/JSAV-min.js"></script>
<script type="text/javascript" src="_static/js/config.js"></script>
<script type="text/javascript" src="../../../lib/odsaUtils-min.js"></script>
<script type="text/javascript" src="../../../lib/odsaMOD-min.js"></script>
<script type="text/javascript" src="_static/js/d3-4.13.0.min.js"></script>
<script type="text/javascript" src="_static/js/d3-selection-multi.v1.min.js"></script>
<script type="text/javascript" src="../../../lib/dataStructures.js"></script>
<div class="container"><div class="sidebar" style="border-style:none;background-color:transparent">
</div>
<script>ODSA.SETTINGS.DISP_MOD_COMP = false;ODSA.SETTINGS.MODULE_NAME = "index";ODSA.SETTINGS.MODULE_LONG_NAME = "Contents";ODSA.SETTINGS.MODULE_CHAPTER = ""; ODSA.SETTINGS.BUILD_DATE = "2021-06-01 15:50:16"; ODSA.SETTINGS.BUILD_CMAP = false;</script><div class="section" id="preface">
<h1>Chapter 0&nbsp;&nbsp;&nbsp;Preface<a class="headerlink" href="index.html#preface" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="About.html">0.1. About OpenCSF</a></li>
<li class="toctree-l1"><a class="reference internal" href="Intro.html">0.2. How to Use this System</a></li>
</ul>
</div>
</div>
<div class="section" id="introduction-to-computer-systems">
<h1>Chapter 1&nbsp;&nbsp;&nbsp;Introduction to Computer Systems<a class="headerlink" href="index.html#introduction-to-computer-systems" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="IntroConcSysOverview.html">1.1. Introduction to Concurrent Systems</a></li>
<li class="toctree-l1"><a class="reference internal" href="SysAndModels.html">1.2. Systems and Models</a><ul>
<li class="toctree-l2"><a class="reference internal" href="SysAndModels.html#models-as-representations">1.2.1. Models as Representations</a></li>
<li class="toctree-l2"><a class="reference internal" href="SysAndModels.html#from-models-to-implementations">1.2.2. From Models to Implementations</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Themes.html">1.3. Themes and Guiding Principles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Themes.html#systems-as-foundations-of-computing">1.3.1. Systems as Foundations of Computing</a></li>
<li class="toctree-l2"><a class="reference internal" href="Themes.html#systems-and-complexity">1.3.2. Systems and Complexity</a></li>
<li class="toctree-l2"><a class="reference internal" href="Themes.html#the-semiotics-of-computer-systems">1.3.3. The Semiotics of Computer Systems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Architectures.html">1.4. System Architectures</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#client-server-architectures">1.4.1. Client/Server Architectures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#peer-to-peer-p2p-architectures">1.4.2. Peer-to-peer (P2P) Architectures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#layered-architectures">1.4.3. Layered Architectures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#pipe-and-filter-architectures">1.4.4. Pipe-and-filter Architectures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#event-driven-architectures">1.4.5. Event-driven Architectures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Architectures.html#hybrid-architectures">1.4.6. Hybrid Architectures</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="StateModels.html">1.5. State Models in UML</a><ul>
<li class="toctree-l2"><a class="reference internal" href="StateModels.html#state-space-explosion">1.5.1. State Space Explosion</a></li>
<li class="toctree-l2"><a class="reference internal" href="StateModels.html#implementing-finite-state-machines">1.5.2. Implementing Finite State Machines</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="SequenceModels.html">1.6. Sequence Models in UML</a><ul>
<li class="toctree-l2"><a class="reference internal" href="SequenceModels.html#summary-questions">1.6.1. Summary Questions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="StateModelImplementation.html">1.7. Extended Example: Text Parser State Machine</a></li>
</ul>
</div>
</div>
<div class="section" id="processes-and-os-basics">
<h1>Chapter 2&nbsp;&nbsp;&nbsp;Processes and OS Basics<a class="headerlink" href="index.html#processes-and-os-basics" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="ProcessesOverview.html">2.1. Processes and OS Basics</a></li>
<li class="toctree-l1"><a class="reference internal" href="Multiprogramming.html">2.2. Processes and Multiprogramming</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Multiprogramming.html#uniprogramming-and-utilization">2.2.1. Uniprogramming and Utilization</a></li>
<li class="toctree-l2"><a class="reference internal" href="Multiprogramming.html#multiprogramming-and-concurrency">2.2.2. Multiprogramming and Concurrency</a></li>
<li class="toctree-l2"><a class="reference internal" href="Multiprogramming.html#context-switches-and-overhead-costs">2.2.3. Context Switches and Overhead Costs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="KernelMechanics.html">2.3. Kernel Mechanics</a><ul>
<li class="toctree-l2"><a class="reference internal" href="KernelMechanics.html#kernel-memory-structure-and-protections">2.3.1. Kernel Memory Structure and Protections</a></li>
<li class="toctree-l2"><a class="reference internal" href="KernelMechanics.html#the-boot-procedure">2.3.2. The Boot Procedure</a></li>
<li class="toctree-l2"><a class="reference internal" href="KernelMechanics.html#kernel-invocation">2.3.3. Kernel Invocation</a></li>
<li class="toctree-l2"><a class="reference internal" href="KernelMechanics.html#mode-switches-and-privileged-instructions">2.3.4. Mode Switches and Privileged Instructions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Syscall.html">2.4. System Call Interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Syscall.html#system-calls-vs-function-calls">2.4.1. System Calls vs. Function Calls</a></li>
<li class="toctree-l2"><a class="reference internal" href="Syscall.html#linux-system-calls">2.4.2. Linux System Calls</a></li>
<li class="toctree-l2"><a class="reference internal" href="Syscall.html#calling-system-calls-in-assembly">2.4.3. Calling System Calls in Assembly</a></li>
<li class="toctree-l2"><a class="reference internal" href="Syscall.html#calling-system-calls-with-syscall">2.4.4. Calling System Calls with&nbsp;syscall()</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ProcessCycle.html">2.5. Process Life Cycle</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ProcessCycle.html#process-creation">2.5.1. Process Creation</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProcessCycle.html#switching-program-code">2.5.2. Switching Program Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProcessCycle.html#posix-spawn-interface">2.5.3. POSIX Spawn Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProcessCycle.html#process-destruction">2.5.4. Process Destruction</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="UnixFile.html">2.6. The UNIX File Abstraction</a><ul>
<li class="toctree-l2"><a class="reference internal" href="UnixFile.html#basic-file-access">2.6.1. Basic File Access</a></li>
<li class="toctree-l2"><a class="reference internal" href="UnixFile.html#working-with-files">2.6.2. Working with Files</a></li>
<li class="toctree-l2"><a class="reference internal" href="UnixFile.html#accessing-file-metadata">2.6.3. Accessing File Metadata</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="EventsSignals.html">2.7. Events and Signals</a><ul>
<li class="toctree-l2"><a class="reference internal" href="EventsSignals.html#sending-process-signals">2.7.1. Sending Process Signals</a></li>
<li class="toctree-l2"><a class="reference internal" href="EventsSignals.html#custom-signal-handlers">2.7.2. Custom Signal Handlers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended2Processes.html">2.8. Extended Example: Listing Files with Processes</a></li>
</ul>
</div>
</div>
<div class="section" id="concurrency-with-ipc">
<h1>Chapter 3&nbsp;&nbsp;&nbsp;Concurrency with IPC<a class="headerlink" href="index.html#concurrency-with-ipc" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="IPCOverview.html">3.1. Concurrency with IPC</a></li>
<li class="toctree-l1"><a class="reference internal" href="IPCModels.html">3.2. IPC Models</a><ul>
<li class="toctree-l2"><a class="reference internal" href="IPCModels.html#advantages-and-disadvantages">3.2.1. Advantages and Disadvantages</a></li>
<li class="toctree-l2"><a class="reference internal" href="IPCModels.html#an-ipc-taxonomy">3.2.2. An IPC Taxonomy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Pipes.html">3.3. Pipes and FIFOs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Pipes.html#basic-pipes">3.3.1. Basic Pipes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Pipes.html#pipes-and-shell-commands">3.3.2. Pipes and Shell Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="Pipes.html#fifos">3.3.3. FIFOs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MMap.html">3.4. Shared Memory With Memory-mapped Files</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MMap.html#memory-mapped-files">3.4.1. Memory-mapped Files</a></li>
<li class="toctree-l2"><a class="reference internal" href="MMap.html#region-protections-and-privacy">3.4.2. Region Protections and Privacy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="POSIXvSysV.html">3.5. POSIX vs. System V IPC</a><ul>
<li class="toctree-l2"><a class="reference internal" href="POSIXvSysV.html#posix-ipc-fundamentals">3.5.1. POSIX IPC Fundamentals</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MQueues.html">3.6. Message Passing With Message Queues</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MQueues.html#posix-message-queues">3.6.1. POSIX Message Queues</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ShMem.html">3.7. Shared Memory</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ShMem.html#posix-shared-memory">3.7.1. POSIX Shared Memory</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="IPCSems.html">3.8. Semaphores</a><ul>
<li class="toctree-l2"><a class="reference internal" href="IPCSems.html#posix-vs-system-v-semaphores">3.8.1. POSIX vs. System V Semaphores</a></li>
<li class="toctree-l2"><a class="reference internal" href="IPCSems.html#posix-named-semaphores">3.8.2. POSIX Named Semaphores</a></li>
<li class="toctree-l2"><a class="reference internal" href="IPCSems.html#posix-unnamed-semaphores">3.8.3. POSIX Unnamed Semaphores</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended3Bash.html">3.9. Extended Example: Bash-lite: A Simple Command-line Shell</a></li>
</ul>
</div>
</div>
<div class="section" id="networked-concurrency">
<h1>Chapter 4&nbsp;&nbsp;&nbsp;Networked Concurrency<a class="headerlink" href="index.html#networked-concurrency" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="SocketsOverview.html">4.1. Networked Concurrency</a></li>
<li class="toctree-l1"><a class="reference internal" href="FiveLayer.html">4.2. The TCP/IP Internet Model</a><ul>
<li class="toctree-l2"><a class="reference internal" href="FiveLayer.html#internet-model">4.2.1. Internet Model</a></li>
<li class="toctree-l2"><a class="reference internal" href="FiveLayer.html#packet-encapsulation-and-nomenclature">4.2.2. Packet Encapsulation and Nomenclature</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="NetApps.html">4.3. Network Applications and Protocols</a><ul>
<li class="toctree-l2"><a class="reference internal" href="NetApps.html#naming-and-addressing">4.3.1. Naming and Addressing</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetApps.html#protocol-specifications-and-rfcs">4.3.2. Protocol Specifications and RFCs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Sockets.html">4.4. The Socket Interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Sockets.html#networking-data-structures">4.4.1. Networking Data Structures</a></li>
<li class="toctree-l2"><a class="reference internal" href="Sockets.html#client-socket-interface">4.4.2. Client Socket Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="Sockets.html#server-socket-interface">4.4.3. Server Socket Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="Sockets.html#socket-communication">4.4.4. Socket Communication</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="TCPSockets.html">4.5. TCP Socket Programming: HTTP</a><ul>
<li class="toctree-l2"><a class="reference internal" href="TCPSockets.html#hypertext-transfer-protocol-http">4.5.1. Hypertext Transfer Protocol (HTTP)</a></li>
<li class="toctree-l2"><a class="reference internal" href="TCPSockets.html#bnf-protocol-specification">4.5.2. BNF Protocol Specification</a></li>
<li class="toctree-l2"><a class="reference internal" href="TCPSockets.html#http-1-1-persistent-connections">4.5.3. HTTP/1.1 Persistent Connections</a></li>
<li class="toctree-l2"><a class="reference internal" href="TCPSockets.html#processing-http-headers">4.5.4. Processing HTTP Headers</a></li>
<li class="toctree-l2"><a class="reference internal" href="TCPSockets.html#persistent-state-with-cookies">4.5.5. Persistent State with Cookies</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="UDPSockets.html">4.6. UDP Socket Programming: DNS</a><ul>
<li class="toctree-l2"><a class="reference internal" href="UDPSockets.html#resolving-dns-queries">4.6.1. Resolving DNS Queries</a></li>
<li class="toctree-l2"><a class="reference internal" href="UDPSockets.html#dns-resource-record-structure">4.6.2. DNS Resource Record Structure</a></li>
<li class="toctree-l2"><a class="reference internal" href="UDPSockets.html#dns-protocol-messages">4.6.3. DNS Protocol Messages</a></li>
<li class="toctree-l2"><a class="reference internal" href="UDPSockets.html#constructing-dns-queries-with-sockets">4.6.4. Constructing DNS Queries with Sockets</a></li>
<li class="toctree-l2"><a class="reference internal" href="UDPSockets.html#processing-dns-query-responses">4.6.5. Processing DNS Query Responses</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="AppBroadcast.html">4.7. Application-Layer Broadcasting: DHCP</a><ul>
<li class="toctree-l2"><a class="reference internal" href="AppBroadcast.html#dhcp-overview">4.7.1. DHCP Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="AppBroadcast.html#dhcp-protocol-messages">4.7.2. DHCP Protocol Messages</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended4CGI.html">4.8. Extended Example: CGI Web Server</a></li>
</ul>
</div>
</div>
<div class="section" id="the-internet-and-connectivity">
<h1>Chapter 5&nbsp;&nbsp;&nbsp;The Internet and Connectivity<a class="headerlink" href="index.html#the-internet-and-connectivity" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="InternetOverview.html">5.1. The Internet and Connectivity</a></li>
<li class="toctree-l1"><a class="reference internal" href="AppLayer.html">5.2. Application Layer: Overlay Networks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="AppLayer.html#characteristics-of-peer-to-peer-networks">5.2.1. Characteristics of Peer-to-Peer Networks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="TransLayer.html">5.3. Transport Layer</a><ul>
<li class="toctree-l2"><a class="reference internal" href="TransLayer.html#unreliable-transport-udp">5.3.1. Unreliable Transport: UDP</a></li>
<li class="toctree-l2"><a class="reference internal" href="TransLayer.html#reliable-transport-tcp">5.3.2. Reliable Transport: TCP</a></li>
<li class="toctree-l2"><a class="reference internal" href="TransLayer.html#tcp-handshake-and-connections">5.3.3. TCP Handshake and Connections</a></li>
<li class="toctree-l2"><a class="reference internal" href="TransLayer.html#tcp-timeout-and-packet-loss">5.3.4. TCP Timeout and Packet Loss</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="NetSec.html">5.4. Network Security Fundamentals</a><ul>
<li class="toctree-l2"><a class="reference internal" href="NetSec.html#symmetric-key-encryption">5.4.1. Symmetric Key Encryption</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetSec.html#public-key-encryption">5.4.2. Public Key Encryption</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetSec.html#cryptographic-hash-functions">5.4.3. Cryptographic Hash Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetSec.html#transport-layer-security-tls">5.4.4. Transport-Layer Security (TLS)</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetSec.html#tls-in-practice-https">5.4.5. TLS in Practice: HTTPS</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="NetLayer.html">5.5. Internet Layer: IP</a><ul>
<li class="toctree-l2"><a class="reference internal" href="NetLayer.html#ip-addresses-and-subnets">5.5.1. IP Addresses and Subnets</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetLayer.html#ip-packet-formats">5.5.2. IP Packet Formats</a></li>
<li class="toctree-l2"><a class="reference internal" href="NetLayer.html#network-routing-protocols">5.5.3. Network Routing Protocols</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="LinkLayer.html">5.6. Link Layer</a><ul>
<li class="toctree-l2"><a class="reference internal" href="LinkLayer.html#lan-packet-transmission-ethernet">5.6.1. LAN Packet Transmission: Ethernet</a></li>
<li class="toctree-l2"><a class="reference internal" href="LinkLayer.html#lan-packet-transmission-arp">5.6.2. LAN Packet Transmission: ARP</a></li>
<li class="toctree-l2"><a class="reference internal" href="LinkLayer.html#what-lies-beneath-carrier-signals">5.6.3. What Lies Beneath: Carrier Signals</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Wireless.html">5.7. Wireless Connectivity: Wi-Fi, Bluetooth, and Zigbee</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Wireless.html#wireless-protocol-stacks-and-uses">5.7.1. Wireless Protocol Stacks and Uses</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended5DNS.html">5.8. Extended Example: DNS Client</a></li>
</ul>
</div>
</div>
<div class="section" id="concurrency-with-multithreading">
<h1>Chapter 6&nbsp;&nbsp;&nbsp;Concurrency with Multithreading<a class="headerlink" href="index.html#concurrency-with-multithreading" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="ThreadsOverview.html">6.1. Concurrency with Multithreading</a></li>
<li class="toctree-l1"><a class="reference internal" href="ProcVThreads.html">6.2. Processes vs. Threads</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ProcVThreads.html#multithreading">6.2.1. Multithreading</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProcVThreads.html#advantages-and-disadvantages-of-threads">6.2.2. Advantages and Disadvantages of Threads</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProcVThreads.html#thread-models">6.2.3. Thread Models</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="RaceConditions.html">6.3. Race Conditions and Critical Sections</a><ul>
<li class="toctree-l2"><a class="reference internal" href="RaceConditions.html#race-conditions">6.3.1. Race Conditions</a></li>
<li class="toctree-l2"><a class="reference internal" href="RaceConditions.html#critical-sections">6.3.2. Critical Sections</a></li>
<li class="toctree-l2"><a class="reference internal" href="RaceConditions.html#thread-safety-and-reentrancy">6.3.3. Thread Safety and Reentrancy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="POSIXThreads.html">6.4. POSIX Thread Library</a><ul>
<li class="toctree-l2"><a class="reference internal" href="POSIXThreads.html#creating-and-joining-threads">6.4.1. Creating and Joining Threads</a></li>
<li class="toctree-l2"><a class="reference internal" href="POSIXThreads.html#attached-and-detached-threads">6.4.2. Attached and Detached Threads</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ThreadArgs.html">6.5. Thread Arguments and Return Values</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ThreadArgs.html#passing-a-single-argument-to-threads">6.5.1. Passing a Single Argument to Threads</a></li>
<li class="toctree-l2"><a class="reference internal" href="ThreadArgs.html#passing-multiple-arguments-to-threads">6.5.2. Passing Multiple Arguments to Threads</a></li>
<li class="toctree-l2"><a class="reference internal" href="ThreadArgs.html#returning-values-from-threads">6.5.3. Returning Values from Threads</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ImplicitThreads.html">6.6. Implicit Threading and Language-based Threads</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ImplicitThreads.html#implicit-threading-with-openmp">6.6.1. Implicit Threading with OpenMP</a></li>
<li class="toctree-l2"><a class="reference internal" href="ImplicitThreads.html#threads-as-objects">6.6.2. Threads as Objects</a><ul>
<li class="toctree-l3"><a class="reference internal" href="ImplicitThreads.html#java-threads">6.6.2.1. Java Threads</a></li>
<li class="toctree-l3"><a class="reference internal" href="ImplicitThreads.html#python-threads">6.6.2.2. Python Threads</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="ImplicitThreads.html#concurrency-as-language-design">6.6.3. Concurrency as Language Design</a><ul>
<li class="toctree-l3"><a class="reference internal" href="ImplicitThreads.html#goroutines">6.6.3.1. Goroutines</a></li>
<li class="toctree-l3"><a class="reference internal" href="ImplicitThreads.html#rust-concurrency">6.6.3.2. Rust Concurrency</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended6Input.html">6.7. Extended Example: Keyboard Input Listener</a></li>
<li class="toctree-l1"><a class="reference internal" href="Extended6Primes.html">6.8. Extended Example: Concurrent Prime Number Search</a></li>
</ul>
</div>
</div>
<div class="section" id="synchronization-primitives">
<h1>Chapter 7&nbsp;&nbsp;&nbsp;Synchronization Primitives<a class="headerlink" href="index.html#synchronization-primitives" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="SynchOverview.html">7.1. Synchronization Primitives</a></li>
<li class="toctree-l1"><a class="reference internal" href="CritSect.html">7.2. Critical Sections and Petersons Solution</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CritSect.html#peterson-s-solution">7.2.1. Petersons Solution</a></li>
<li class="toctree-l2"><a class="reference internal" href="CritSect.html#synchronization-properties">7.2.2. Synchronization Properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="CritSect.html#peterson-s-solution-and-modern-hardware">7.2.3. Petersons Solution and Modern Hardware</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Locks.html">7.3. Locks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Locks.html#posix-mutexes">7.3.1. POSIX Mutexes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Locks.html#spinlocks">7.3.2. Spinlocks</a></li>
<li class="toctree-l2"><a class="reference internal" href="Locks.html#defining-critical-sections">7.3.3. Defining Critical Sections</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Semaphores.html">7.4. Semaphores</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Semaphores.html#semaphores-as-signaling">7.4.1. Semaphores as Signaling</a></li>
<li class="toctree-l2"><a class="reference internal" href="Semaphores.html#mutual-exclusion-with-semaphores">7.4.2. Mutual Exclusion with Semaphores</a></li>
<li class="toctree-l2"><a class="reference internal" href="Semaphores.html#multiplexing-with-semaphores">7.4.3. Multiplexing with Semaphores</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Barriers.html">7.5. Barriers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Barriers.html#concurrent-calculations-with-barriers">7.5.1. Concurrent Calculations with Barriers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Condvars.html">7.6. Condition Variables</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Condvars.html#condition-variables-vs-semaphores">7.6.1. Condition Variables vs. Semaphores</a></li>
<li class="toctree-l2"><a class="reference internal" href="Condvars.html#how-to-use-a-condition-variable">7.6.2. How to Use a Condition Variable</a></li>
<li class="toctree-l2"><a class="reference internal" href="Condvars.html#a-condition-variable-example">7.6.3. A Condition Variable Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="Condvars.html#monitors-and-synchronized-methods">7.6.4. Monitors and Synchronized Methods</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Deadlock.html">7.7. Deadlock</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Deadlock.html#necessary-conditions">7.7.1. Necessary Conditions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Deadlock.html#livelock-and-false-solutions">7.7.2. Livelock and False Solutions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Deadlock.html#avoiding-deadlock">7.7.3. Avoiding Deadlock</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended7Events.html">7.8. Extended Example: Event Log File</a></li>
</ul>
</div>
</div>
<div class="section" id="synchronization-patterns-and-problems">
<h1>Chapter 8&nbsp;&nbsp;&nbsp;Synchronization Patterns and Problems<a class="headerlink" href="index.html#synchronization-patterns-and-problems" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="SynchProblemsOverview.html">8.1. Synchronization Patterns and Problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="SynchDesign.html">8.2. Basic Synchronization Design Patterns</a><ul>
<li class="toctree-l2"><a class="reference internal" href="SynchDesign.html#signaling">8.2.1. Signaling</a></li>
<li class="toctree-l2"><a class="reference internal" href="SynchDesign.html#turnstiles">8.2.2. Turnstiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="SynchDesign.html#rendezvous">8.2.3. Rendezvous</a></li>
<li class="toctree-l2"><a class="reference internal" href="SynchDesign.html#multiplexing">8.2.4. Multiplexing</a></li>
<li class="toctree-l2"><a class="reference internal" href="SynchDesign.html#lightswitches">8.2.5. Lightswitches</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ProdCons.html">8.3. Producer-Consumer Problem</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ProdCons.html#producer-consumer-with-unbounded-queue">8.3.1. Producer-Consumer with Unbounded Queue</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProdCons.html#single-producer-single-consumer-solution-using-a-bounded-queue">8.3.2. Single Producer-Single Consumer Solution Using a Bounded Queue</a></li>
<li class="toctree-l2"><a class="reference internal" href="ProdCons.html#multiple-producers-solution-using-a-bounded-queue">8.3.3. Multiple Producers Solution Using a Bounded Queue</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ReadWrite.html">8.4. Readers-Writers Problem</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ReadWrite.html#a-solution-using-lightswitches">8.4.1. A Solution Using Lightswitches</a></li>
<li class="toctree-l2"><a class="reference internal" href="ReadWrite.html#fairness-to-writers">8.4.2. Fairness to Writers</a></li>
<li class="toctree-l2"><a class="reference internal" href="ReadWrite.html#search-insert-delete-problem">8.4.3. Search-Insert-Delete Problem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="DiningPhil.html">8.5. Dining Philosophers Problem and Deadlock</a><ul>
<li class="toctree-l2"><a class="reference internal" href="DiningPhil.html#solution-of-limiting-accesses">8.5.1. Solution of Limiting Accesses</a></li>
<li class="toctree-l2"><a class="reference internal" href="DiningPhil.html#solution-by-breaking-hold-and-wait">8.5.2. Solution by Breaking Hold-and-wait</a></li>
<li class="toctree-l2"><a class="reference internal" href="DiningPhil.html#solution-by-imposing-order">8.5.3. Solution by Imposing Order</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="CigSmokers.html">8.6. Cigarette Smokers Problem and the Limits of Semaphores and Locks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="CigSmokers.html#implications-of-the-cigarette-smokers-problem">8.6.1. Implications of the Cigarette Smokers Problem</a></li>
<li class="toctree-l2"><a class="reference internal" href="CigSmokers.html#on-cigarette-smokers-and-dining-philosophers">8.6.2. On Cigarette Smokers and Dining Philosophers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended8ModExp.html">8.7. Extended Example: Parallel Modular Exponentiation</a></li>
</ul>
</div>
</div>
<div class="section" id="parallel-and-distributed-systems">
<h1>Chapter 9&nbsp;&nbsp;&nbsp;Parallel and Distributed Systems<a class="headerlink" href="index.html#parallel-and-distributed-systems" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="ParallelDistributedOverview.html">9.1. Parallel and Distributed Systems</a></li>
<li class="toctree-l1"><a class="reference internal" href="ParVConc.html">9.2. Parallelism vs. Concurrency</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ParVConc.html#multiprocessing-systems">9.2.1. Multiprocessing Systems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ParallelDesign.html">9.3. Parallel Design Patterns</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ParallelDesign.html#algorithmic-strategy-patterns">9.3.1. Algorithmic Strategy Patterns</a></li>
<li class="toctree-l2"><a class="reference internal" href="ParallelDesign.html#implementation-strategy-patterns">9.3.2. Implementation Strategy Patterns</a></li>
<li class="toctree-l2"><a class="reference internal" href="ParallelDesign.html#parallel-execution-patterns">9.3.3. Parallel Execution Patterns</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Scaling.html">9.4. Limits of Parallelism and Scaling</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Scaling.html#amdahl-s-law-and-strong-scaling">9.4.1. Amdahls Law and Strong Scaling</a></li>
<li class="toctree-l2"><a class="reference internal" href="Scaling.html#gustafson-s-law-and-weak-scaling">9.4.2. Gustafsons Law and Weak Scaling</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="DistTiming.html">9.5. Timing in Distributed Environments</a><ul>
<li class="toctree-l2"><a class="reference internal" href="DistTiming.html#clock-synchronization">9.5.1. Clock Synchronization</a></li>
<li class="toctree-l2"><a class="reference internal" href="DistTiming.html#logical-clocks-and-lamport-timestamps">9.5.2. Logical Clocks and Lamport Timestamps</a></li>
<li class="toctree-l2"><a class="reference internal" href="DistTiming.html#vector-clocks">9.5.3. Vector Clocks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="DistDataStorage.html">9.6. Reliable Data Storage and Location</a><ul>
<li class="toctree-l2"><a class="reference internal" href="DistDataStorage.html#google-file-system">9.6.1. Google File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="DistDataStorage.html#distributed-hash-tables">9.6.2. Distributed Hash Tables</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="DistConsensus.html">9.7. Consensus in Distributed Systems</a><ul>
<li class="toctree-l2"><a class="reference internal" href="DistConsensus.html#byzantine-generals-problem">9.7.1. Byzantine Generals Problem</a></li>
<li class="toctree-l2"><a class="reference internal" href="DistConsensus.html#limits-on-consensus">9.7.2. Limits on Consensus</a></li>
<li class="toctree-l2"><a class="reference internal" href="DistConsensus.html#practical-byzantine-fault-tolerance">9.7.3. Practical Byzantine Fault Tolerance</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Extended9Blockchain.html">9.8. Extended Example: Blockchain Proof-of-Work</a></li>
</ul>
</div>
</div>
<div class="section" id="appendix-a">
<h1>Appendix A<a class="headerlink" href="index.html#appendix-a" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="CLangOverview.html">10.1. C Language Reintroduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Debugging.html">10.2. Documentation and Debugging</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Debugging.html#man-pages">10.2.1. Man Pages</a></li>
<li class="toctree-l2"><a class="reference internal" href="Debugging.html#debugging-with-gdb">10.2.2. Debugging with GDB</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Debugging.html#breakpoints-and-watchpoints">10.2.2.1. Breakpoints and Watchpoints</a></li>
<li class="toctree-l3"><a class="reference internal" href="Debugging.html#backtrace">10.2.2.2. Backtrace</a></li>
<li class="toctree-l3"><a class="reference internal" href="Debugging.html#tracing-multiple-processes">10.2.2.3. Tracing multiple processes</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="BasicTypes.html">10.3. Basic Types and Pointers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="BasicTypes.html#c99-fixed-width-types">10.3.1. C99 Fixed-width Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="BasicTypes.html#pointer-basics">10.3.2. Pointer Basics</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Arrays.html">10.4. Arrays, Structs, Enums, and Type Definitions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Arrays.html#two-dimensional-arrays">10.4.1. Two-dimensional Arrays</a></li>
<li class="toctree-l2"><a class="reference internal" href="Arrays.html#structs-and-packing">10.4.2. Structs and Packing</a></li>
<li class="toctree-l2"><a class="reference internal" href="Arrays.html#enums-and-type-definitions">10.4.3. Enums and Type Definitions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Functions.html">10.5. Functions and Scope</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Functions.html#function-parameters-and-return-values">10.5.1. Function Parameters and Return Values</a></li>
<li class="toctree-l2"><a class="reference internal" href="Functions.html#call-by-reference-parameters">10.5.2. Call-by-Reference Parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="Functions.html#arrays-as-parameters">10.5.3. Arrays as Parameters</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Pointers.html">10.6. Pointers and Dynamic Allocation</a></li>
<li class="toctree-l1"><a class="reference internal" href="Strings.html">10.7. Strings</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Strings.html#investigating-string-contents">10.7.1. Investigating String Contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="Strings.html#common-string-manipulations">10.7.2. Common String Manipulations</a></li>
<li class="toctree-l2"><a class="reference internal" href="Strings.html#converting-between-strings-and-integers">10.7.3. Converting Between Strings and Integers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="FunctionPointers.html">10.8. Function Pointers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="FunctionPointers.html#passing-function-pointers-as-arguments">10.8.1. Passing Function Pointers as Arguments</a></li>
<li class="toctree-l2"><a class="reference internal" href="FunctionPointers.html#function-pointer-lookup-tables">10.8.2. Function Pointer Lookup Tables</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Files.html">10.9. Files</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Files.html#file-permissions-and-ownership">10.9.1. File Permissions and Ownership</a></li>
<li class="toctree-l2"><a class="reference internal" href="Files.html#persistent-storage">10.9.2. Persistent Storage</a></li>
<li class="toctree-l2"><a class="reference internal" href="Files.html#directories-and-links">10.9.3. Directories and Links</a></li>
<li class="toctree-l2"><a class="reference internal" href="Files.html#advisory-locks">10.9.4. Advisory Locks</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="appendix-b">
<h1>Appendix B<a class="headerlink" href="index.html#appendix-b" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="Glossary.html">11.1. Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="Bibliography.html">11.2. Bibliography</a></li>
</ul>
</div>
<div class="toctree-wrapper compound">
</div>
<ul class="simple">
<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
</ul>
</div>
</div>
<div class="container">
<div class="mt-4 container center">
<a class="uplink" href="index.html#">Contents</a>
&#160;&#160;::&#160;&#160;
<a id="nextmod1" href="About.html">0.1. About OpenCSF</a>&#160;&#160;»
</div>
</div>
<br />
<div class="row jmu-dark-purple-bg">
<div class="col-md-12">
<center>
<a id="contact_us" class="btn button-link-no-blue jmu-gold" rel="nofollow" href="mailto:webmaster@opencsf.org" role="button">Contact Us</a>
<a id="license" class="btn button-link-no-blue jmu-gold" rel="nofollow" href="https://w3.cs.jmu.edu/kirkpams/OpenCSF/lib/license.html" target="_blank">License</a>
</center>
</div>
</div>
<script src="_static/js/popper.js-1.14.7-min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="_static/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>