計算機專業課系列之一:漫談計算機組成原理和編程語言

一,馮諾伊曼結構的計算機
1,計算機的五大組成部分
 運算器 + 控制器(CPU),存儲器(內存+硬盤),輸出設備(顯示器),輸入設備(鼠標和鍵盤)。
2,數據和指令以二進制形式,不加區別的存放在存儲器中。
數據和指令存儲在一塊,存儲在一個存儲器中是風諾伊曼結構的重要標誌java

3,馮諾伊曼結構的計算機的工做原理
編程

內存是一個線性結構,而且內存是有地址的。注意數據和指令是不分的,他們都在一個內存中。緩存

好比,如今要把100和200加起來,那麼計算機是如何工做的呢?網絡

第一條指令:MOVE [1000]  EAX ,表示把地址爲1000處的數據放到寄存器中(EAX)多線程

第二條指令:MOVE [1004]  EAX ,表示把地址爲1004處的數據放到寄存器中(EBX)併發

cpu先執行第一條指令,把100放到寄存器中。而後再執行第二條指令,把200放到寄存器中。異步

第三條指令:ADD  EAX EBX編程語言

最後cpu執行第三條指令,把兩個寄存器中的值加起來,放到EBX中。操作系統

4,計算機各個部件是怎麼鏈接起來的?線程

 

南橋--北橋:上面的I/O橋就是對南橋和北橋的抽象

5,指令和流水線

5.1,指令分爲:

單操做數指令,好比加1操做

兩個操做數指令,好比 MOV [1000] AX

三個操做數指令,很是少

 

5.2,cpu執行指令是按照流水線的思想來執行的。cpu的一條指令在執行中分爲不少步驟。以三步爲例:

取指令:從內存中把指令取出來

譯碼:看看這條指令是作什麼的

執行:執行指令

cpu爲了作這三件事,分爲三個部件。一個部件負責取指令,一個部件負責譯碼,一個部件負責執行指令。

 

因此在執行其中一個步驟時,其餘兩個步驟也沒有閒着,能夠作本身對應的操做。這樣大大提升了cpu的效率。

好比第一條指令執行到 執行這個步驟時,cpu還能夠執行第二條指令的譯碼工做。

5.3,速度對比

內存訪問速度比cpu執行速度慢幾百倍,傳統磁盤IO訪問速度比cpu執行速度慢幾十萬倍。網絡比cpu慢千萬倍。速度不匹配問題是計算機的核心問題。

 

6,如何解決速度不匹配問題?

方案一:提高硬盤等設備的速度,和cpu匹配  ----  現階段不可能

方案二:認可侷限,但充分壓榨cpu的能力。思路以下:

  同步 ---->異步

  順序 ---->併發

  增長中間層(緩存)

 

6.1,異步實例

 

 

6.2,順序和併發

順序:一個時間只能執行一個程序。

併發:經過時間片分配的形式,把cpu分爲若干個時間片,讓多個程序在一個cpu上分時運行。操做系統負責切換。切換時間片的時間很是短,形成程序併發執行的假象。(這裏假定只有一個cpu,多個程序在一個cpu上輪換執行)。

注意:這裏是併發,只有一個cpu。因爲時間片很是短,看起來是同時執行的。若是有多個cpu,那就是並行了。

 

併發的實現:時間片的切換

 

補充:並行

對於多核cpu,多核是每一個核都對應一個線程,因此多核就能夠同時執行多個線程。那麼並行是真的有多個指令在同時執行了。

程序中的一行代碼,編譯成彙編語言可能就有多條指令了,好比 i = i+1 ;執行的時候會有多條指令,這多條指令若是在多線程狀況下沒有協調好,執行時可能就會出錯。

 

 6.3,增長中間層--緩存

時間局部性原理 和 空間局部性原理

 

解決了速度不匹配的問題。

cpu有一級緩存,二級緩存,三級緩存。從緩存中讀取比從內存中讀取快的多。

 

7,存儲器的層次結構

 

二,編程語言

1.解釋和編譯

解釋執行:

  解釋器讀入高級語言寫的指令,而後解釋執行。好比:Basic

編譯:

  使用編譯器把高級語言編程目標代碼,或者是可執行的程序。好比:C語言,C++

2.虛擬機:解釋和編譯的混合

Java編譯器先把java編譯成 .class 文件。而後在各個JVM上解釋執行。JVM在每一個平臺都有版本。因爲28原則的存在,若是JVM發現這個 .class文件常常執行,就編譯成本地平臺的代碼。

3.靜態和動態語言

動態語言比較靈活,可是編譯器沒法檢查。小項目適合快速開發

4.程序的基本邏輯結構

 這三種結構理論上能夠表達一切計算機程序。

 5.編譯- 把高級語言變成低級語言

例子:pasic語言代碼

第一步:詞法分析

第二步:語法分析

 

第三步:語義分析

 

第四步:代碼生成

 

 7,遞歸

左邊是迭代的代碼,右邊是遞歸

理解:

 

改進:尾遞歸

相關文章
相關標籤/搜索