-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Linux技術內幕

( 簡體 字)
作者:羅秋明類別:1. -> 作業系統 -> Linux
譯者:
出版社:清華大學出版社Linux技術內幕 3dWoo書號: 45811
詢問書籍請說出此書號!

缺書
NT售價: 490

出版日:1/1/2017
頁數:771
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302451006
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:




此書獻給所有熱愛Linux內核的讀者。我們學習它而獲得的最大樂趣和收獲來源于滿足了我們的好奇心。作者最早接觸操作系統內核是20世紀90年代初期在西安電子科技大學校園,一個偶然機會獲得了一本西安電子科技大學老師寫的關于揭秘DOS內核的書籍,如饑似渴地一口氣讀完,相信一些讀者也有過類似的體驗。不過很快Windows 3.1、Windows NT來了,可獲得的操作系統看似要封閉在一個黑盒子里了。后來在桂林電子科技大學讀研的日子里,我知道了Linux這個新東西,不過當時正在研究硬件——用VHDL寫一個測試控制器,所以并沒有深入了解。直到后來在華中科技大學讀博士的時候,從浙江大學毛德操老師的《Linux內核源代碼情景分析》一書中又找到了當年的感覺。直到前幾年遇到一個研究所的年輕人以讀過內核而沾沾自喜,于是我覺得應該寫一本關于Linux內核的書,降低Linux內核閱讀的難度,讓它變得平民化一點兒,這就是本書的由來之一。當然更重要的是在陳國良院士的研究團隊中,我參與了系統軟件的相關工作,這也算是交的一份作業吧。
在學習了本科操作系統課程并且對系統編程有一定了解之后,不少同學希望通過Linux源代碼的學習來進一步掌握操作系統的細節。但是在操作系統原理和Linux代碼之間有明顯的學習上的鴻溝,兩者之間側重點的不同使得源代碼的學習曲線非常陡峭。
操作系統原理性教材以4大管理(處理機、內存、設備和文件)為基線,主要講述的是原理和算法性的內容,而Linux內核分析的書籍(包括中文和英文)則偏向于“解剖”代碼本身。作者希望做到在討論“How”的基礎上,力求進一步探究“Why”,在此思路下并借助類似《Linux內核源代碼情景分析》等專著中的方式,本教材選擇以主題分析的方式,從應用程序(需求)和操作系統實現兩個方面同時入手,力求展現用戶編程需求和內核實現的對應關系,除了“代碼解剖”外,加強對各個“器官組織”之間聯系的描述,書中有大量的交叉引用便用于此目的。
本教材將現有書籍通常都不在意的概念給讀者澄清,從用戶進程在物理機器上運行的角度,將源代碼大量的細節用提出正確需求問題的形式統領在一起,結合內存模型和時空模型來分析所涉及的問題,將相關原理、過程用圖示的直觀方法展示給讀者,降低了學習難度。
本書并不打算替代操作系統原理性教材和源代碼分析書籍,讀者應當先學習操作系統和系統編程的課程,最好閱讀過一兩本內核的書籍然后才閱讀此書,其間有必要的時候,讀者可以進一步研讀其他各種源代碼分析的專著。此書并不是開天辟地之作,書中許多內容參考了Understanding the Linux Kernel和Professional Linux Kernel Architecture的相關 內容。
由于內核代碼量非常大,而作者有限的精力和能力難免有理解上的偏差。因此如果讀者能在閱讀本書過程中快速地建立起“比較完整”和“大體上正確”的認識,那將是作者最大的欣慰。對于書中的不足與疏漏,歡迎讀者將問題反饋到lqm@szu.edu.cn,您的反饋將可能節約其他讀者寶貴的時間,因此極具價值。

羅秋明
深大荔園

致??謝
本書得以完成首先要感謝深圳大學——為我提供了一個舒適的工作環境,不必為生計而奔波。也要感謝計算機學院的陳國良院士和明仲院長,他們為本學院老師安排了合理的工作量,從而我能有空閑時間將本書完成。當然,計算機學院高性能計算所的老師們融洽地工作也是我能有精力進行編寫的保證。
其次要感謝我的幾個研究生,肖峰完成了slab機制、文件系統掛載模式等小節的主體內容,周遠遠、張義軍、孔暢、劉國強和劉杰進行了繁重的校對工作。本科學生楊詩達對初稿進行了閱讀并協助進行校對。若沒有這些同學的幫助,此書將要延遲許久才能與讀者見面。
最后要感謝我的家人,在我下班回家專心在計算機前寫作時,他們毫無怨言。這是對我最大的支持。


前??言
每當想到操作系統,大多數讀者腦海里浮現的應該是本科課程里反復強調的4大管 理——處理機(進程)管理、內存管理、文件管理和設備管理。但是我們一頭扎入到Linux內核分析的書籍中,卻發現這些概念在代碼中似乎混雜在一起。讀者可能已經看過《Linux內核設計與實現》、《深入理解Linux內核》、《深入Linux內核架構》、《深入理解Linux虛擬內存管理》或者《Linux內核源代碼情景分析》、《Linux內核完全剖析》等書籍。它們的內容都非常出色,讀完之后收獲頗豐。但是除了長期使用并研究Linux的人,大多數國內的讀者,特別是大學的本科生和研究生,讀完之后總感覺有欠缺和大量的不解。原因也許在于上述書籍中不屑于提到的那些基本概念對于理解Linux內核卻是必不可少的,沒有了這些基本概念,所學到的知識就類似于對“如長矛”、“如莆扇”、“如柱子”、“如草繩”的正確卻又不完整的認識。所以本書將盡量回答這些基本問題、努力做到“科普”的角色,幫助讀者弄清楚Linux的設計原點并在心中形成一個Linux的全景“海圖”。

內容簡介:

本書內容分成兩篇,第一篇是基本框架,第二篇是文件系統及相關內容。在第一篇的各章中:第1章先對Linux進行簡要介紹并給出本書分析時所用的模型;第2章從C語言程序、可執行文件到進程的虛存空間影像的全過程作為起點,給讀者建立起進程用戶空間管理的概念;然后第3章討論物理頁幀如何支撐這些虛存空間,并且討論了與物理空間一致的內核空間的管理;接著第4章就是進程的概念、進程的組織、進程切換和進程的創建撤銷等活動;第5章專門討論進程調度和負載均衡問題;后面4章繼續討論進程間通信、系統調用、內核的并發活動和同步問題。第二篇開始討論盤根錯節的文件系統:先在第10章分析文件系統和VFS的基本概念;然后在第11章討論頁高速緩存及塊緩存;第12章分析了VFS的通用文件訪問操作;第13章討論ext2文件系統的具體格式和操作細節;接著第14章討論同步;第15章討論內存回收問題;最后第16章和第17章討論設備管理和塊設備問題。
本書以內存模型和時空模型為主要參考來分析各章的相關內容,給出了比較直觀的圖示,這不僅對初學者非常有用,對希望了解Linux內核的讀者和相關開發人員也非常有參考價值。
目錄:

第一篇基本框架

第1章Linux內核概述 3

1.1UNIX與Linux 3

1.1.1UNIX 3

1.1.2Linux 3

1.1.3宏內核與微內核 6

1.1.4Linux內核源碼及版本 6

1.2Linux內核模型 11

1.2.1多視角下的內核 11

1.2.2功能模型 14

1.2.3內存模型 15

1.2.4時空模型 16

1.2.5特權模型 17

1.3本書局限性 18

小結 18

第2章進程影像 20

2.1從源代碼到進程 20

2.1.1源代碼、目標文件 20

2.1.2可執行文件與進程影像 26

2.2proc中的進程 32

2.2.1進程內存空間 32

2.2.2進程運行狀態等信息 33

2.3進程空間 35

2.3.1進程空間描述符 36

2.3.2虛存區域VMA 40

2.3.3VMA屬性 45

2.4ELF可執行文件裝入過程 48

2.4.1ELF裝入函數 49

2.4.2ELF格式 49

2.5進程空間的動態變化 54

2.5.1VMA上的操作 54

2.5.2文件映射 55

2.5.3堆的調整 58

2.5.4棧的變化 60

2.6并發的進程空間 60

小結 61

第3章虛擬空間的物理支撐 63

3.1物理內存組織與管理 64

3.1.1節點與內存域 64

3.1.2物理頁幀 79

3.1.3buddy系統 84

3.1.4頁幀遷移 94

3.1.5內存熱插拔 98

3.2地址映射與頁表 99

3.2.1分頁機制與頁表 99

3.2.2缺頁異常 103

3.3內核空間 104

3.3.1一致映射與高端內存 104

3.3.2一致內存分配 108

3.3.3非一致內存分配 109

