系統編程:分佈式應用的設計與開發 系统编程:分布式应用的设计与开发

理乍得·約翰·安東尼 (Richard John Anthony)

  • 出版商: 機械工業
  • 出版日期: 2017-11-01
  • 定價: $774
  • 售價: 8.5$658
  • 語言: 簡體中文
  • 頁數: 427
  • 裝訂: 平裝
  • ISBN: 7121306794
  • ISBN-13: 9787111582564
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

商品描述

本書用系統思維講解分佈式應用的設計與開發,以“進程、通信、資源、體系結構”四個視角為核心,跨越不同學科的界限,強調系統透明性。本書在實踐教學方面尤為獨到:既有貫穿各章的大型游戲案例,又有探究不同系統特性的課內模擬實驗;不僅提供步驟詳盡的方法指導,而且免費提供專為本書開發的Workbench模擬工具和源代碼。本書自成體系的風格和配置靈活的實驗工具可滿足不同層次的教學需求,適合作為面向實踐的分佈式系統課程的教材,也適合從事分佈式應用開發的技術人員自學。

作者簡介

Richard John Anthony具有20多年教學經驗的大學教師,長期講授操作系統、網絡、分佈式系統、編程和嵌入式系統課程,同時還作為技術顧問和系統開發人員從事商業項目的研發和管理工作。豐富的工業和教育經歷,讓他能夠對計算機系統和技術的各個方面有很好的見解,既能總攬全局,也能了解底層的技術重點。

目錄大綱

前言

第1章緒論1 
1.1基本原理1 
1.1.1計算機科學的傳統講授方法1 
1.1.2本書採用的系統方法2 
1.2網絡和分佈式系統在現代計算中的重要性—簡明歷史回顧4 
1.3分佈式系統簡介6 
1.3.1分佈式系統的優勢和挑戰6 
1.3.2分佈的本質7 
1.3.3分佈式應用程序的軟件體系結構8 
1.3.4分佈式系統與應用的質量度量指標9 
1.3.5透明性簡介9 
1.4案例研究簡介10 
1.4.1主案例研究(分佈式遊戲)11 
1.4.2附加案例研究11 
1.5教輔材料和練習簡介12 
1.6交互式教學工具Workbench套件14 
1.7示例代碼和相關練習14 

第2章進程視角16 
2.1基本原理和概述16 
2.2進程16 
2.2.1基本概念16 
2.2.2創建進程16 
2.3進程調度21 
2.4實時系統調度46 
2.5在現代操作系統中使用的特定調度算法及其變體56 
2.6進程間通信57 
2.7線程:導論62 
2.7.1一般概念62 
2.7.2線程實現62
2.7.3線程調度方法63 
2.7.4同步(順序的)與異步(並發的)線程操作64 
2.7.5線程帶來的額外複雜性68 
2.7.6多線程IPC舉例70 
2.8操作系統的其他角色77 
2.9程序中使用定時器77 
2.10進程視角的透明性80 
2.11進程視角的案例研究80 
2.11.1調度要求80 
2.11.2定時器的使用81 
2.11.3多線程需求81 
2.11.4IPC、端口和套接字81 
2.12章末練習82 
2.12.1問題82 
2.12.2基於Workbench的練習83 
2.12.3編程練習87 
2.12.4章末問題答案88 
2.12.5本章活動列表88 
2.12.6配套資源列表89 

