存儲技術原理分析

存儲技術原理分析

《存儲技術原理分析 》是電子工業出版社 出版的圖書,作者是敖青雲 ,本書通過對Linux 2.6核心原始碼的分析,詳細討論存儲技術的內在實現原理。

基本介紹

  • 書名:存儲技術原理分析
  • 作者:敖青雲 (作者)
  • ISBN:9787121144325
  • 頁數:768頁
  • 出版社:電子工業出版社
  • 出版時間:2011年9月1日
  • 裝幀:平裝 
  • 開本:16
內容簡介,編輯推薦,目錄,作者簡介,

內容簡介

《存儲技術原理分析:基於Linux 2.6核心原始碼》分為三條主線:解釋PCI設備、SCSI設備以及塊設備的發現過程;跟蹤存儲I/O路徑,即用戶對檔案的讀/寫請求怎么通過中間各個層次,最終到達磁碟介質;此外,還簡要介紹主機適配器、塊設備驅動以及檔案系統等編程框架。
書中將設計一些主要的場景,跟蹤實現的各個層次,對其中的主要函式進行代碼級的講解。在分析每個模組時,會給出整體框架、主要數據結構之間的關係,並列出各個域的詳細含義。
採用這種方式,我們希望讀者能對存儲相關概念(如RAID、快照等)的內在實現有具體的了解,也試圖幫助讀者理解Linux核心設計和開發的一些思想,為進一步分析其他模組(如進程管理、記憶體管理等)起借鑑作用。
讀者對象:《存儲技術原理分析:基於Linux 2.6核心原始碼》適合作為高校計算機相關專業本科生和研究生學習作業系統的輔助和實踐教材,也適合作為Linux愛好者學習核心的參考書籍。同時,它也是存儲從業工程師深入理解存儲架構,以及軟體開發工程師掌握軟體架構的有效工具。

編輯推薦

《存儲技術原理分析:基於Linux 2.6核心原始碼》通過分析Linux核心原始碼,講解存儲、網路和虛擬機的相關技術,您將從中領悟到:設備發現過程了解作業系統如何發現PCI設備、SCSI設備、塊設備,並和驅動綁定起來;存儲l,O路徑了解用戶對檔案的讀/寫請求怎么通過I/O路徑,最終到達磁碟介質上;核心編程模式理解PCI-SCSIHBA驅動、塊設備驅動,以及檔案系統等編程框架。

目錄

