本書以圖解的方式通俗易懂的講解計算機系統(tǒng)中各項技術(shù)的本質(zhì),包括編程語言的本質(zhì)是什么、操作系統(tǒng)、進程線程協(xié)程等的本質(zhì)是什么、到底什么是內(nèi)存、什么是堆區(qū)棧區(qū)、內(nèi)存分配等是怎么一回事、怎樣從晶體管構(gòu)建出CPU、I/O是如何實現(xiàn)的等等,從根源出發(fā),一步步講解一項技術(shù)到底是怎么來的,同時內(nèi)容可視化——輔助大量精心設(shè)計的插圖,幾乎做到了平均一頁有一圖,把對技術(shù)的理解門檻降到最低。
從根源出發(fā),探索計算機系統(tǒng)賦予程序員的超能力
像高手那樣,對每一行代碼產(chǎn)生的影響了如指掌
遇到棘手問題時不再束手無策,直擊本質(zhì),瞬間化解
發(fā)現(xiàn)CPU、內(nèi)存、程序運行、Cache、I/O背后的奧秘
341幅精心設(shè)計的插圖幫你越讀越輕松
前言
本書源自筆者的兩個疑問:我的代碼看上去能正常運行,可這是為什么呢?計算機在執(zhí)行我寫的代碼時在底層發(fā)生了什么?
現(xiàn)代計算機系統(tǒng)的結(jié)構(gòu)就像一個漢堡包一樣,實際上是被層層抽象過的,程序員在最上層用高級語言編寫代碼時根本不用關(guān)心底層細節(jié),這極大地提高了開發(fā)效率,但有時遇到一些較為棘手的問題,很多人往往束手無策,這其中大部分情況是因為對底層了解不夠而導(dǎo)致的,我們有時甚至都不能理解產(chǎn)生的問題本身,更何談解決問題呢?
這些看上去很難解決的問題在那些編程高手眼里往往不值一提,他們幾乎能脫口而出直指本質(zhì),你一兩天都搞不定的問題在這些編程高手那里可能會被瞬間解決掉,因為他們對自己寫下的每一行代碼到底會對計算機系統(tǒng)產(chǎn)生什么樣的影響了如指掌,如他們非常清楚地知道分配一塊內(nèi)存在底層發(fā)生的一系列故事等。英文中有一個詞很形象—— mental model (心智模型),本書更多地為你揭示那些編程高手的心智模型和計算機系統(tǒng) 底層的奧秘。
在講解方式上,首先筆者認為內(nèi)容可視化非常重要,一圖抵千言,因此本書中有多達341張圖,以圖解的方式來講解所涉及的內(nèi)容;其次內(nèi)容的可讀性也很重要,本書會 以通俗易懂的方式從概念的起源開始講解,不僅告訴你是什么、為什么,還會告訴你這是怎么來的,把對內(nèi)容閱讀理解的門檻降到最低。
當(dāng)然,除了上述較為“功利”的目的,筆者認為有趣的東西還是值得了解一下的,計算機系統(tǒng)其實就是這樣一個很有趣的東西,如果你不這么認為的話,那么很可能是你 還不夠了解它。計算機系統(tǒng)中的許多設(shè)計是如此的有趣,即便是出于好奇,也應(yīng)該去了 解一下,就像 Linus 所說的那樣——Just for fun !
本書配套資料
一款操作系統(tǒng)發(fā)布后往往需要打補丁、定時升級,而一本書的出版往往與之類似,由于筆者能力有限,因此在本書出版后可能也需要打補丁,在微信公眾號“碼農(nóng)的荒島求生”后臺回復(fù)“補丁”二字可獲取筆者關(guān)于本書相關(guān)話題的擴展內(nèi)容,相信這些內(nèi)容 可以更好地幫助讀者理解本書。
路線圖
本書分為6章:
● 第1章關(guān)注編程語言,重點闡述到底什么是編程語言、編譯器的工作原理,以及如何從代碼生成最終的可執(zhí)行程序。
● 第2章重點講解程序運行起來后,也就是運行時的奧秘,包括程序到底是以什么樣的形式運行起來的,操作系統(tǒng)、進程、線程、協(xié)程到底是什么,我們?yōu)槭裁葱枰私膺@些概念,回調(diào)函數(shù)、同步、異步、阻塞、非阻塞又是怎么一回事,這些又能賦予程序員什么樣的能力等。
● 第3章將帶你認識內(nèi)存。程序的運行離不開內(nèi)存,因此我們要了解內(nèi)存的本質(zhì)是什么,到底什么是指針,為什么會有堆區(qū)、棧區(qū),函數(shù)調(diào)用的實現(xiàn)原理是什么,申請內(nèi)存時底層到底發(fā)生了什么,該怎樣實現(xiàn)一個自己的malloc內(nèi)存分配器等。
● 第4章介紹計算機系統(tǒng)中最重要的CPU,CPU的實現(xiàn)原理是什么,怎樣一步步打造出CPU,CPU是如何認識數(shù)字的,CPU空閑時在干什么,以及CPU是如何演變進化的,為什么會出現(xiàn)復(fù)雜指令集及精簡指令集,如何利用CPU與棧的組合實現(xiàn)函數(shù)調(diào)用、中斷處理、線程切換及系統(tǒng)調(diào)用等機制。
● 第5章講解計算機系統(tǒng)中的cache,為什么需要cache,以及程序員該如何編 寫出對cache 友好的代碼。
● 第6章關(guān)注I/O,計算機系統(tǒng)是如何實現(xiàn)I/O的,程序員調(diào)用read函數(shù)時在底層是如何一步步讀取到文件內(nèi)容的,程序員該如何高效處理I/O等。
勘誤
由于筆者水平有限,書中難免會有疏漏之處,懇請廣大讀者批評指正。
在微信公眾號“碼農(nóng)的荒島求生”底部菜單欄中有一項關(guān)于本書勘誤的菜單入口,讀者可通過此渠道查看本書的bug或者反饋問題。
致謝
首先感謝微信公眾號“碼農(nóng)的荒島求生”的忠實讀者,是你們讓我一直堅持到現(xiàn)在,是你們讓我能感受到自己做的事情是有價值的,是你們讓本書出版成為可能。
其次特別感謝我的愛人,是你的鼓勵讓我踏上了寫作之路,在此之前我從沒想過自己此生會與寫作有什么關(guān)聯(lián),是你讓我發(fā)現(xiàn)了全新的自己,這無異于重生。
最后感謝我的父母,是你們的辛苦付出讓我遠離生活瑣事!爱(dāng)你輕裝上陣時必定 有人為你負重前行”,我無以為報,謹將此書獻給你們。
陸小風(fēng)(@碼農(nóng)的荒島求生),碩士畢業(yè)于北京航空航天大學(xué)計算機學(xué)院,先后就職于VMware和京東,具有多年軟件系統(tǒng)研發(fā)經(jīng)驗,擅長用通俗易懂的語言講解計算機技術(shù)。