第3章通信視角90 
3.1基本原理和概述90 
3.2通信視角90 
3.3通信技術91 
3.3.1單向通信91 
3.3.2請求—應答通信96 
3.3.3雙向數據傳輸100 
3.3.4尋址方法100 
3.3.5遠程過程調用103 
3.3.6遠程方法調用105 
3.4通信的分層模型107 
3.4.1OSI模型109 
3.4.2TCP/IP模型110
3.5TCP/IP協議簇111 
3.5.1IP112 
3.5.2TCP113 
3.5.3TCP連接115 
3.5.4UDP116 
3.5.5TCP和UDP的比較118 
3.5.6TCP和UDP的選擇119 
3.6地址119 
3.6.1扁平與分級編址120 
3.6 .2鏈路層地址120 
3.6.3網絡層地址121 
3.6.4傳輸層地址(端口)123 
3.6.5熟知端口號124 
3.7套接字125 
3.7.1套接字API:概述126 
3.7.2套接字API:UDP原語序列126 
3.7.3套接字API:TCP原語序列130 
3.7.4綁定(進程到端口)132 
3.8阻塞和非阻塞套接字行為135 
3.8.1非阻塞套接字行為的處理138 
3.8.2通信死鎖138 
3.9錯誤檢測與校正140 
3.10應用特定協議142 
3.11面向業務邏輯的通信整合143 
3.12幫助組件相互定位的技術144 
3.13通信視角的透明性需求145 
3.14通信視角的案例研究146 
3.15章末練習154 
3.15.1問題154 
3.15.2基於Workbench的練習154
3.15.3編程練習157 
3.15.4章末問題答案157 
3.15.5Workbench練習的答案/結果158 
3.15.6本章活動列表159 
3.15.7配套資源列表159 

第4章資源視角169 
4.1基本原理和概述169 
4.2 CPU資源169 
4.3通信中的存儲器資源170 
4.4內存管理175 
4.5資源管理185 
4.5.1私有存儲空間資源的靜態分配與動態分配185 
4.5.2共享資源189 
4.5.3事務190 
4.5.4鎖190 
4.5. 5死鎖193 
4.5.6資源複製196 
4.6網絡資源197 
4.6.1網絡帶寬197 
4.6.2數據壓縮技術202 
4.6.3消息格式205 
4.6.4序列化206 
4.6.5網絡鏈路序列209 
4.6.6路由器與路由210 
4.6.7通信額外開銷215 
4.6.8恢復機制及其與網絡擁塞的相互作用215 
4.7虛擬資源217 
4.7.1套接字218 
4.7.2端口218 
4.7.3網絡地址218 
4.7.4資源名稱219 
4.8分佈式應用程序設計對網絡效率的影響220
4.9資源視角的透明性220 
4.10資源視角的案例研究220 
4.11章末練習223 
4.11.1問題223 
4.11.2基於Workbench的練習223 
4.11.3編程練習226 
4.11.4章末問題答案226 
4.11.5Workbench練習的答案/結果227 
4.11.6本章活動列表228 
4.11.7配套資源列表228 

第5章體系結構視角229 
5.1基本原理和概述229 
5.2體系結構視角229 
5.2.1關注點分離230 
5.2.2網絡化與分佈性230 
5.2.3分佈式系統的複雜性231 
5.2.4分層體系結構232 
5.2.5層級體系結構234 
5.3異構性234 
5.3.1異構性的定義和來源235 
5.3.2性能異構性235 
5.3.3平台異構性236 
5.3.4操作系統異構性236 
5.3.5異構性影響238 
5.3.6軟件移植239 
5.4硬件和系統級體系結構240 
5.4.1緊耦合(硬件)系統240 
5.4.2鬆散耦合(硬件)系統240 
5.4.3並行處理241 
5.5軟件體系結構242 
5.6軟件體系結構分類法246
5.6.1單層應用程序247 
5.6.2雙層應用程序247 
5.6.3三層應用程序248 
5.6.4多層應用程序248 
5.7客戶端—服務器249 
5.7.1客戶端和服務器的生命週期249 
5.7 .2連接的主動方和被動方250 
5.7.3CS體系結構模型250 
5.7.4CS模型的變體251 
5.7.5有狀態服務與無狀態服務252 
5.7.6模塊化和層級CS系統253 
5.8三層和多層體系結構
5.9對等體系結構
5.9.1對等應用程序的特性
5.9.2對等體系結構連接的複雜性
5.9.3探索對等行為
5.10分佈式對象
5.11中間件對軟件體系結構的支持
5.12提供集體資源和計算資源的系統模型
5.12.1集群
5.12.2網格
5.12.3數據中心
5.12.4雲
5.13軟件庫
5.13.1軟件庫案例
5.13.2靜態鏈接和動態鏈接
5.13.3語言相關的特性:C/C++頭文件
5.14硬件虛擬化
5.14.1虛擬機
5.14.2Java虛擬機
5.15靜態和動態配置
5.15.1靜態配置
5.15.2動態配置
5.15.3上下文感知
5.16分佈式應用程序的非功能性需求
5.16.1複製
5.16.2複製的語義
5.16.3複製的實現
5.17分佈式應用程序與網絡之間的關係
5.18體系結構視角的透明性
5.19體系結構視角的案例研究
5.19.1有狀態服務器設計
5.19.2遊戲組件的關注點分離
5.19.3遊戲應用程序的物理和邏輯體系結構
5.19.4遊戲的透明性
5.20章末練習
5.20.1問題
5.20.2編程練習
5.20.3章末問題答案
5.20.4本章活動列表
5.20.5配套資源列表