3.3.4slub分配器 115

小結 130

第4章進程組織與基礎行為 131

4.1進程組織管理 131

4.1.1PCB進程控制塊 131

4.1.2命名空間 135

4.1.3進程標識 141

4.1.4進程間關系 148

4.1.5進程資源限制 151

4.2進程創建與撤銷 152

4.2.1進程創建 152

4.2.2execve系統調用 159

4.2.3內核線程 160

4.2.4Linux進程樹 162

4.2.5進程的撤銷 167

4.3進程切換 167

4.3.1切換時機 168

4.3.2切換過程 169

4.3.3切換示例 178

小結 181

第5章進程調度與負載均衡 193

5.1調度與均衡基本框架 193

5.2進程狀態與轉換 194

5.2.1進程調度狀態 194

5.2.2進程狀態變遷 196

5.3進程調度 198

5.3.1調度框架 198

5.3.2完全公平調度 215

5.3.3實時調度 230

5.3.4STOP和IDLE調度類 234

5.3.5調度控制與proc接口 236

5.4負載均衡 241

5.4.1處理器層次結構 242

5.4.2調度的層次管理 243

5.4.3CFS任務的負載均衡 250

5.4.4實時負載均衡 254

小結 258

第6章進程間通信與同步 259

6.1管道通信 260

6.1.1無名管道 260

6.1.2命名管道 261

6.1.3管道數據結構 261

6.1.4管道操作 266

6.2SystemVIPC 269

6.2.1IPC標識與命名空間 269

6.2.2IPC公共框架 275

6.2.3IPC信號量 279

6.2.4IPC消息隊列 283

6.2.5IPC共享內存 287

6.3信號 290

6.3.1信號分類 290

6.3.2數據結構 294

6.3.3信號產生與發送 302

6.3.4信號的遞交和處理 305

小結 312

第7章內核活動 313

7.1中斷分類 313

7.1.1x86的中斷和異常 314

7.1.2后半部機制與軟中斷 315

7.1.3中斷相關概念的關系 315

7.2中斷處理 316

7.2.1中斷號 317

7.2.2中斷描述符表 320

7.2.3公共入口 325

7.2.4異常處理 329

7.3高層中斷處理 332

7.3.1轉向高層處理 333

7.3.2中斷的高層數據結構 336

7.3.3中斷返回處理 342

7.3.4中斷的線程化 349

7.4中斷嵌套與中斷管理 350

7.4.1中斷嵌套與中斷上下文 350

7.4.2中斷管理 353

7.5軟中斷和tasklet 355

7.5.1中斷的下半部 355

7.5.2軟中斷執行時機 356

7.5.3相關數據結構 360

7.5.4軟中斷的執行 361

7.5.5軟中斷的相關操作 363

7.5.6tasklet 365

7.6工作隊列 369

7.6.1工作隊列機制 369

7.6.2cmwq數據結構 371

7.6.3工作項 371

7.6.4cmwq工作隊列 375

7.6.5工作者池worker_pool 383

7.6.6并發度、應急處理等 386

7.7系統調用 388

7.7.1POSIXAPI、C庫和系統調用 388

7.7.2系統調用的實現 389

小結 399

第8章時間管理 400

8.1時間管理框架 400

8.1.1基本概念 400

8.1.2時間中斷和事件 406

8.1.3clock_event_device與tick_device 407

8.1.4TIMER_SOFTIRQ軟中斷 413

8.1.5timekeeper 414

8.2定時器 416

8.2.1低分辨率定時器 416

8.2.2高精度定時器 419

8.2.3模擬tick事件 422

8.2.4通知鏈技術 423

小結 424

第9章內核并發與同步 426

9.1同步的需求 426

9.1.1內核并發情形 426

9.1.2內核搶占 429

9.2內核共享變量的保護 432

9.2.1被保護對象 432

9.2.2保護原則 433

9.2.3禁止內核并發 435

9.3內核同步手段 437

9.3.1原子操作 437

9.3.2自旋鎖、讀寫鎖和順序鎖 439

9.3.3RCU機制 444

9.3.4順序和屏障 447

9.3.5信號量與互斥量 448

9.3.6等待隊列與完成變量 452

9.3.7每CPU變量 455

小結 458

第二篇盤根錯節的文件系統

第10章文件系統 461

10.1文件系統的抽象層次 461

10.1.1進程視角下的文件 462

10.1.2VFS虛擬文件系統 468

10.1.3多角度分層模型 472

10.2VFS核心對象 475

10.2.1文件對象 475

10.2.2目錄項對象 479

10.2.3索引節點對象 484

10.2.4超級塊對象 490

10.3文件系統類型與掛載 495

10.3.1文件系統類型與注冊 495

10.3.2掛載操作 503

10.3.3掛載模式 513

10.3.4特殊文件系統 519

小結 525

第11章頁緩存和塊緩存 526

11.1頁高速緩存 527

11.1.1address_space 528

11.1.2頁高速緩存的組織 530

11.1.3反向映射 534

11.2塊高速緩存 540

11.2.1塊緩存 540

11.2.2LRU塊緩存 542

11.2.3塊緩存操作 543

小結 547

第12章VFS的文件操作 548

12.1VFS系統調用 548

12.2open()與close()系統調用 549

12.2.1open的框架 549

12.2.2文件定位過程 552

12.2.3close()系統調用 558

12.3讀/寫系統調用 558

12.3.1入口代碼 560

12.3.2通用write寫例程 568

12.3.3通用read讀例程 570

12.3.4其他讀寫細節 583

12.3.5向BIO層提交請求 587

小結 588

第13章ext2文件系統 590

13.1ext2磁盤數據結構 590

13.1.1磁盤分區的組織 590

13.1.2塊組描述符和位圖 591

13.1.3盤上和內存數據結構 592

13.2ext2超級塊 593

13.2.1ext2超級塊數據結構 593

13.2.2掛載與訪問 597

13.3ext2索引節點 598

13.3.1盤上ext2索引節點 599

13.3.2內存ext2索引節點 601

13.3.3inode_operations 603

13.3.4ext2地址空間與文件操作 604

13.4目錄及目錄項 607

13.4.1ext2_dir_entry 607

13.4.2ext2_lookup() 609

小結 610

第14章頁緩存同步(回寫) 611

14.1同步/回寫、交換與回收 611

14.2臟頁同步(回寫) 613

14.2.1回寫機制演變 613

14.2.2同步時機與框架 615

14.2.3基本數據結構 617

14.3回寫接口 627

14.3.1sync系列系統調用 627

14.3.2sys_sync() 628

14.3.3sys_syncfs 633

14.3.4單個文件的同步 635

14.3.5被動回寫 637

14.4回寫工作隊列 638

14.4.1初始化 638

14.4.2工作隊列處理函數 640

14.5回寫操作 643

14.5.1do_writepages() 644

14.5.2ext2_writepages() 645

14.5.3回寫等待 647

小結 649

第15章內存回收與交換 650

15.1頁幀回收 650

15.1.1直接釋放 650

15.1.2LRU頁幀組織 651

15.1.3PFRA回收算法 655

15.2核心回收操作 659

15.2.1shrink_zone() 659

15.2.2shrink_slab() 666

15.2.3解除頁表映射 667

15.3交換 667

15.3.1交換功能 668

15.3.2交換分區 668

15.3.3交換緩存 673

小結 675

第16章設備管理 676

16.1設備管理組織 676

16.1.1設備驅動模型 677

16.1.2sysfs 678

16.1.3基礎組件 679

16.1.4容器 682

16.2設備的VFS接口 688

16.2.1設備文件 689

16.2.2從VFS中訪問設備 691

16.3字符設備 693

16.3.1設備的散列組織 694

16.3.2初始化與注冊 695

16.3.3打開字符設備 696

16.4PCI設備 698

16.4.1pci_bus_type和pci_bus 699

16.4.2pci_driver 700

16.4.3pci_dev 701

16.4.4uevent 704

小結 705

第17章塊設備 706

17.1基本概念 706

17.1.1塊設備層 706

17.1.2傳送單位 708

17.2塊設備層組件 709

17.2.1磁盤與磁盤分區 709

17.2.2塊設備 712

17.2.3請求隊列 715

17.3提交請求及處理 728

17.3.1plug/unplug機制 728

17.3.2提交請求 733

17.3.3提交到驅動程序 742

17.3.4硬盤的request_fn 744

17.3.5中斷處理 746

17.4IO調度 749

17.4.1IO調度器 749

17.4.2調度器數據結構 751

17.5初始化及注冊 754

17.5.1塊設備初始化 754

17.5.2硬盤初始化 759

小結 764

附錄 765

后記 774

序: