計算機結構

7.1 馮·諾依曼結構

7.1.1 馮·諾依曼結構的組成部分

1)輸入、輸出設備

1)輸入設備:向計算機輸入數據,比如,

·通過攝像頭、MIC,將圖像/聲音等轉成二進制數據給計算機

·從網卡輸入數據給計算機等

·其它

2)輸出設備:從計算機輸出數據,比如,

·通過顯示器、揚聲器,將二進制數據翻譯稱爲圖片/視頻/聲音等供人能夠識別

·或者通過網卡輸出數據給別的計算機

·其它

 

2)存儲器:存儲程序和數據

3)運算器:進行算術運算和邏輯運算

4)控制器:解釋程序指令,將程序指令轉爲對應的一條一條的微指令,這些微指令會控制運算器等部件工作,進行比如,

·數據的算術、邏輯運算

·數據的搬移,比如從CPU的寄存器搬移到內存,或者從內存的某個位置搬移到內存的另一個位置。

·等等

 

7.1.2 結構圖

 

 

 

 

 

 

 

 

 

 

 

 

 

7.2 哈佛結構

與馮諾·依曼結構相對應的是哈佛結構,我們會在後面詳細講解這兩種結構之間的異同和優缺,爲了便於講解的方便,這邊還是以經典的馮諾·依曼結構爲例,進行計算機組成結構的介紹。

 

7.3 詳細結構

7.3.1 詳細結構圖(PC)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.3.2  各部分簡述

計算機的詳細組成總體上可以分爲三大部分,CPU,總線與接口、外部設備,核心部分主要就是cpu/總線,外部設備總體上分爲輸入設備和輸出設備,而核心部分與外部設備通過接口連接。

 

1) cpu

1)運算器

a)作用:根據指令要求,數字電信號的二進制數據進行算運算和邏輯運算,

b)運算器組成

·ALU:Arithmetic Logic Unit運算單元,進行算數運算和邏輯運算

·(通用)寄存器組:用於存放ALU在進行算術/邏輯運算時,運算過程中涉及到的一些中間值和計算結果值。

·乘商寄存器:專門用於存放乘法和除法運算中間值和結果值。

·CVZS:各種ALU運算需要用到的標誌位

C:進位、借位標誌,如果有進位或者借位,C=1,否則C=0。

C的應用舉例:請寫彙編代碼計算13208 + 34535相加後的值。

答:爲了便於編程時好理解,我們先將這兩個二進制的數,轉爲16進制,即OX3398+0X86E7。

彙編實現這兩個數的相加的大致步驟如下圖所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

總結:從這個例子就可以看出,C進位/借位標誌位的作用,有關借位作用同理,就不再贅述。如果你想了解跟多,我們在  後面嵌入式技術課程中,在講有關彙編時,還會將這方面的內容。當然我們這裏在強調一點,我們學習彙編並不是爲了

使用會變來進行開發,而是通過彙編理解計算機的工作原理。

有些同學說,我用C語言的等高級語言寫代碼,這些標誌位也會用的上嗎,也會用得上,百年一起在編譯時,C語言會被翻譯爲彙編,翻譯爲彙編後,進行加法的算術運算時,同樣會按照同樣的方式使用C進/借位標誌位。

 

Z:運算結果是否爲零標誌,如果結果爲0,Z=1,否者Z=0。

應用舉例:比較兩數是否相等,比如a=3,b=3,判斷兩數是否相等,寫成彙編程序的話,實際上就是將兩數相減(算術運算),

如果Z=1表示a和b的值相等,否則不相等。

 

V:溢出標誌,有溢出,V=1,V=0

1)什麼是溢出

比如一個32位的寄存器,只有32位,所能裝的二進制的數的最大情況就是32個1,即11111111 11111111 11111111 11111111,如果再往裏面加一個1的話,就向33爲進1了,但是寄存器只有32爲,不存在33爲,溢出的哪個1不存在了,寄存器中的32個bit,全部是0,即00000000 00000000 00000000 00000000,因此溢出回事數值發生巨大突變,在真實的計算機中,溢出會導致數據的值發生錯誤,導致計算結果產生很大的問題。

 

2)爲什麼要檢查溢出

從上面的描述中,不難看出,溢出的檢查很有意義,通過基礎標誌V的檢查,就可以知道數據有無溢出,如果沒有溢出證明數據是沒問題的,否者數據的值可能存在問題,需要做相應的處理。

高級語言,比如C語言實現兩個很大數計算時,如果數據計算機結果因爲太大而溢出,當你使用這個溢出的數據時,會有溢出提醒,這個溢出提醒就是通過,C語言程序被編譯後的彙編程序,檢查V這個溢出標誌位得到的,我們在後面將C語言時,還會講到有關溢出事情。

 

S:有時用是N,當兩個有符號數進行運算時,S=1表示運算的結果爲負數,S=0表示運算的結果爲正數或零。

應用舉例:比較a、b兩數的大小,寫成程序的話,我們會讓兩個數進行減法減法運算,如果S=1,表示是一個負數,說明a<b,如果S=0,說明a等於或者大於b,這個時候需要在查詢Z標誌位,如果Z標誌位爲1,表示a等於b,否者說明a小於b。

 

2)cpu的控制器


a)作用:最重要的功能就是對指令進行譯碼,然後將指令轉成微指令,再由微指令控制計算機工作,比如    

· 控制ALU,讓ALU進行數據的算術、邏輯運算


· 進行數據的移動,比如從CPU的寄存器移到內存中,或者從內存的某個位置搬移到內存的另一個位置。    

· 等等


b)控制器組成

· 程序計數器(PC):Program Counter,程序最開始運行時,PC裏面放的是程序第一條指令在內存中所在的地址,每運行一

條指令,PC裏面的地址就會加1,指向下一個指令,如果一個指令的存放需要4個字節,pc中的地址加1,實際上加的是4個字節。

 

· 指令寄存器(IR):Instruction Register,臨時存放從內存中取得的,即將要被解釋運行的指令,指令由兩部分組成,


 

- 第一部分:操作碼,指明計算機需要執行一個什麼樣的動作,比如有些操作碼錶示做加運算,有些表示要進行數據搬移。

 

- 第二部分:地址碼,

+ 直接是要被操作碼操作的數

+ 要被操作的數在內存中所在的地址。

 

    MOV

僞指令  101001 1001010101

       操作碼  地址碼



· 指令譯碼器(ID):Instruction Decoder,解釋指令,解釋指令的過程爲,

 

- 第一步:檢查指令的格式是否合法,是否夾有非法字符、或者非法詞組,有的話,譯碼將不會通過



- 第二步:如果指令被檢查合格了,會提取出操作碼,將操作碼翻譯爲微指令,控制計算機各部分,按照操作碼的要求做事

 


· 控制存儲器:用於存放微指令程序(或稱微程序),每一操作碼都對應着一個自己的微指令程序,控制存儲器中存放着所有操作碼

所對應的微指令程序。


比如MOV(加運算)操作碼,就有自己的微指令程序,微指令程序是由一條條的微指令構成的,在出廠時,這些微指令程序就被

固化在了控制存儲器中。

 


· 微指令寄存器:用於臨時存放微指令

2)總線與io接口

總線與接口的作用就是,將CPU和外部設備連接在一起。-----

1)三大高速總線


a)作用:高速通信線路,屬於CPU的高速公路

 

· 地址總線:傳輸地址信號,比如通過傳輸地址信號,找到要操作的內存單元等  

· 控制總線:傳輸控制信號

 

通過地址總線傳輸的地址信號,找到內存的某位置了,接下來到底是往裏面寫數據呢,還是從裏面讀數據呢,那就

要看具體的“指令”了,如果是寫指令,指令經過譯碼器的譯碼後,會被轉爲微指令,微指令會通過控制總線,向內存發

控制信號,表示說,我希望向該內存位置寫數據。


· 數據總線:傳輸數據信號

比如通過地址信號找到內存的某個位置了,控制總線也發出了寫的控制信號,希望對該空間寫數據,那麼寫數據時,就需要

通過數據總線向該內存空間傳輸數據信號的,內存收到這個數據信號後,會將該數據信號鎖存到該內存空間中,那麼這樣就實現了

寫數據的過程。


b)三大高速總線是分開的

三大高速總線其實是可以合在一起的,但是合成一個的話會忙不過來的,通信的速率會非常低,分成三條總線就好比將高速公

路分成三個車道,不同車走不同的車道,互不相干,效率自然就高。

c)三大高速總線是並行通信的

使用並行通信的目的也是爲了條通信效率。

d)三大高速總線所處位置  -------

三大高速總線位於CPU的內部,通過CPU芯片的引腳與外部的IO橋連接在一起。

2)IO接口

a)作用:負責連接各種的輸入、輸出外部設備

b)每一個設備都會有屬於自己的IO接口

c)io接口也有地址、數據、控制三大線,


· io接口的地址線、數據線、控制線,大多數情況都是串行通信的,而且往往是複用的

 

比如USB通信,usb使用的就是串行通信的,常見的USB2.0有4根線,其中有兩根線,一個是正極電源線,另一個負極電源線,

其它兩根線被複用當作地址線、數據線、控制線使用。

 

· 不過內存是一個特例,爲了能夠提高內存的訪問速度,內存io接口的地址、數據、控制線都是獨立的,並且使用的是並行通信。

d)後面的linux驅動課程,主要涉及的就是IO接口相關的內容

linux驅動就是講如何通過編寫驅動程序,去控制這些IO接口,實現與外部設備的通信,有關IO接口這一塊的知識,我們會在後面的

linux驅動技術課程部分詳細講解,所以,io接口是後面Linux驅動課程的核心內容。

 


e)io接口所處的位置

· 在芯片的外部:比如pc機(個人電腦),所有IO接口基本都是在CPU芯片的外部      

· 集成在芯片內部:比如像單片機,雖然有一部分也是在芯片外部,但是有很大部分IO接口是被直接集成於在了芯片的內部。

 

 

3)IO橋

a)並不是計算機都需要IO橋

IO橋是PC機特有的,除了PC外的其它類的計算機,有些(單片機)就不使用IO橋。---------------

 


b)爲什們會使用IO橋

其實是可以不使用IO橋的,沒有IO橋時,所有的“IO接口”都是直接掛接在三大高速總線上的,但是隨着發展,掛接的外部

設備越來越多,直接掛接在總線上,管理是一個麻煩,爲了管理的便利,就加了IO橋,IO接口直接掛接在IO橋上,就由IO橋

來管理衆多的IO接口。

 

c)IO橋常常分爲南橋和北橋

南橋對應的就是一個南橋芯片,北橋對應的就是一個北橋芯片,南北橋之間會有相互連接。 -----------


· 南橋:負責CPU與鼠標、鍵盤、磁盤等,通信速率較低的外部設備之間的通信。


· 北橋:負責CPU與內存、顯示器等,通信速率要求較高的外設之間的通信。

 


d)io橋所處的位置

io橋指的就是南橋和北橋芯片,位於CPU芯片的外部。

 

 

 

 

 

 

 

 

 

 

 

 

 

4)地址、數據、控制線相互配合工作

 

a)例子:將內存中地址0101字節的內容讀出,寫到CPU通用寄存器R0(地址爲1001)中,假設寄存器R0只有一個字節。

 

 

 

 

 

 

 

 

 

 

 

 

 

步驟:

第一大步:從內存0101的字節,讀出數據

(1)cpu通過地址線發出0101這個地址信號,內存的0101對應的字節會被選中

(2)cpu解釋並執行“讀指令”,發出“讀”的控制信號

通過控制線發送“讀”控制信號後,之前被選中的0101字節,就被設置爲了可讀,設置爲可讀後,內存0101字節中的數據2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v11001001)會被讀出,讀的過程,其實就是通過數據線將電信號導出,由於內存的數據、地址、控制線是並行傳輸的,那麼在並行數據線上,此時擁有2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v相同的電平狀態。

 

 

 

與此同時,哪些掛在地址、數據、控制線上的,與本次操作不相干的其它內存字節,全部爲高阻狀態,爲高阻態時,不會受到數據、地址、控制線上面信號的影響。

 

第二大步:將數據寫入r0中

1)cpu通過地址線發出1001地址信號,CPU通用寄存器組中的r0寄存器會被選中

2)cpu解釋並執行“寫指令”,發出“寫”的控制信號

cpu通過控制線發出“寫”控制信號後,被1001地址選中的r0會被設定會寫狀態,設置爲可寫後,數據線上的數據(電平信號)

2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v,會被傳輸給r0寄存器,並將電信號鎖存起來,寫過程完畢,而其它寄存器處於高阻態, 不會受到影響。

 

b)以上過程,在高級語言程序裏面,只有一條語句

使用高級語言寫程序時,以上過程的過程只需一條a = b就搞定了,但是實際上這句話會被翻譯爲彙編,然後彙編程序被執行時,硬件在指令的控制下,經過以上步驟才能實現數據的讀寫。

 

c)疑問

有些同學可能有一個疑問,那就是地址、數據、控制線,在技術上是如何做到只操作想操作哪個字節就操作哪個字節,爲什麼其它直接爲高阻態是不受影響,其個就是我們數字電路里面所學的三態門的工作原理了,具體內容,這裏就不再介紹,後面技術課程涉及到後在講解這樣的問題。

 

3)外部設備

1)什麼是外部設備

掛接在外設IO接口上的都是外部設備,與設備在機箱外部還是內部沒關係,不管是在內部還是外部都是外設,外部設備大致分爲三類。

a)數據的傳輸:比如網卡,負責數據的發送和接收,即是輸入也是輸出設備

b)數據的存儲:比如像磁盤,SSD(固態硬盤),負責數據的存儲,既能讀數據也能裏寫數據,所以即是輸入也是輸出設備。

c)數據的翻譯:比如輸入設備MIC,將輸入的聲音翻譯爲電信號的二進制數據。比如顯示器,將電信號的二進制數據翻譯爲人看得見的

圖像和視頻。

 

2)外部設備所在位置

a)片內外設

集成在芯片的內部的片內外設,比如xxxxx,後面會講片內外設。只是像PC這種計算機,使用的CPU是一個獨立芯片,很少有片內外設,後面講MCU、SOC時,會提到什麼是片內外設。

 

b)片外外設(芯片外部)

·直接在電路板上:內存

·需要通過數據線連接在一起

機殼內:硬盤

機殼外:比如像鼠標,U盤。

 

3)輸入設備

鍵盤:字符圖形輸入,按下某個按鍵,輸入動作會被翻譯爲ASCII編號數據(以電信號的二進制數形式存在)。

鼠標:光標位置輸入,將鼠標移動轉爲電信號二進制的座標數據

攝像頭:圖形圖像輸入,將其翻譯爲電信號二進制數據

麥克風:聲音輸入,將其翻譯爲電信號二進制數據

觸摸屏:將觸摸位置翻譯爲電信號二進制座標數據

網卡:直接接受別的計算機發送的電信號二進制數據,輸入給計算機

磁盤、SSD:讀取存儲的數據,輸入給計算機

 

4)輸出設備

顯示器:將CPU按照程序要求處理後的,電信號的二進制的圖形、圖像數據,翻譯成爲圖形圖像給人看

喇叭:將聲數據翻譯成爲人能聽得見的聲音

打印機:將數據輸出到打印機打印,打印機打印

機械手臂:將輸出數據翻譯成爲機械手臂的動作

led燈等:將輸出數據翻譯成爲燈的亮滅

網卡:從計算機輸出數據,傳輸給別的計算機

磁盤、SSD:從計算機輸出數據,寫到磁盤或者SSD中

 

7.4 爲什們要介紹計算機的組成結構

這裏之所以要介紹計算機的組成結構,主要是有如下兩個原因,

(1)很多同學對於計算機的結構一直是模模糊糊的,都聽說過馮諾·依曼結構,但是沒有多少同學真正的知道這個結構具體是怎樣的,特別是對於計算機較詳細的機構沒有多少同學清楚,所以我們希望給給位同學把這部分的知識補習下。

(2)我們後續的嵌入式技術課程,還會詳細涉及計算機的組成結構,那時會以具體的某個具體的某個開發板爲例進行講解,這裏先籠統的介紹計算機的大體結構,是希望各位同學能有一個基礎的理解,爲我們後面講解更加深入的結構知識時打基礎。




作者:佳嵌工作室

51CTO免費視頻地址:http://edu.51cto.com/lecturer/12941022.html

課程進度諮詢QQ羣:528495268

轉載請說明源地址。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章