計算機極簡發展史

程序員cxuan 發佈 2020-07-30T22:59:42+00:00

PMD 不再像 PC 一樣擁有顯示器和滑鼠,作為替代的是一塊觸摸屏,甚至支持語音輸入,PMD 的出現代表後 PC 時代的到來,而 PMD 將在未來生活中扮演更多角色。所以我們可以使用 CPU 時間 = 指令數 * CPI * 時鐘周期時間。

計算機自從 20 世紀 40 年代誕生以來,一直以史無前例的進步向前發展,如果說農業革命是第一次革命、工業革命是第二次革命的話,那麼第三次革命就是 信息革命。

計算機技術的進步幾乎影響著社會的方方面面,硬體的進步使得程式設計師可以編寫出各種各樣優秀的應用軟體。也許不久的將來虛擬現實、無人駕駛、無現金支付就會成為現實。

計算應用分類

計算機從用途上來講主要分為三種:

  • 個人計算機(Personal Computer),也稱為 PC,這是人們最熟知的一種計算機,個人計算機強調用戶體驗,價格低廉,性價比高,個人計算機雖然出現時間很短,但是卻大大推動了計算機歷史的進程。
  • 伺服器(Server),伺服器通常藉助網絡訪問,用於執行大負載任務,可以處理複雜的應用,伺服器相比個人計算機,有著更強的計算、存儲和 I/O 能力。發生故障時,伺服器比個人計算機恢復代價高。伺服器分為兩種,一種用於處理簡單小型的 web 服務,沒有顯示器和鍵盤。而另外一種是高端伺服器,高端伺服器通常稱為超級計算機,一般由成千上萬台處理器組成,內存非常大,同時價格也非常高。
  • 嵌入式計算機(embedded computer) 是數量最多的一類計算機,應用和性能十分廣泛,一般應用於汽車、電視中的微處理器,飛機、火車、家用冰箱、洗衣機等,嵌入式計算機系統是由單一應用程式或者一組相關聯的應用程式組成,用戶通常意識不到自己正在使用計算機。

技術的不斷發展也讓計算機在不斷進步,對整個信息技術工業產生影響,自從個人計算機 PC 出現以來,計算機發展迅速,出現了一種個人移動設備(Personal Mobile Device, PMD),PMD 由鋰電池供電,通過無線的方式訪問網絡,價格低廉。PMD 不再像 PC 一樣擁有顯示器和滑鼠,作為替代的是一塊觸摸屏,甚至支持語音輸入,PMD 的出現代表後 PC 時代的到來,而 PMD 將在未來生活中扮演更多角色。

雲計算(cloud computing) 替代了傳統的伺服器,它依賴於一種倉儲規模計算機(Warehouse Scale Computer, WSC) 的巨型數據中心,比如 AWS ,Google 這樣的頂級科技公司,通過雲計算實現 軟體即服務(Software as a Service, Saas) 是軟體工業的使命。

八個偉大思想

計算機世界的快速發展,離不開幾個關鍵思想的影響,這些思想深刻影響著計算機設計人員

使用抽象簡化設計

抽象真是一個牛逼的詞彙,提高硬體和軟體生產率的主要技術之一就是使用抽象(abstraction)來表示不同的設計層次,對高層次隱藏內部的實現細節,使其只看到一個大致簡化版的模型。

摩爾定律