第6章分佈式系統
6.1基本原理和概述
6.2透明性
6.2.1訪問透明性
6.2. 2位置透明性
6.2.3複製透明性
6.2.4並發透明性
6.2.5遷移透明性
6.2.6故障透明性
6.2.7規模擴展透明性
6.2.8性能透明性
6.2.9分佈透明性
6.2.10實現透明性
6.3公共服務
6.4名稱服務
6.4.1名稱服務的運行
6.4.2目錄服務
6.4.3名稱服務設計和實現的挑戰
6.5域名系統
6.5.1域名空間
6.5.2DNS實現
6.5.3DNS名稱服務器:權威和授權
6.5.4複製
6.5.5名稱解析的進一步細節
6.5. 6DNS中的緩存
6.5.7探索地址解析
6.5.8反向DNS查找
6.6時間服務
6.6.1時間服務簡介
6.6.2物理時鐘同步
6.6.3邏輯時鐘與同步
6.7選舉算法
6.7.1操作簡介
6.7.2bully選舉算法
6.7.3ring選舉算法
6.7.4領導者預選
6.7.5針對一個選舉算法的探索
6.8組通信
6.9通知服務
6.10中間件:機制和操作
6.11中間件例子和支持技術
6.11.1公共對象請求代理體系結構
6.11.2接口定義語言
6.11.3可擴展標記語言
6.11.4JavaScript對象表示法
6.11.5Web服務與REST 
6.11.6簡單對象訪問協議
6.12分佈式系統的確定性和不確定性
6.13章末練習
6.13. 1問題
6.13.2編程練習
6.13.3章末問題答案
6.13.4本章活動列表
6.13.5配套資源列表

第7章案例研究:融會貫通
7.1基本原理和概述
7.2用例說明
7.3案例研究1:時間服務客戶端(基於庫)
7.3.1學習目標
7.3.2需求分析
7.3.3體系結構和代碼結構
7.3.4關注點的分離
7.3.5組件之間的耦合與綁定
7.3.6設計的通信特性
7.3.7實現
7.3 .8測試
7.3.9用例的透明性
7.3.10案例研究資源
7.4案例研究2:事件通知服務
7.4.1學習目標
7.4.2需求分析
7.4.3體系結構和代碼結構
7.4.4關注點的分離
7.4 .5組件之間的耦合與綁定
7.4.6設計的通信特性
7.4.7事件通知服務的應用程序使用場景示例
7.4.8測試
7.4.9事件通知服務的透明性
7.4.10案例研究資源
7.5分佈式應用程序的優秀設計實踐
7.5.1需求分析
7.5.2架構方面
7.5.3通信方面
7.5.4盡可能重用代碼
7.5.5為通過測試的代碼和信任的代碼創建庫
7.5.6測試方面
7.6章末練習
7.6.1編程練習
7.6.2配套資源列表