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

趣話計算機底層技術

( 簡體 字)
作者:軒轅之風(@編程技術宇宙)類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社趣話計算機底層技術 3dWoo書號: 56269
詢問書籍請說出此書號!

缺書
NT售價: 590

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

譯者序:

前言:

你好,我是軒轅之風,熟悉我的讀者喜歡叫我軒轅。
相信不少人都有過這樣的感受:當我們去學習一項新的技術時,會有一大堆的技術名詞和專業術語向我們襲來。而當我們試圖去學習和理解它們時,網絡上的各種學習資料,要么是非常晦澀的原理闡述,要么是大段的代碼講解,看得云里霧里。在我們對一項技術還沒有一個全局和整體的認識之前,一下就陷入到細節中,這對新手學習的效率和信心都有不少負面影響。
除了學習,在工作中也有類似的現象,經常會有技術分享和技術講座,很多時候,負責分享和講述的人都只顧著單方面的信息輸出,把自己要講的東西說完就算完事,至于下面的人聽懂沒有,聽懂多少,似乎并不關心。
上面的兩種現象,在我十一年的編程生涯中,就經常遇到。
每到這個時候,我就在想:為什么不能站在讀者/觀眾的角度來想一想呢,想一想什么樣的方式更容易讓他們接受和理解。如果是我來講、我來寫,該用什么樣的語言讓大
家更好理解呢?
后來,我總結了自己的一套方法,那就是舉例子、打比方、講故事,把一個晦澀的
概念用我們熟知的事物表達出來,去降低技術名詞本身的神秘感,讓我們能快速知道這個技術是干什么的,要解決什么問題,然后才關注它具體是怎么工作的。
運用上面的表達方式,我曾經在大學的時候通過遠程語音講述的方式,幫助一個學經濟學專業的高中同學從零基礎開始學C語言并通過了計算機二級考試。
我們再來看另外一個問題。
在我面試過的很多人中,以及在如今的互聯網上,我發現很多程序員都在忙著學習各種編程語言、各種開發框架和各種中間件的使用,卻對計算機底層相關的技術知之甚少。我思考造成這一現象主要有幾個原因:
1. 很多程序員都是半路出家的,沒有系統地學習過計算機底層知識。
2. 科班出身的程序員由于大學里陳舊的教學方式對這些底層技術也提不起興趣。
3. 實際工作中的很多崗位只需要具備增刪查改(CRUD)能力,對計算機底層技術沒那么看重。
由于這些原因,很多程序員的基礎知識欠缺,在工作中涉及技術原理的時候就會發現不足。
隨著越來越多新人的加入,計算機軟件開發行業的競爭也越來越激烈,只靠CRUD技能很大程度上會限制程序員在技術領域的發展。而學習這些底層技術知識,修煉好程序員的內功,可以幫助我們知其然還能知其所以然。
舉個簡單的例子,如果不知道零拷貝技術和I/O多路復用技術底層的原理,就很難理解Nginx為什么能支持高并發。
由于我從事的是網絡安全方向的軟件研發工作,經常會與計算機底層技術打交道,如CPU、操作系統內核等,這些通常給人的印象就是艱深、晦澀。所以我就在想,我能不能試著用通俗易懂的方式去把這些晦澀的東西講清楚?
在2019年年底的時候,我注冊了一個微信公眾號:編程技術宇宙,開始嘗試用寫故事的方式去講述編程相關的技術知識。
剛開始的時候方向比較分散,沒有什么起色。后來我開始專注在計算機底層相關的方向上,收到不少好評,尤其是我的CPU系列故事,吸引了很多粉絲的追更,并在CSDN、博客園、知乎等平臺獲得多次精選推薦。
后來不知不覺就寫了一百多篇故事,幫助許許多多的讀者“解鎖”了原來一直感覺很艱深難懂的知識,對我而言也是很有成就感的一件事。
在這期間,還發生了一個讓我感動的小故事。
一位叫“未來永劫”的網友,由于非常喜歡我的這些用故事講解技術的文章,特地把公眾號里這幾個系列的文章打印出來裝訂成了一本“書”寄給了我。看著自己創作的內容變成手里沉甸甸的一本書,心里還是非常開心和激動的。那時候我就在想,要是以后真能寫一本書就好了。
果然,后來成都道然科技有限責任公司的姚新軍(@長頸鹿27)老師找到了我,對我的創作內容很認可,也給了我很多寫書方面的介紹和建議,我倆聊得很盡興,于是我決定在原來公眾號文章的基礎上,繼續創作更多計算機底層技術文章,匯集成大家手里拿到的這本書。
本書特色
這本書主要是用講故事的方式介紹計算機底層相關的技術,用通俗易懂的表達方式幫助大家學習底層技術。
故事的主人公可能是計算機里的一個程序、一個進程、一個線程、一個函數、一個數據包、一個文件等這樣的軟件角色,也可能是CPU、內存、網卡等這樣的硬件角色。
本書透過這些角色的視角去講述發生在計算機世界里的故事,幫助大家在故事中學習和了解計算機底層技術的工作原理。
整本書由幾十個故事構成,故事之間既有關聯性,讓你像“追劇”一樣學習技術,也有一定的獨立性,讓你隨時翻開一篇都能看下去。
本書主要涵蓋計算機中的CPU、存儲、I/O、操作系統、系統編程、安全六個主題,每個主題一章,你不必從頭到尾逐篇閱讀,完全可以挑選自己感興趣的任何章節開始閱讀。
讀者對象
這不是一本講述如何編程的書,也不是一本技術知識的工具書。如果你是沒有任何計算機知識背景的純小白,那建議先去學習一些基本課程后閱讀本書會更加合適。
如果你是一個程序員,懂一些編程知識,但希望學習一些計算機底層技術原理,去夯實自己的技術內功,那這本書很適合你。
如果你是一個學生,學了一些計算機基礎課程,但希望用另一種有趣的方式理解得更透徹,那這本書很適合你。
如果你是一個學生,未來想從事C/C++編程或者系統底層相關軟件開發,那這本書很適合你。
勘誤與支持
由于作者水平有限,書中難免會出現一些錯誤或不準確的地方,懇請廣大讀者朋友批評指正。
大家可以在我的微信公眾號“編程技術宇宙”后臺留言,我會認真回復并解答讀者提出的書中的問題。
致謝
感謝微信公眾號“編程技術宇宙”的讀者們,沒有你們的支持,就不會有這本書的誕生,是大家的一次次留言、轉發、點贊、打賞、催更讓我堅持了下來。還要感謝“未來永劫”這位網友,感謝你親手為我制作的“書”,給了當時的我很大的鼓舞。
感謝微信公眾號“帥地玩編程”的作者帥地,在我微信公眾號創作的道路上給了我很多支持,不僅幫助我擁有了最早的一批讀者,還教了我很多微信公眾號運營的知識。
感謝成都道然科技有限責任公司的姚新軍(@長頸鹿27)老師,在本書的萌芽、創作、后期等各個階段,姚老師都給我提供了很多建議和幫助,還安排插畫師對本書的全部插圖進行了統一繪制,省去了我很多操心勞神的事情,姚老師認真負責的工作態度讓我覺得他是非常可靠的合作伙伴。
最后要特別感謝我的愛人,在我開心的時候陪我開心,在我失落的時候給我加油。
我在公眾號創作的過程中,很多次想要放棄,但她總是給我加油和打氣,而且不厭其煩的幫助我分析文章閱讀低迷的原因,給我提出很多建議和努力的方向。在寫作這本書的過程中,我幾乎沒有時間陪伴她,但她不僅沒有怨言,還承擔了各種家務瑣事,烹飪各種美食,讓我可以安心的創作。除此之外,她還經常和我一起探討創作思路,并作為本書的第一個讀者,幫助我發現書稿中的錯誤,提出了很多修改意見。如果說創作一本書算是一點小小的成績,那這成績有一半都來自于她。
謹以此書獻給我的家人和一路關注我支持我的讀者朋友,希望所有喜歡計算機的朋友都能在書中收獲知識和快樂!
軒轅之風
內容簡介:

本書用一系列有趣的小故事講述計算機底層相關的技術知識。? 第1章:聚焦計算機中最核心的CPU,從最基礎的門電路開始,到基本的指令執行過程,最后到CPU的一些高級技術。內容涵蓋緩存、原子操作、指令流水線、分支預測、亂序執行、超線程、SIMD、 內存管理、TLB等。? 第2章:主要講述計算機中的存儲設施,包括CPU中的緩存,內存、機械硬盤三者數據存儲的原理,以及硬盤上的數據管理組織的軟件——文件系統基本模型。? 第3章:主要講述計算機中的I/O和數據傳輸。內容涵蓋總線系統、中斷機制、DMA技術、零拷貝技術。重點關注網卡相關的數據傳輸,包括網卡的基本工作機制,網卡接收數據包后的處理,最后介紹一種時下流行的數據包處理技術——DPDK。? 第4章:前面三章主要是在硬件層面,這一章開始介紹軟件。本章聚焦計算機中最重要的軟件——操作系統。本書默認以Linux為參考,內容涵蓋操作系統的一些基礎知識,包括進程、線程、系統調用、異常處理、信號、鎖、權限管理,最后介紹一個時下流行的容器技術Docker的原理。? 第5章:主要涉及系統編程中和操作系統緊密相關的一些技術點。包括進程的創建過程、線程棧、進程間通信、I/O多路復用、內存映射文件、協程,最后簡單介紹調試器GDB和可執行文件ELF。? 第6章:本章的主題是安全。網絡安全涉及方方面面,本章挑選了和計算機系統底層相關的一些安全技術,通過故事去感受計算機攻擊的原理,包含棧溢出攻擊、整數溢出攻擊、DDoS攻擊、TCP會話劫持、HTTPS原理,還有前幾年大火的CPU漏洞——熔斷與幽靈攻擊原理等。
目錄:

第1章 計算機的大腦:中央處理器CPU
1.1 CPU的細胞:門電路
1.1.1 邏輯門
1.1.2 加法器
1.1.3 算術邏輯單元ALU
1.2 程序的本質:指令
1.2.1 指令集
1.2.2 寄存器
1.2.3 匯編語言
1.2.4 高級語言
1.2.5 指令執行過程
1.3 像流水線一樣執行指令
1.3.1 指令流水線
1.3.2 流水線的級數
1.3.3 流水線里的冒險
1.4 CPU里的存儲設施:緩存
1.4.1 緩存
1.4.2 緩存行
1.4.3 指令緩存與數據緩存
1.5 多核緩存不一致引發的問題
1.5.1 原子操作
1.5.2 緩存引發的問題
1.5.3 緩存一致性協議MESI
1.6 指令還能亂序執行
1.6.1 數據冒險與流水線停頓
1.6.2 亂序執行
1.7 跳還是不跳,這是一個問題
1.7.1 靜態預測
1.7.2 動態預測
1.8 一條指令同時處理多個數據
1.8.1 一個簡單的循環
1.8.2 并行計算
1.8.3 一條指令處理多個數據
1.9 一個核同時執行兩個線程
1.9.1 資源閑置
1.9.2 超線程技術
1.10 CPU是如何管理內存的
1.10.1 8086
1.10.2 32位時代
1.10.3 虛擬內存
1.10.4 分頁交換
1.11 CPU地址翻譯的備忘錄
1.11.1 虛擬地址翻譯
1.11.2 地址翻譯緩存
1.11.3 翻譯后備緩沖區
1.12 GPU和CPU有什么區別
1.12.1 龐大的核心數量
1.12.2 GPU的SIMT與“超線程”
第2章 計算機中的存儲設施
2.1 緩存為什么比內存還快
2.2 內存條是如何存儲數據的
2.2.1 數據存儲
2.2.2 內存編址
2.3 多個CPU如何共同訪問內存
2.3.1 NUMA架構
2.3.2 操作系統支持
2.3.3 內存分配問題
2.4 機械硬盤存儲數據的原理
2.5 硬盤那么大,計算機如何管理
2.5.1 扇區和塊
2.5.2 塊位圖
2.5.3 inode
2.5.4 目錄
2.5.5 塊組、組描述符、超級塊
2.5.6 引導塊、分區DBR和MBR
第3章 數據的輸入與輸出
3.1 計算機中的高速公路
3.1.1 早期的總線系統
3.1.2 南橋與北橋
3.1.3 消失的北橋
3.2 其他設備如何與CPU通信
3.2.1 8259A可編程中斷控制器
3.2.2 APIC高級可編程中斷控制器
3.2.3 中斷親和性
3.3 計算機啟動的過程
3.3.1 開始執行
3.3.2 MBR
3.3.3 操作系統
3.4 CPU把數據搬運的工作“外包”出去
3.4.1 PIO模式
3.4.2 DMA技術
3.4.3 DMA全面開花
3.5 神奇的零拷貝技術
3.5.1 數據的四次拷貝
3.5.2 零拷貝技術
3.6 網卡是如何工作的
3.6.1 集線器時代
3.6.2 數據收發過程
3.6.3 交換機時代
3.7 網卡收到數據包后發生什么
3.7.1 數據幀校驗
3.7.2 DMA數據傳輸
3.7.3 軟中斷
3.7.4 輪詢收包
3.7.5 協議棧
3.8 繞過操作系統,直接收發數據包
3.8.1 萬兆流量需求
3.8.2 中斷問題
3.8.3 超快的抓包技術:DPDK
3.8.4 空轉問題
第4章 計算機的大管家:操作系統
4.1 一個控制程序的進化
4.1.1 多道程序處理
4.1.2 時間分片
4.1.3 狀態
4.1.4 優先級
4.1.5 多核時代
4.2 程序運行的實體:進程
4.2.1 進程地址空間
4.2.2 進程調度
4.2.3 進程與線程
4.3 CPU的執行流:線程
4.4 內核地址空間歷險記:系統調用
4.4.1 神秘的長者
4.4.2 系統調用
4.4.3 內核堆棧
4.5 當除數為0時,CPU發生了什么
4.5.1 中斷和異常
4.5.2 信號投遞
4.5.3 異常返回
4.6 發給進程的信號,到底去哪兒了
4.6.1 可靠信號與不可靠信號
4.6.2 信號的處理
4.6.3 多線程的信號處理
4.7 困住線程的鎖,到底是什么
4.7.1 原子操作
4.7.2 自旋鎖
4.7.3 互斥鎖
4.7.4 條件變量
4.7.5 信號量
4.8 Linux的權限管理
4.8.1 打開文件的過程
4.8.2 權限檢查
4.8.3 UGO與ACL檢查
4.8.4 Cgroup與SELinux的檢查
4.9 計算機中“楚門的世界”
4.9.1 隱藏文件系統:chroot與pivot_root
4.9.2 進程的隔離:命名空間
4.9.3 行為的限制:Cgroup
第5章 系統編程那些事兒
5.1 進程是如何誕生的
5.1.1 奇怪的fork
5.1.2 寫時拷貝
5.1.3 消失的線程們
5.2 線程的棧里都裝了什么
5.2.1 自動增長
5.2.2 內核棧
5.2.3 棧溢出
5.3 進程間如何通信
5.3.1 信號
5.3.2 socket套接字
5.3.3 匿名管道
5.3.4 消息隊列
5.3.5 共享內存
5.4 高性能基礎:I/O多路復用
5.4.1 select模型
5.4.2 poll模型
5.4.3 epoll模型
5.5 像訪問內存一樣讀寫文件
5.5.1 傳統文件讀寫
5.5.2 內存映射文件
5.6 線程里的多個執行流:協程
5.6.1 線程阻塞問題
5.6.2 多個執行流的“調度”
5.7 調試器是如何工作的
5.7.1 軟件斷點
5.7.2 單步調試
5.7.3 內存斷點
5.8 可執行文件ELF
5.8.1 格式識別
5.8.2 ELF文件格式
5.8.3 加載過程
第6章 計算機的攻擊與安全防護
6.1 TCP序列號的秘密
6.1.1 TCP初始化序列號是多少
6.1.2 Linux協議棧里的計數器
6.2 “猜出”TCP的序列號
6.2.1 神秘的TCP計數器
6.2.2 奇怪的TCP連接
6.2.3 基于計數器的側信道攻擊
6.3 危險的TCP SYN Flood
6.3.1 SYN洪水攻擊
6.3.2 安全防護:SYN Cookie
6.4 從HTTP到HTTPS的進化
6.4.1 第一版:直接簡單加密
6.4.2 第二版:非對稱加密
6.4.3 第三版:非對稱與對稱加密結合
6.4.4 第四版:密鑰計算
6.4.5 第五版:數字證書
6.4.6 第六版:信任鏈
6.5 線程棧里的秘密行動
6.5.1 棧溢出與Stack Canary
6.5.2 虛函數攻擊
6.6 CPU分支預測引發的危機
6.6.1 觸發分支預測
6.6.2 亂序執行與緩存引發的攻擊
6.6.3 KPTI內核頁表隔離
6.7 CPU中隱藏的秘密基地
6.7.1 神秘的SGX
6.7.2 CPU里的禁區
6.7.3 內存加密
6.8 躲在暗處的挖礦病毒
6.9 服務器被挖礦,Redis竟是內鬼
6.9.1 挖礦病毒的入侵
6.9.2 Redis持久化存儲“闖禍了”
6.10 整數+1引發的內核攻擊
6.10.1 IDT被誰篡改了?
6.10.2 有符號與無符號大有不同
6.10.3 整數+1的悲劇
6.11 從虛擬機中逃脫
6.11.1 虛擬化技術
6.11.2 虛擬機逃逸技術
序: