趣話計(jì)算機(jī)底層技術(shù)
鏈接:https://pan.baidu.com/s/1ro2iEg-tk-ikEg0LFLKlug?pwd=p35r?
提取碼:p35r

這本書主要是用講故事的方式介紹計(jì)算機(jī)底層相關(guān)的技術(shù),用通俗易懂的表達(dá)方式幫助大家學(xué)習(xí)底層技術(shù)。
故事的主人公可能是計(jì)算機(jī)里的一個(gè)程序、一個(gè)進(jìn)程、一個(gè)線程、一個(gè)函數(shù)、一個(gè)數(shù)據(jù)包、一個(gè)文件等這樣的軟件角色,也可能是CPU、內(nèi)存、網(wǎng)卡等這樣的硬件角色。
本書透過這些角色的視角去講述發(fā)生在計(jì)算機(jī)世界里的故事,幫助大家在故事中學(xué)習(xí)和了解計(jì)算機(jī)底層技術(shù)的工作原理。
整本書由幾十個(gè)故事構(gòu)成,故事之間既有關(guān)聯(lián)性,讓你像“追劇”一樣學(xué)習(xí)技術(shù),也有一定的獨(dú)立性,讓你隨時(shí)翻開一篇都能看下去。
本書主要涵蓋計(jì)算機(jī)中的CPU、存儲(chǔ)、I/O、操作系統(tǒng)、系統(tǒng)編程、安全六個(gè)主題,每個(gè)主題一章,你不必從頭到尾逐篇閱讀,完全可以挑選自己感興趣的任何章節(jié)開始閱讀。
內(nèi)容簡介
本書用一系列有趣的小故事講述計(jì)算機(jī)底層相關(guān)的技術(shù)知識(shí)。
? 第1章:聚焦計(jì)算機(jī)中最核心的CPU,從最基礎(chǔ)的門電路開始,到基本的指令執(zhí)行過程,最后到CPU的一些高級(jí)技術(shù)。內(nèi)容涵蓋緩存、原子操作、指令流水線、分支預(yù)測、亂序執(zhí)行、超線程、SIMD、 內(nèi)存管理、TLB等。
? 第2章:主要講述計(jì)算機(jī)中的存儲(chǔ)設(shè)施,包括CPU中的緩存,內(nèi)存、機(jī)械硬盤三者數(shù)據(jù)存儲(chǔ)的原理,以及硬盤上的數(shù)據(jù)管理組織的軟件——文件系統(tǒng)基本模型。
? 第3章:主要講述計(jì)算機(jī)中的I/O和數(shù)據(jù)傳輸。內(nèi)容涵蓋總線系統(tǒng)、中斷機(jī)制、DMA技術(shù)、零拷貝技術(shù)。重點(diǎn)關(guān)注網(wǎng)卡相關(guān)的數(shù)據(jù)傳輸,包括網(wǎng)卡的基本工作機(jī)制,網(wǎng)卡接收數(shù)據(jù)包后的處理,最后介紹一種時(shí)下流行的數(shù)據(jù)包處理技術(shù)——DPDK。
? 第4章:前面三章主要是在硬件層面,這一章開始介紹軟件。本章聚焦計(jì)算機(jī)中最重要的軟件——操作系統(tǒng)。本書默認(rèn)以Linux為參考,內(nèi)容涵蓋操作系統(tǒng)的一些基礎(chǔ)知識(shí),包括進(jìn)程、線程、系統(tǒng)調(diào)用、異常處理、信號(hào)、鎖、權(quán)限管理,最后介紹一個(gè)時(shí)下流行的容器技術(shù)Docker的原理。
? 第5章:主要涉及系統(tǒng)編程中和操作系統(tǒng)緊密相關(guān)的一些技術(shù)點(diǎn)。包括進(jìn)程的創(chuàng)建過程、線程棧、進(jìn)程間通信、I/O多路復(fù)用、內(nèi)存映射文件、協(xié)程,最后簡單介紹調(diào)試器GDB和可執(zhí)行文件ELF。
? 第6章:本章的主題是安全。網(wǎng)絡(luò)安全涉及方方面面,本章挑選了和計(jì)算機(jī)系統(tǒng)底層相關(guān)的一些安全技術(shù),通過故事去感受計(jì)算機(jī)攻擊的原理,包含棧溢出攻擊、整數(shù)溢出攻擊、DDoS攻擊、TCP會(huì)話劫持、HTTPS原理,還有前幾年大火的CPU漏洞——熔斷與幽靈攻擊原理等。
作者簡介
軒轅之風(fēng)(@編程技術(shù)宇宙),前百度、360、奇安信高級(jí)安全研發(fā)工程師,專注網(wǎng)絡(luò)安全、流量分析、大數(shù)據(jù)處理領(lǐng)域的軟件研發(fā)。
精彩書評(píng)
計(jì)算機(jī)從來都不只是一種工具,它是人類智慧的結(jié)晶和智能演化的一種形態(tài),是定義問題、求解問題的思想庫和兵器庫。本書正是看到了這一層,創(chuàng)造性地“以讀者為中心,以問題為導(dǎo)向,以故事為載體”,打造出沉浸式、臨場感、高參與度的閱讀體驗(yàn),對(duì)于專業(yè)圖書來說,有一種“軒轅式革命”的味道。故事是技術(shù)的最好催化劑,希望后續(xù)能推出動(dòng)畫版,用視頻的形式還原書中一幕幕有趣的場景。
唐彰國,四川師范大學(xué)教授,碩士生導(dǎo)師;四川師范大學(xué)網(wǎng)絡(luò)與通信技術(shù)研究所總工程師
本書不僅系統(tǒng)地介紹了計(jì)算機(jī)底層技術(shù)知識(shí),而且作者通過幽默風(fēng)趣的小故事、通俗易懂的語言,把枯燥無味的技術(shù)知識(shí)生動(dòng)形象地呈現(xiàn)給了讀者。整書結(jié)構(gòu)全面系統(tǒng)、知識(shí)深入淺出、內(nèi)容生動(dòng)翔實(shí),相信每位讀者都能從中獲得很大幫助!
劉凡平,海豚躍躍?認(rèn)知智能 CEO;《突圍算法》《大數(shù)據(jù)時(shí)代的算法》等書作者
計(jì)算機(jī)底層知識(shí)是軟件工程師和網(wǎng)絡(luò)安全工程師的基本功,但相比應(yīng)用開發(fā)來說,常常顯得艱深晦澀。本書創(chuàng)造性地采用擬人視角,通過虛擬化的人物和故事將這些晦澀的知識(shí)通俗化,撥開底層技術(shù)艱深的迷霧,大大降低了學(xué)習(xí)的門檻,大家不妨一讀!
白皓文,奇安信資深威脅情報(bào)分析師
對(duì)初學(xué)計(jì)算機(jī)的朋友來說,晦澀的原理闡述總讓初學(xué)者望而卻步,而本書用通俗易懂的方式闡述底層技術(shù)。我鼓勵(lì)大家讀這本書的原因在于,它以一種更易理解、更易接受的方式讓讀者了解專業(yè)嚴(yán)謹(jǐn)?shù)募夹g(shù)知識(shí)。如果你想要快速了解計(jì)算機(jī)底層原理等基礎(chǔ)知識(shí),那這本書很適合你。
何鵬,百度集團(tuán)安全部 高級(jí)產(chǎn)品運(yùn)營經(jīng)理
我讀過的技術(shù)書籍或文章通常有如下特點(diǎn),或因嚴(yán)謹(jǐn)性而失去趣味性,或因趣味性而失去嚴(yán)謹(jǐn)性,而本書是我見過為數(shù)不多能將二者完美結(jié)合起來的技術(shù)書。你既可以沉浸在其中一個(gè)個(gè)生動(dòng)形象的人物和故事里,又可以深挖這里面的技術(shù)細(xì)節(jié),可謂是既生動(dòng)又翔實(shí),值得一讀!
閃客,微信公眾號(hào)“低并發(fā)編程”作者,《Linux源碼趣談》作者
目錄
第1章 計(jì)算機(jī)的大腦:中央處理器CPU
1.1 CPU的細(xì)胞:門電路
1.1.1 邏輯門
1.1.2 加法器
1.1.3 算術(shù)邏輯單元ALU
1.2 程序的本質(zhì):指令
1.2.1 指令集
1.2.2 寄存器
1.2.3 匯編語言
1.2.4 高級(jí)語言
1.2.5 指令執(zhí)行過程
1.3 像流水線一樣執(zhí)行指令
1.3.1 指令流水線
1.3.2 流水線的級(jí)數(shù)
1.3.3 流水線里的冒險(xiǎn)
1.4 CPU里的存儲(chǔ)設(shè)施:緩存
1.4.1 緩存
1.4.2 緩存行
1.4.3 指令緩存與數(shù)據(jù)緩存
1.5 多核緩存不一致引發(fā)的問題
1.5.1 原子操作
1.5.2 緩存引發(fā)的問題
1.5.3 緩存一致性協(xié)議MESI
1.6 指令還能亂序執(zhí)行
1.6.1 數(shù)據(jù)冒險(xiǎn)與流水線停頓
1.6.2 亂序執(zhí)行
1.7 跳還是不跳,這是一個(gè)問題
1.7.1 靜態(tài)預(yù)測
1.7.2 動(dòng)態(tài)預(yù)測
1.8 一條指令同時(shí)處理多個(gè)數(shù)據(jù)
1.8.1 一個(gè)簡單的循環(huán)
1.8.2 并行計(jì)算
1.8.3 一條指令處理多個(gè)數(shù)據(jù)
1.9 一個(gè)核同時(shí)執(zhí)行兩個(gè)線程
1.9.1 資源閑置
1.9.2 超線程技術(shù)
1.10 CPU是如何管理內(nèi)存的
1.10.1 8086
1.10.2 32位時(shí)代
1.10.3 虛擬內(nèi)存
1.10.4 分頁交換
1.11 CPU地址翻譯的備忘錄
1.11.1 虛擬地址翻譯
1.11.2 地址翻譯緩存
1.11.3 翻譯后備緩沖區(qū)
1.12 GPU和CPU有什么區(qū)別
1.12.1 龐大的核心數(shù)量
1.12.2 GPU的SIMT與“超線程”
第2章 計(jì)算機(jī)中的存儲(chǔ)設(shè)施
2.1 緩存為什么比內(nèi)存還快
2.2 內(nèi)存條是如何存儲(chǔ)數(shù)據(jù)的
2.2.1 數(shù)據(jù)存儲(chǔ)
2.2.2 內(nèi)存編址
2.3 多個(gè)CPU如何共同訪問內(nèi)存
2.3.1 NUMA架構(gòu)
2.3.2 操作系統(tǒng)支持
2.3.3 內(nèi)存分配問題
2.4 機(jī)械硬盤存儲(chǔ)數(shù)據(jù)的原理
2.5 硬盤那么大,計(jì)算機(jī)如何管理
2.5.1 扇區(qū)和塊
2.5.2 塊位圖
2.5.3 inode
2.5.4 目錄
2.5.5 塊組、組描述符、超級(jí)塊
2.5.6 引導(dǎo)塊、分區(qū)DBR和MBR
第3章 數(shù)據(jù)的輸入與輸出
3.1 計(jì)算機(jī)中的高速公路
3.1.1 早期的總線系統(tǒng)
3.1.2 南橋與北橋
3.1.3 消失的北橋
3.2 其他設(shè)備如何與CPU通信
3.2.1 8259A可編程中斷控制器
3.2.2 APIC高級(jí)可編程中斷控制器
3.2.3 中斷親和性
3.3 計(jì)算機(jī)啟動(dòng)的過程
3.3.1 開始執(zhí)行
3.3.2 MBR
3.3.3 操作系統(tǒng)
3.4 CPU把數(shù)據(jù)搬運(yùn)的工作“外包”出去
3.4.1 PIO模式
3.4.2 DMA技術(shù)
3.4.3 DMA全面開花
3.5 神奇的零拷貝技術(shù)
3.5.1 數(shù)據(jù)的四次拷貝
3.5.2 零拷貝技術(shù)
3.6 網(wǎng)卡是如何工作的
3.6.1 集線器時(shí)代
3.6.2 數(shù)據(jù)收發(fā)過程
3.6.3 交換機(jī)時(shí)代
3.7 網(wǎng)卡收到數(shù)據(jù)包后發(fā)生什么
3.7.1 數(shù)據(jù)幀校驗(yàn)
3.7.2 DMA數(shù)據(jù)傳輸
3.7.3 軟中斷
3.7.4 輪詢收包
3.7.5 協(xié)議棧
3.8 繞過操作系統(tǒng),直接收發(fā)數(shù)據(jù)包
3.8.1 萬兆流量需求
3.8.2 中斷問題
3.8.3 超快的抓包技術(shù):DPDK
3.8.4 空轉(zhuǎn)問題
第4章 計(jì)算機(jī)的大管家:操作系統(tǒng)
4.1 一個(gè)控制程序的進(jìn)化
4.1.1 多道程序處理
4.1.2 時(shí)間分片
4.1.3 狀態(tài)
4.1.4 優(yōu)先級(jí)
4.1.5 多核時(shí)代
4.2 程序運(yùn)行的實(shí)體:進(jìn)程
4.2.1 進(jìn)程地址空間
4.2.2 進(jìn)程調(diào)度
4.2.3 進(jìn)程與線程
4.3 CPU的執(zhí)行流:線程
4.4 內(nèi)核地址空間歷險(xiǎn)記:系統(tǒng)調(diào)用
4.4.1 神秘的長者
4.4.2 系統(tǒng)調(diào)用
4.4.3 內(nèi)核堆棧
4.5 當(dāng)除數(shù)為0時(shí),CPU發(fā)生了什么
4.5.1 中斷和異常
4.5.2 信號(hào)投遞
4.5.3 異常返回
4.6 發(fā)給進(jìn)程的信號(hào),到底去哪兒了
4.6.1 可靠信號(hào)與不可靠信號(hào)
4.6.2 信號(hào)的處理
4.6.3 多線程的信號(hào)處理
4.7 困住線程的鎖,到底是什么
4.7.1 原子操作
4.7.2 自旋鎖
4.7.3 互斥鎖
4.7.4 條件變量
4.7.5 信號(hào)量
4.8 Linux的權(quán)限管理
4.8.1 打開文件的過程
4.8.2 權(quán)限檢查
4.8.3 UGO與ACL檢查
4.8.4 Cgroup與SELinux的檢查
4.9 計(jì)算機(jī)中“楚門的世界”
4.9.1 隱藏文件系統(tǒng):chroot與pivot_root
4.9.2 進(jìn)程的隔離:命名空間
4.9.3 行為的限制:Cgroup
第5章 系統(tǒng)編程那些事兒
5.1 進(jìn)程是如何誕生的
5.1.1 奇怪的fork
5.1.2 寫時(shí)拷貝
5.1.3 消失的線程們
5.2 線程的棧里都裝了什么
5.2.1 自動(dòng)增長
5.2.2 內(nèi)核棧
5.2.3 棧溢出
5.3 進(jìn)程間如何通信
5.3.1 信號(hào)
5.3.2 socket套接字
5.3.3 匿名管道
5.3.4 消息隊(duì)列
5.3.5 共享內(nèi)存
5.4 高性能基礎(chǔ):I/O多路復(fù)用
5.4.1 select模型
5.4.2 poll模型
5.4.3 epoll模型
5.5 像訪問內(nèi)存一樣讀寫文件
5.5.1 傳統(tǒng)文件讀寫
5.5.2 內(nèi)存映射文件
5.6 線程里的多個(gè)執(zhí)行流:協(xié)程
5.6.1 線程阻塞問題
5.6.2 多個(gè)執(zhí)行流的“調(diào)度”
5.7 調(diào)試器是如何工作的
5.7.1 軟件斷點(diǎn)
5.7.2 單步調(diào)試
5.7.3 內(nèi)存斷點(diǎn)
5.8 可執(zhí)行文件ELF
5.8.1 格式識(shí)別
5.8.2 ELF文件格式
5.8.3 加載過程
第6章 計(jì)算機(jī)的攻擊與安全防護(hù)
6.1 TCP序列號(hào)的秘密
6.1.1 TCP初始化序列號(hào)是多少
6.1.2 Linux協(xié)議棧里的計(jì)數(shù)器
6.2 “猜出”TCP的序列號(hào)
6.2.1 神秘的TCP計(jì)數(shù)器
6.2.2 奇怪的TCP連接
6.2.3 基于計(jì)數(shù)器的側(cè)信道攻擊
6.3 危險(xiǎn)的TCP SYN Flood
6.3.1 SYN洪水攻擊
6.3.2 安全防護(hù):SYN Cookie
6.4 從HTTP到HTTPS的進(jìn)化
6.4.1 第一版:直接簡單加密
6.4.2 第二版:非對(duì)稱加密
6.4.3 第三版:非對(duì)稱與對(duì)稱加密結(jié)合
6.4.4 第四版:密鑰計(jì)算
6.4.5 第五版:數(shù)字證書
6.4.6 第六版:信任鏈
6.5 線程棧里的秘密行動(dòng)
6.5.1 棧溢出與Stack Canary
6.5.2 虛函數(shù)攻擊
6.6 CPU分支預(yù)測引發(fā)的危機(jī)
6.6.1 觸發(fā)分支預(yù)測
6.6.2 亂序執(zhí)行與緩存引發(fā)的攻擊
6.6.3 KPTI內(nèi)核頁表隔離
6.7 CPU中隱藏的秘密基地
6.7.1 神秘的SGX
6.7.2 CPU里的禁區(qū)
6.7.3 內(nèi)存加密
6.8 躲在暗處的挖礦病毒
6.9 服務(wù)器被挖礦,Redis竟是內(nèi)鬼
6.9.1 挖礦病毒的入侵
6.9.2 Redis持久化存儲(chǔ)“闖禍了”
6.10 整數(shù)+1引發(fā)的內(nèi)核攻擊
6.10.1 IDT被誰篡改了?
6.10.2 有符號(hào)與無符號(hào)大有不同
6.10.3 整數(shù)+1的悲劇
6.11 從虛擬機(jī)中逃脫
6.11.1 虛擬化技術(shù)
6.11.2 虛擬機(jī)逃逸技術(shù)
查看全部↓