點擊藍色「程序員cxuan 」關注我喲git
加個「星標」,歡迎來撩程序員
計算機自從 20 世紀 40 年代誕生以來,一直以前所未有的進步向前發展,若是說農業革命是第一次革命、工業革命是第二次革命的話,那麼第三次革命就是 信息革命
。
web
計算機技術的進步幾乎影響着社會的方方面面,硬件的進步使得程序員能夠編寫出各類各樣優秀的應用軟件。也許不久的未來虛擬現實、無人駕駛、無現金支付就會成爲現實。編程
1設計模式
計算機分類 緩存
計算機從用途上來說主要分爲三種:服務器
-
我的計算機(Personal Computer)
,也稱爲 PC,這是人們最熟知的一種計算機,我的計算機強調用戶體驗,價格低廉,性價比高,我的計算機雖然出現時間很短,可是卻大大推進了計算機歷史的進程。
-
服務器(Server)
,服務器一般藉助網絡訪問,用於執行大負載任務,能夠處理複雜的應用,服務器相比我的計算機,有着更強的計算、存儲和 I/O 能力。發生故障時,服務器比我的計算機恢復代價高。微信服務器分爲兩種,一種用於處理簡單小型的 web 服務,沒有顯示器和鍵盤。而另一種是高端服務器,高端服務器一般稱爲超級計算機,通常由成千上萬臺處理器組成,內存很是大,同時價格也很是高。網絡
-
嵌入式計算機(embedded computer)
是數量最多的一類計算機,應用和性能十分普遍,通常應用於汽車、電視中的微處理器,飛機、火車、家用冰箱、洗衣機等,嵌入式計算機系統是由單一應用程序或者一組相關聯的應用程序組成,用戶一般意識不到本身正在使用計算機。app
技術的不斷髮展也讓計算機在不斷進步,對整個信息技術工業產生影響,自從我的計算機 PC 出現以來,計算機發展迅速,出現了一種我的移動設備(Personal Mobile Device, PMD)
,PMD 由鋰電池供電,經過無線的方式訪問網絡,價格低廉。PMD 再也不像 PC 同樣擁有顯示器和鼠標,做爲替代的是一塊觸摸屏,甚至支持語音輸入,PMD 的出現表明後 PC 時代的到來,而 PMD 將在將來生活中扮演更多角色。
雲計算(cloud computing)
替代了傳統的服務器,它依賴於一種倉儲規模計算機(Warehouse Scale Computer, WSC)
的巨型數據中心,好比 AWS ,Google 這樣的頂級科技公司,經過雲計算實現 軟件即服務(Software as a Service, Saas)
是軟件工業的使命。
2
八個偉大設計思想
計算機世界的快速發展,離不開幾個關鍵思想的影響,這些思想深入影響着計算機設計人員
使用抽象簡化設計
抽象真是一個牛逼的詞彙,提升硬件和軟件生產率的主要技術之一就是使用抽象(abstraction)
來表示不一樣的設計層次,對高層次隱藏內部的實現細節,使其只看到一個大體簡化版的模型。
摩爾定律
計算機設計者一個永恆的問題就是 摩爾定律(Moore's Law)
驅動的快速變化,它是由英特爾的創始人 摩爾
提出的,它的主要內容是:當價格不變時,集成電路上可容納的元器件的數目,約每隔 18 - 24 個月便會增長一倍,性能也將提高一倍,這必定律揭示了信息進步的速度。
經過並行提升性能
並行處理是計算機的一大進步,並行指的是計算機系統中能同時執行兩個或多個處理的一種計算方法,並行處理的主要目的是提升效率,縮短工做時間,可是會帶來更大的複雜性。
經過流水線提升性能
在計算機結構設計中,一個特殊的並行場景是使用流水線,流水線也是一種硬件並行的設計。你必定見過大型車間或者製造廠中的流水線工業設計。
加速大機率事件
加速大機率事件要比優化小几率事件更能提升性能,大機率事件一般比小几率事件簡單,大機率事件規則意味着設計者須要知道什麼事件是常常發生的。
經過預測提升性能
古人一般講一句話是 未雨綢繆
,代表要作一件事情須要提早作好準備,才能更好的完成工做。預測也是一種提早作好準備的思想,經過預測的方式提早開始某些操做,會比等到確切知道這些操做啓動時要快,經過另外一方面提升系統性能。
存儲器層次
存儲器層次我在以前的文章中屢次提到了,這是金字塔的層次設計模型,以下圖所示
在存儲器層次結構中,速度最快,容量最小的而且價格最昂貴的位於頂層,而速度最慢、容量最大並且價格便宜的位於底層。
經過冗餘提升可靠性
計算機不只要保證工做的速度、還要保證工做的可靠。因爲任何一個物理器件都有可能會失效,所以能夠經過使用冗餘部件的方式提升系統的可靠性(dependable)
,冗餘部件能夠替代失效部件而且能夠幫助其檢測錯誤。
3
計算機程序
一個應用程序可能由數千萬行代碼組成,咱們知道,計算機中的硬件只能提供最簡單的低級指令,從複雜的應用程序到簡單的指令須要通過軟件的幾個層次來逐步解釋和翻譯。下圖展現了軟件結構的幾個層次
最外層是應用軟件,最核心是硬件
,系統軟件(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 這樣的高級語言,也就是咱們開發所使用的語言,高級語言的出現,大大提升了編程效率,可是,萬變不離其宗,高級語言也要通過
這一個轉換過程。高級編程語言和編譯程序大大提升了軟件的生產率。
使用高級語言有如下幾個好處:
其一,可讓程序員使用更天然的語言來思考
其二,高級語言提升了程序員的生產率,加速程序的開發過程
其三,採用高級語言編寫程序提升了程序對於計算機的獨立性
4
硬件入門
看到這裏你可能會有疑問,爲何要學硬件呢?換個角度來說,憑什麼培訓三個月出來的程序員可以和科班學習四年的程序員一塊兒競爭找工做?想過這個問題沒有?
那是由於,培訓機構不會爲你的長遠考慮,短時間找到工做可以交差便可。把一個程序員的素養等價爲找到工做便可,這原本就是這個行業的污點所在,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 / 時鐘頻率
5
總結
本篇文章咱們主要介紹了 計算應用分類、計算機發展的八大思想、計算機結構層次、基本硬件入門,還有計算機通訊、處理器發展、性能的定義。
往期精彩回顧
本文分享自微信公衆號 - 程序員cxuan(cxuangoodjob)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。