第一部分 存儲技術
第1章 存儲技術概論 2
1.1 存儲系統元素 2
1.1.1 磁碟驅動器 2
1.1.2 存儲設備 4
1.1.3 伺服器部件 7
1.1.4 存儲軟體 9
1.2 存儲相關技術 10
1.2.1 備份技術 10
1.2.2 快照技術 13
1.2.3 連續數據保護技術 21
1.2.4 RAID技術 22
1.2.5 “多路徑”技術 36
1.2.6 虛擬化技術 39
1.3 網路存儲結構 40
1.3.1 直接連線存儲 40
1.3.2 網路連線存儲 40
1.3.3 存儲區域網路 41
1.4 存儲I/O通道 41
1.4.1 存儲I/O物理通道 42
1.4.2 存儲I/O邏輯通道 43
1.4.3 虛擬機I/O邏輯通道 44
1.5 存儲套用舉例 45
1.5.1 同時提供檔案服務和塊服務 45
1.5.2 按需擴容、隨需取用延緩企業投資 45
1.5.3 計算與存儲分離便於故障恢復和系統升級 45
1.5.4 為高可用性集群提供共享存儲 46
1.5.5 利用快照技術恢復被病毒破壞的數據 47
1.5.6 基於檔案的數據備份和遠程鏡像方案 47
1.5.7 利用PXE和iSCSI實現遠程引導和映像恢復 48
1.5.8 虛擬機故障的檢測及遷移 49
第二部分 設備
第2章 Linux驅動模型 52
2.1 概述 52
2.2 引用計數 53
2.3 核心對象及集合 55
2.3.1 創建或初始化核心對象 58
2.3.2 將核心對象添加到sysfs檔案系統 59
2.3.3 創建、初始化、添加核心對象集 63
2.3.4 傳送核心對象變化事件到用戶空間 63
2.4 sysfs檔案系統 69
2.4.1 構建核心對象、對象屬性和對象關係的內部樹 70
2.4.2 對sysfs檔案的讀/寫轉換為對屬性的show和store操作 73
2.4.3 為具體核心對象定義屬性的規範流程 77
2.5 kobject編程模式 80
2.6 驅動模型對象 81
2.6.1 匯流排類型 82
2.6.2 設備 86
2.6.3 驅動 100
2.6.4 類 105
2.6.5 接口 107
2.7 驅動模型編程模式 108
第3章 PCI子系統 110
3.1 概述 110
3.2 PCI子系統對象 115
3.2.1 pci_bus:PCI匯流排 116
3.2.2 pci_dev:PCI設備 117
3.3 PCI核心初始化 121
3.4 配置訪問方法 124
3.4.1 機制#1方式 126
3.4.2 PCIBIOS方式 128
3.4.3 配置訪問接口 133
3.5 PCI匯流排掃描 133
3.5.1 PCI匯流排編號範例 133
3.5.2 PCI匯流排掃描流程 137
3.6 PCI中斷路由 160
3.6.1 中斷路由初始化 165
3.6.2 查找中斷路由表 166
3.6.3 查找中斷路由驅動 167
3.6.4 分配ISA IRQ號 171
3.7 PCI資源分配 177
3.7.1 PCI資源分配範例 178
3.7.2 PCI資源分配流程 181
3.8 PCI設備驅動編程模式 193
3.8.1 定義PCI驅動結構 194
3.8.2 定義支持設備ID列表 194
3.8.3 實現probe回調方法 196
3.8.4 實現remove回調方法 198
3.8.5 實現其他回調方法 199
3.8.6 註冊與註銷PCI驅動 199
第4章 SCSI子系統 201
4.1 概述 201
4.2 SCSI子系統對象 202
4.2.1 scsi_host_template:SCSI主機適配器模板 203
4.2.2 Scsi_Host:SCSI主機適配器 207
4.2.3 scsi_target:SCSI目標節點 210
4.2.4 scsi_device:SCSI邏輯設備 211
4.2.5 scsi_cmnd:SCSI命令 215
4.3 SCSI子系統初始化 216
4.4 添加適配器到系統 216
4.5 SCSI設備探測 222
4.5.1 探測流程入口 224
4.5.2 探測邏輯單元 232
4.5.3 添加SCSI設備 237
4.6 SCSI磁碟驅動 241
4.6.1 同步執行部分 244
4.6.2 異步執行部分 247
4.6.3 重新校驗磁碟 249
4.6.4 讓磁碟轉起來 251
4.7 SCSI命令執行 254
4.8 SCSI錯誤恢復 259
4.8.1 命令進入錯誤恢復 261
4.8.2 錯誤恢複線程執行 262
4.8.3 傳送錯誤恢復命令 275
4.9 SCSI低層驅動編程模式 279
4.9.1 定義主機適配器模板 279
4.9.2 完善探測回調處理邏輯 279
4.9.3 實現queuecommand回調函式 279
4.9.4 實現中斷處理函式 283
4.9.5 實現其他回調函式 283
4.9.6 模組載入和卸載 283
第三部分 存儲I/O
第5章 塊I/O子系統 286
5.1 概述 286
5.2 塊I/O子系統對象 287
5.2.1 gendisk:通用磁碟 289
5.2.2 hd_struct:分區 291
5.2.3 block_device:塊設備 292
5.2.4 request_queue:請求佇列 293
5.2.5 request:塊設備驅動層請求 296
5.2.6 bio:通用塊層請求 298
5.3 添加磁碟到系統 300
5.3.1 分配通用磁碟描述符 300
5.3.2 添加到sysfs檔案系統 302
5.3.3 獲取磁碟塊設備描述符 305
5.3.4 打開磁碟塊設備描述符 306
5.3.5 重新掃描磁碟分區 310
5.3.6 設備號映射機制 314
5.4 請求處理過程 315
5.4.1 上層向塊I/O子系統提交請求 315
5.4.2 構造、排序或合併請求 320
5.4.3 SCSI策略例程逐個處理請求 327
5.4.4 為請求構造SCSI命令 334
5.4.5 為SCSI命令準備聚散列表 343
5.4.6 派發SCSI命令到低層驅動 349
5.5 I/O調度算法 352
5.5.1 為請求佇列建立關聯的I/O調度佇列 356
5.5.2 判斷bio是否可以被合併到request 356
5.5.3 將請求添加到I/O調度佇列或請求佇列 359
5.5.4 從I/O調度佇列派發請求到請求佇列 362
5.6 請求處理完成 366
5.6.1 低層驅動調用完成回調函式 366
5.6.2 引發塊I/O子系統的軟中斷 368
5.6.3 調用請求佇列的軟中斷回調 369
5.6.4 調用上層的完成回調函式 383
5.7 屏障I/O處理 386
5.7.1 屏障I/O接口 386
5.7.2 添加屏障請求 388
5.7.3 處理屏障請求 389
5.7.4 完成屏障請求 393
5.8 完整性保護 396
5.8.1 數據完整性對象 397
5.8.2 為塊設備註冊完整性能力 400
5.8.3 為bio準備完整性元數據 402
5.8.4 校驗完整性元數據 406
5.8.5 修正bio基準標籤 408
5.9 磁碟類設備驅動編程模式 411
5.9.1 定義磁碟類設備私有數據結構 411
5.9.2 定義和實現塊設備操作表 411
5.9.3 分配和初始化磁碟類設備相關結構 411
5.9.4 為磁碟類設備準備請求佇列並添加通用磁碟到系統 412
第6章 Multi-Disk(MD)模組 413
6.1 概述 413
6.2 RAID模組對象 414
6.2.1 mddev_t:RAID設備 414
6.2.2 mdk_rdev_t:成員磁碟 418
6.2.3 mdk_personality:MD個性 419
6.3 MD模組初始化 420
6.4 MD設備創建 423
6.4.1 從用戶空間打開MD設備 424
6.4.2 用戶空間傳送ioctl創建MD 428
6.4.3 自動檢測和運行RAID 439
6.5 MD設備請求執行 439
6.6 MD個性化編程模式 440
6.6.1 定義私有數據結構 441
6.6.2 聲明個性化結構 442
6.6.3 實現個性化方法 442
6.6.4 實現模組載入和卸載方法 445
6.7 RAID0模組 445
6.7.1 為RAID0設備構造條帶區域 446
6.7.2 查找包含給定偏移的條帶區域 451
6.7.3 映射到成員設備及其扇區偏移 451
6.8 RAID5模組 452
6.8.1 RAID5模組對象 452
6.8.2 請求執行過程 459
6.8.3 同步和恢復過程 507
第7章 Device Mapper模組 509
7.1 概述 509
7.2 Device Mapper對象 510
7.2.1 dm_table:映射表結構 512
7.2.2 dm_target:映射目標結構 513
7.2.3 mapped_device:映射設備結構 514
7.2.4 dm_dev:低層設備結構 515
7.2.5 target_type:映射目標類型 516
7.3 Device Mapper模組初始化 518
7.4 映射設備的創建 519
7.4.1 分配映射設備描述符 521
7.4.2 載入映射表 526
7.4.3 恢復映射設備 532
7.5 映射設備的請求執行 536
7.5.1 添加到延遲鍊表 537
7.5.2 分割與處理bio 539
7.6 核心複製執行緒 549
7.6.1 準備複製任務 551
7.6.2 任務處理流程 553
7.7 Device Mapper目標類型編程模式 556
7.7.1 定義私有數據結構 557
7.7.2 聲明目標類型結構 557
7.7.3 實現目標類型方法 557
7.7.4 實現模組載入和卸載方法 558
7.8 條帶映射模組 558
7.8.1 構造函式 559
7.8.2 析構函式 562
7.8.3 映射函式 562
7.8.4 end_io函式 563
7.9 快照映射模組 563
7.9.1 快照映射對象 564
7.9.2 快照源構造 569
7.9.3 快照構造 570
7.9.4 快照源讀/寫 577
7.9.5 快照讀/寫 585
7.9.6 例外倉庫 588
第8章 檔案系統 593
8.1 概述 593
8.2 檔案系統對象 595
8.2.1 file_system_type:檔案系統類型 596
8.2.2 super_block:VFS超級塊 597
8.2.3 inode:VFS索引節點 602
8.2.4 dentry:VFS目錄項 610
8.2.5 vfsmount:檔案系統裝載 612
8.3 裝載檔案系統 614
8.3.1 mount系統調用的處理流程 618
8.3.2 構建子檔案系統裝載實例 621
8.3.3 關聯檔案系統的超級塊實例 623
8.3.4 調用回調函式填充超級塊 626
8.3.5 裝載到全局檔案系統樹 630
8.4 路徑查找 632
8.4.1 路徑查找入口 635
8.4.2 逐個分量解析 637
8.4.3 解析單個分量 642
8.4.4 上溯通過裝載點 645
8.4.5 下溯通過裝載點 646
8.4.6 處理符號連結 646
8.5 打開檔案 651
8.5.1 open系統調用的處理流程 653
8.5.2 解析路徑最後一個分量 658
8.5.3 填充檔案描述符的內容 662
8.6 讀檔案 665
8.6.1 read系統調用的處理流程 670
8.6.2 基於緩衝頁面構造I/O請求 683
8.6.3 直接針對頁面構造I/O請求 690
8.6.4 從檔案塊編號推導磁碟塊編號 696
8.7 寫檔案 700
8.7.1 write系統調用的處理流程 700
8.7.2 通知為緩衝寫請求作準備 707
8.7.3 通知數據已複製到緩衝區 712
8.8 沖刷檔案 715
8.8.1 BDI相關對象 715
8.8.2 註冊後備設備信息 719
8.8.3 forker執行緒執行流程 721
8.8.4 flusher執行緒執行流程 723
8.8.5 同步相關係統調用 749
8.9 塊設備檔案 761
8.9.1 塊設備的主inode和次inode 762
8.9.2 對塊設備檔案的操作轉換為對塊設備的操作 764
8.9.3 對塊設備檔案的讀/寫作用於塊設備之上 767
8.10 檔案系統編程模式 767
主要參考文獻 769

作者簡介

敖青雲,博士,2001年畢業於上海交通大學計算機科學及工程系。畢業後一直從事存儲及相關產品的研發工作,主要研究方向為開源技術、作業系統、存儲及虛擬機技術等。現居上海。

相關詞條

熱門詞條

聯絡我們