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