[TOC]
1. 前言
1.1 為什么要學(xué)計(jì)算機(jī)系統(tǒng)要素?
隨著現(xiàn)代計(jì)算機(jī)技術(shù)的日趨復(fù)雜,計(jì)算機(jī)科學(xué)領(lǐng)域里面大多數(shù)基本思想和技術(shù)都被隱藏在眾多抽象接口以及私有實(shí)現(xiàn)的層面之下.
很多學(xué)生識(shí)木不識(shí)林,疲于埋頭學(xué)習(xí)程序設(shè)計(jì),失去了對(duì)計(jì)算機(jī)系統(tǒng)整體的把握和理解.
所以,需要對(duì)計(jì)算機(jī)系統(tǒng)有個(gè)大局觀(guān)
1.2 大局觀(guān)有什么用?
可以展示硬件系統(tǒng)和軟件系統(tǒng)如何經(jīng)由隱藏的抽象,接口以及基于各種約定的實(shí)現(xiàn)所編織起來(lái)的網(wǎng),從而緊緊地聯(lián)系在一起.
1.3 本書(shū)的結(jié)構(gòu):
每一層級(jí)都是通過(guò)其底一層所提供的抽象服務(wù)和構(gòu)建塊來(lái)實(shí)現(xiàn).
一本書(shū)TCP/IP Guide里面介紹網(wǎng)絡(luò)的設(shè)計(jì)也是一層層不斷抽象而上的.
2. 介紹:Hello,World Below
真正的發(fā)現(xiàn)之旅不在于去新的地方,而在于擁有一雙新的眼睛.---Marcel Proust
2.1 能學(xué)到什么?
- 1.計(jì)算機(jī)如何工作
- 2.如何將復(fù)雜問(wèn)題分解為易于管理的模塊
- 3.如何開(kāi)發(fā)大規(guī)模硬件和軟件系統(tǒng)
2.2 怎么學(xué)?
通過(guò)實(shí)踐,從零開(kāi)始構(gòu)建一個(gè)完整的,工作的計(jì)算機(jī)系統(tǒng).
2.3 為什么要這樣學(xué)?
唯一能夠顯著影響行為的學(xué)習(xí)就是自我發(fā)現(xiàn)或自我適應(yīng)---真理汲取自經(jīng)歷體驗(yàn).--- Carl Rogers
2.4 上面的世界
hello world這樣的小程序是怎么才能在計(jì)算機(jī)中運(yùn)行的呢?
對(duì)底層世界的深刻理解也是區(qū)分普通程序員和高級(jí)開(kāi)發(fā)者(軟硬都行)的標(biāo)準(zhǔn).
2.5 抽象:
1 如何解決這么復(fù)雜的任務(wù)(邏輯門(mén)到完整的計(jì)算機(jī))?
將整個(gè)項(xiàng)目劃分為許多個(gè)模塊(module),然后分次單獨(dú)處理
2 什么是好的模塊化設(shè)計(jì)?
可以單獨(dú)處理每個(gè)模塊,而完全不管系統(tǒng)的其他部分.
3 為什么可以這樣設(shè)計(jì)?
人類(lèi)獨(dú)有的天賦:我們所擁有的建立和使用抽象概念(abstractions)的能力.
4 什么是抽象?
一般所謂抽象概念
是作為表達(dá)思想的方式,將事物本質(zhì)性的東西從思維上獨(dú)立出來(lái),以求用概況的方式來(lái)把握事物.計(jì)算機(jī)科學(xué)里的抽象
定義得比較非常具體
認(rèn)為它是關(guān)于"事物要做什么"的概念,而不用考慮"如何來(lái)做".
這種功能性定義必須包含足夠的信息以便使用該事物能夠提供的服務(wù).事物在實(shí)現(xiàn)中的所有內(nèi)容(包括技巧,內(nèi)部信息,精妙之處等),都對(duì)要使用該事物的客戶(hù)隱藏起來(lái),因?yàn)檫@些與客戶(hù)并沒(méi)有關(guān)系.
硬件和軟件開(kāi)發(fā)者都會(huì)定義抽象(也稱(chēng)為接口,interfaces),然后進(jìn)行實(shí)現(xiàn)或留給其他人來(lái)實(shí)現(xiàn).
抽象通常是分層構(gòu)建(一層構(gòu)建在另一層之上),從而形成了越來(lái)越高層級(jí)的抽象能力.
2.6 下面的世界
2種描述形式
- top-down
展示高級(jí)抽象如何被簡(jiǎn)化或表示成較簡(jiǎn)單抽象. - bottom-up
展示底層抽象如何構(gòu)建更復(fù)雜的抽象
本書(shū)采用bottom-up.從邏輯門(mén)到計(jì)算機(jī).
2.7 概覽本書(shū)結(jié)構(gòu):
1.高級(jí)語(yǔ)言的領(lǐng)地:
最高級(jí)的抽象就是程序設(shè)計(jì)藝術(shù).
2.向下通往硬件領(lǐng)地之路:
任何程序在實(shí)際運(yùn)行之前,首先必須被翻譯成某種目標(biāo)計(jì)算機(jī)平臺(tái)的機(jī)器語(yǔ)言.
這個(gè)編譯(compilation)過(guò)程十分復(fù)雜.于是繼續(xù)被劃分成若干個(gè)抽象層級(jí).
這些抽象層包含三種翻譯器:
- 編譯器
- 虛擬機(jī)
- 匯編編譯器