計算機設計者一個永恆的問題就是 摩爾定律(Moore's Law) 驅動的快速變化,它是由英特爾的創始人 摩爾 提出的,它的主要內容是:當價格不變時,集成電路上可容納的元器件的數目,約每隔 18 - 24 個月便會增加一倍,性能也將提升一倍,這一定律揭示了信息進步的速度。

通過並行提高性能

並行處理是計算機的一大進步,並行指的是計算機系統中能同時執行兩個或多個處理的一種計算方法,並行處理的主要目的是提高效率,縮短工作時間,但是會帶來更大的複雜性。

通過流水線提高性能

在計算機結構設計中,一個特殊的並行場景是使用流水線,流水線也是一種硬體並行的設計。你一定見過大型車間或者製造廠中的流水線工業設計。

加速大機率事件

加速大機率事件要比優化小機率事件更能提高性能,大機率事件通常比小機率事件簡單,大機率事件規則意味著設計者需要知道什麼事件是經常發生的。

通過預測提高性能

古人通常講一句話是 未雨綢繆,表明要做一件事情需要提前做好準備,才能更好的完成工作。預測也是一種提前做好準備的思想,通過預測的方式提前開始某些操作,會比等到確切知道這些操作啟動時要快,通過另一方面提高系統性能。

存儲器層次

存儲器層次我在之前的文章中多次提到了,這是金字塔的層次設計模型,如下圖所示



在存儲器層次結構中,速度最快,容量最小的並且價格最昂貴的位於頂層,而速度最慢、容量最大而且價格便宜的位於底層。

通過冗餘提高可靠性

計算機不僅要保證工作的速度、還要保證工作的可靠。由於任何一個物理器件都有可能會失效,因此可以通過使用冗餘部件的方式提高系統的可靠性(dependable),冗餘部件可以替代失效部件並且可以幫助其檢測錯誤。

電腦程式

一個應用程式可能由數千萬行代碼組成,我們知道,計算機中的硬體只能提供最簡單的低級指令,從複雜的應用程式到簡單的指令需要經過軟體的幾個層次來逐步解釋和翻譯。下圖展示了軟體結構的幾個層次


最外層是應用軟體,最核心是硬體 ,系統軟體(systems software)位於兩者之間。

系統軟體:通常提供服務性質的軟體,包括作業系統、編譯程序等。

作業系統和編譯程序是對於所有計算機來說都是必須的,這兩個系統軟體是非常重要的,作業系統是計算機硬體和軟體之間的接口;為用戶提供各種調用和協調服務,作業系統主要的功能如下

  • 處理用戶輸入和輸出
  • 協調內存和 CPU
  • 為各種應用軟體提供服務

而編譯程序是完成另一項重要功能的程序:它把高級語言例如 C、Java、C++ 編寫的程序翻譯成為機器指令,這個翻譯過程是非常複雜的。

編譯程序

在計算機世界中,它能識別的只有兩個信號:0 和 1,所以我們認為計算機只能識別二進位數。每個字母就代表計算機中的二進位位(binary digit) 或者 一位(bit)。八個二進位位成為一個字節(byte),字節是最小的尋址單元,一連串的二進位位構成了計算機術語中的 指令(instruction),即 01010101110110 等等。。。。。。

第一代程式設計師是直接使用二進位數與計算機通信的,這是一項非常乏味的工作,所以為了改善這種枯燥無聊的編寫方式,程式設計師很快發明了助記符,最初助記符是通過手工翻譯成為二進位的,這種轉換過程過於浮躁無聊和繁瑣,為了改善這種情況,程式設計師發明了一種 彙編程序(assembler) 的軟體,可以將助記符自動轉換為對應的二進位。比如我們使用助記符 add A,B ,這段代碼就會自動的被二進位 0101011011。該指令告訴計算機將使用 A 和 B 進行相加操作。這種助記符使用的語言就是彙編語言(assembly language)。而機器可以理解的二進位語言稱為 機器語言(machine language)。

  • 彙編程序:將指令由助記符形式翻譯成二進位形式的程序
  • 彙編語言:以助記符形式表示的語言
  • 機器語言:以二進位元形式表示的機器指令

然而,隨著時代的發展,彙編語言也慢慢面的枯燥乏味,所以出現了像是 C、Java 這樣的高級語言,也就是我們開發所使用的語言,高級語言的出現,大大提高了編程效率,但是,萬變不離其宗,高級語言也要經過

這一個轉換過程。高級程式語言和編譯程序大大提高了軟體的生產率。

使用高級語言有以下幾個好處:

其一,可以讓程式設計師使用更自然的語言來思考

其二,高級語言提高了程式設計師的生產率,加速程序的開發過程

其三,採用高級語言編寫程序提高了程序對於計算機的獨立性

硬體入門

看到這裡你可能會有疑問,為什麼要學硬體呢?換個角度來講,憑什麼培訓三個月出來的程式設計師能夠和科班學習四年的程式設計師一起競爭找工作?想過這個問題沒有?

那是因為,培訓機構不會為你的長遠考慮,短期找到工作能夠交差即可。把一個程式設計師的素養等價為找到工作即可,這本來就是這個行業的污點所在,CRUD 程式設計師不需要專業的程序素養,完成工作即可。為什麼程序總有填不完的坑,不考慮程序健壯性、可拓展性、設計模式,寫代碼只為了自己,而不是以工程化的標準來要求自己就是培訓班和科班的素養和差距。這也是我為什麼最近在研究計算機基礎的原因,因為我不夠有素質。

為什麼學硬體?就是能夠讓你從計算機的角度思考問題。好了不多說了,說多了該被培訓班 diss 了。

任何一台計算機的基礎硬體都需要完成最基本的功能:輸入數據、輸出數據、處理數據、存儲數據。我們討論的主題就是描述這些功能是怎樣完成的。

下面我們就要探討一下這些硬體

顯示器

顯示器是一個非常吸引人的輸出設備,大多數個人移動設備都用 液晶顯示(Liquid Crystal Display, LCD) 來獲得輕巧、低功耗的顯示效果。LCD 能夠控制光的傳輸。今天,大多數 LCD 顯示器都採用 動態矩陣顯示(active matrix display) 技術,其每個像素(pixel) 都由一個電晶體精確的控制電流,從而使圖像更加清晰。在彩色動態矩陣 LCD 中,還有一個 紅 - 綠 - 藍屏決定三種顏色分量的強度,每個點需要三個電晶體開關。

  • 液晶顯示,這是一種顯示技術,用液體聚合物薄層的帶電或者不帶電來傳輸或者阻止光線的傳輸
  • 動態矩陣顯示,一種液態顯示技術,使用電晶體控制單個像素上光線的傳輸
  • 像素,圖像元素的最小單位,螢幕由成千上萬的像素來組成

圖像由像素矩陣組成,可以表示成二進位位的矩陣,稱為 位圖(bit map)。不同解析度所能夠支持的矩陣大小不同,彩色顯示器使用 8 位來表示每個三原色(紅、綠和藍),每個像素用 24 位表示,可以顯示百萬種不同的顏色。

計算機硬體使用光柵刷新緩衝區(又稱為幀緩衝區)來保存位圖以支持圖像。

圖中的 X0 Y0 ,X1 Y1 都表示像素

觸摸屏

後 PC 時代,移動設備的高速發展,使觸摸屏成為一種趨勢,觸摸屏有兩種實現

電阻式觸摸屏(Resistive touchscreens):電阻式觸摸屏基於施加到螢幕上的壓力來工作。 電阻屏由許多層組成。 當按下螢幕時,外部的後面板將被推到下一層,下一層會感覺到施加了壓力並記錄了輸入。 電阻式觸摸屏用途廣泛,可以用手指,指甲,手寫筆或任何其他物體進行操作。

電容式觸摸屏(capacitive touchscreen):電容式觸摸屏通過感應物體(通常是指尖上的皮膚)的導電特性來工作。 手機或智慧型手機上的電容屏通常具有玻璃表面,並且不依賴壓力。 當涉及到手勢(如滑動和捏合)時,它比電阻式螢幕更具響應性。 電容式觸摸屏只能用手指觸摸,而不能用普通的手寫筆,手套或大多數其他物體來響應。

機箱

下面是一個 ipad2 的剖面圖



這裡面包括集成電路,也稱為晶片(chip)、CPU、前置攝像頭、後置攝像頭、麥克風、耳機插孔、揚聲器、加速計、陀螺儀、Wi-Fi 網絡和藍牙網絡等。

為了進一步理解硬體,下面展示了一款蘋果 A5 微處理器的實現細節,處理器從邏輯上包括兩個主要部件:數據通路和控制器

數據通路主要用來執行算數運算

控制器主要負責指導數據通路、存儲器和 I/O 設備按照正確的指令進行執行

除此之外,上述剖面圖還包括 GPIO,通用型之輸入輸出的簡稱。

DDR SDRM 接口是內存條接口,通過提供多個隔行掃描的內存訪問,從而提高內存帶寬

內存是程序運行的存儲空間,它同時用於保存程序運行時所使用的數據,內存由 DRAM 晶片組成。DRAM(Dynamic random access memory) 是動態隨機訪問存儲器的縮寫。在處理器內部使用的是另外一種存儲器 - 緩存(cache memory) ,這是一種小而快的存儲器,一般作為 DRAM 的緩衝。cache 使用的是 靜態訪問存儲器(Static Random Access Memory, SRAM) ,它的速度要比 DRAM 更快,價格也更加昂貴。

我們上面探討了影響計算機的幾大設計思想,其中非常重要的一個思想就是 抽象,計算機硬體和軟體的接口就是一種抽象,這種抽象又被叫做 指令集體系結構(instruction set architecture) ,或者簡稱為 體系結構(architecture)。提供給應用程式員基本指令集和作業系統接口稱為 應用二進位接口(Application Binary Interface)。

這種抽象的好處是讓程式設計師能夠單獨的實現應用程式,而不用考慮其內部的硬體,內部硬體和系統應用程式只提供對用戶的服務。對程式設計師隱藏內部實現細節。

與其他計算機通信

上面我們已經基本介紹到了輸入、輸出、控制器、存儲器,但是對於計算機,還有一項非常重要的功能我們沒有介紹 - 計算機網絡,通過計算機聯網,可以實現與其他計算機通信,任何計算機都不能成為信息的 孤島,計算機通信能為我們帶來下面這些好處

  • 信息交互:在聯網的兩台計算機之間實現信息交互
  • 資源共享:有些 I/O 設備可以由網絡上的計算機共享
  • 遠距離訪問:用戶可以通過遠距離操作計算機

隨著傳輸速度以及通信傳輸的距離,通信代價也在隨之增長,網絡的傳輸是多種多樣的,最常見的就是 乙太網,乙太網是一種連接區域網的傳統技術,它能夠使設備通過協議(一組規則或通用網絡語言)相互通信,乙太網的接入設備可以相互識別對方,乙太網中的一個例子就是 區域網(Local Area Network, LAN) ,區域網通過交換機進行組網。還有一種距離更遠的網絡是 廣域網,廣域網可支持全球資訊網(World Wide Web)。

  • 區域網:一種在一定的地理區域使用的傳輸數據的網絡
  • 廣域網:一種可將區域擴展到幾百幾千米範圍的網絡

隨著計算機的不斷發展,通信速度和性能也在不斷提升。

處理器和存儲器製造技術

處理器和存儲器在高速發展,計算機最初使用的是電晶體,然後後面慢慢出現了集成電路、超大規模集成電路。下表展示了這個演變過程

時間計算機構造1951真空管1965電晶體1975集成電路1995超大規模集成電路2013更大規模集成電路

電晶體(transistor)是一種固體半導體器件,具有多種功能。電晶體作為一種可變電流開關,能夠基於輸入電壓控制輸出電流。集成電路(IC) 由成千上萬的電晶體組成。後面不斷的發展為更多電晶體組成的 超大規模集成電路(VLSL)。

性能

計算機的性能是很難評判的,我們將從以下幾個方便來展開探討

性能的定義

個人計算機用戶比較感興趣的就是 響應時間(response time),響應時間就是指一個任務從開始到完成所需要的時間,又稱為執行時間。而數據中心感興趣的常常是 吞吐率(throughput)。

  • 響應時間:也叫執行時間(execution time),是計算機完成某項任務所需要的總時間,包括硬碟訪問、內存訪問、I/O 活動、作業系統開銷和 CPU 的執行時間等。
  • 吞吐率:也叫 帶寬(bandwidth),性能的另一種度量參數,表示單位時間內完成的任務數量。

性能的度量

如果使用時間來度量計算機,那麼完成同樣的任務,需要時間最少的計算機是最快的。程序的執行時間一般以秒為單位。我們可以使用 CPU 執行時間 來表示在 CPU 上花費的時間,而不包括其他 I/O 或應用程式的時間。CPU 時間可以進一步分為用於用戶程序的時間和作業系統為用戶服務花去的 CPU 時間,前者稱為 CPU 時間,後者稱為系統 CPU 時間。

  • CPU 執行時間:簡稱 CPU 時間,執行某一任務在 CPU 上花費的時間
  • 用戶 CPU 時間:為用戶服務所花費的時間
  • 系統 CPU 時間:為執行程序花費在作業系統上的時間。

為了一致性,我們使用 CPU 性能表示用戶 CPU 時間,用系統性能表示系統空運行的響應時間。

幾乎所有的計算機都會使用時鐘來驅動硬體中的各種事件。時鐘間隔的時間稱為 時鐘周期(clock cycle)。也可以用它的倒數來描述,稱為 時鐘頻率(clock rate)。

CPU 性能及其因素

我們一般使用下面的公式來表示 CPU 的性能

CPU 執行程序的時間 = 程序 CPU 時鐘周期數 * 時鐘周期時間

由於時鐘頻率和時鐘周期互為倒數的關係,所以也可以用

CPU 執行程序的時間 = 程序 CPU 時鐘周期數 / 時鐘頻率

有了公式後,我們可以對各個指標進行描述,在時鐘周期時間內,程序 CPU 時鐘周期數越低,CPU 性能越高。在周期數相同的情況下,時鐘頻率越高,CPU 性能越高。

指令的性能

CPU 最終是要執行指令的,一個考慮指令執行時間的方法是:執行時間等於執行的指令 * 每條指令的平均時間。所以,一個程序需要的時鐘周期數為

CPU 時鐘周期數 = 程序指令數 * 每條指令的平均執行周期

我們一般使用 CPI(clock cycle per instruction) 表示執行每條指令所需的時鐘周期的平均值。不同指令執行的周期可能不同,所以 CPI 表示的是一個平均值。

所以我們可以使用 CPU 時間 = 指令數 * CPI * 時鐘周期時間

或者 CPU 時間 = 指令數 * CPI / 時鐘頻率

總結

本篇文章我們主要介紹了 計算應用分類、計算機發展的八大思想、計算機結構層次、基本硬體入門,還有計算機通信、處理器發展、性能的定義。

大家好,我是 cxuan,我自己手寫了四本 PDF,分別是 Java基礎總結、HTTP 核心總結、計算機基礎知識,作業系統核心總結,我已經整理成為 PDF,可以關注公眾號 Java建設者 回復 PDF 領取優質資料。

關鍵字: