cpu架構一

一個好的編程開發人員,那麼瞭解了計算機的底層內部之後,可能會變成一個更好的開發人員。

筆者找了大量的相關資料包括Intel的相關文檔,越看越迷糊(有可能愛鑽牛角尖),所以還是往簡單的總結吧。

0:簡單的筆者闡述

社會越來越進步、硬件的更新速度是賊快,相關技術的文檔更新不及時,加上網上的資料良莠不齊,筆者看的實在事頭疼。筆者覺得萬變不離其宗、所以什麼98年出版書啦、什麼05年出版的書啦。對了現在是2018年了。離這個年代最近的一本就是2011年出版的書,包括Intel開發者編寫的說明也是2011年,沒辦法。湊合着瞭解吧。若有不同之處,請大家多指教。最好是整個資料,筆者一定拜讀。

1:計算機系統結構圖(沒啥可說的,筆者算第6級和第5級之間的吧)

2:計算機的硬件組成

解釋:上圖涵蓋了大多數的計算機的流程和主要部件。輸入輸出的設備需要適配器(有些設備還需要驅動器,或者驅動軟件也可以理解成適配器)

 

解釋:上圖 是計算機運行的大概流程(注意控制器指向其它部分的虛線也就是控制流,控制器也控制運算器的圖少了)

輸入設備將程序與數據存入存儲器,運行時,控制器從存儲器逐條取出指令,將其解釋成控制指令,去控制各部件的動作。數據在運算器中加工處理,處理後通過輸出設備 輸出。具體步驟下面會講

3:cpu的基本功能(3個控制1個加工)

  1. 程序控制:就是控制指令的執行順序。程序就是指令的有序集合。必須按照程序規定的順序執行。
  2. 操作控制:就是控制指令進行操作。一條指令由若干個操作信號組合實現。cpu管理併產生每條指令的操作信號,把各種操信號送往相應部件,從而控制部件按照指令要求操作。
  3. 時間控制:就是對各種操作實施定時控制。各種指令的操作信號和一條指令的整個執行過程都受到嚴格定時。
  4. 數據加工:就是對數據進行算術、邏輯運算。完成數據加工是cpu的根本任務。

4:cpu組成

簡單說一下:計算機太過於龐大。內部核心構造瞭解太過於複雜,每個部件都能寫成一本厚厚的書,什麼cpu、內存、主板、之類的。包括他們之間是怎麼交互的。太複雜。能力有限。只能做一個粗略。先說cpu吧。別的以後有機會在整理。

傳統上:cpu由控制器和運算器兩個主要部件。現在cpu能力賊強,添加了各種組件、如浮點型處理器、高速緩存、高速緩存又分成什麼一級、二級、三級。等等一系列。並且現在的cpu裏面啥樣根本不知道(誰知道最新的,告訴我一聲,謝過~)。上圖(intel在2011年1月的文檔寫的一個圖,現在肯定不是這樣了,但.......)

 

解釋:

控制器:是全機的管理機構和指揮中心,它按照預先設定的操作步驟,協調控制計算機各部件工作。


 

5:控制器 

控制器工作的實質:就是解釋程序,它每次從存儲器讀取一條指令,經過分析譯碼,產生一系列操作計算機其它部分工作的控制信號(操作指令),發向各個部件,控制各個部件的動作。

高級計算機的控制器可以改變某些指令順序,以改善性能。對所有cpu來說,一個共同的關鍵部件是:程序計數器(pc),它是一個特殊的寄存器(register),記錄着將要讀取的下一條指令在程序中的位置。

控制器的組成:通常由程序計數器(PC)、指令寄存器(IR)、指令譯碼器(ID)、時序發生器和操作控制器組成。

(1)控制器的基本工作流程(注:這是一個簡化描述,其中某些步驟可以根據cpu的類型而併發執行,或者以不同順序執行,別按照這個死記,cpu是不斷更新的,流程可能也有些出入)

  1. 從程序計數器所指示的存儲單元中,讀取下一條指令代碼。
  2. 把指令代碼譯碼爲一系列命令或信號,發向各個不同的功能部件。
  3. 遞增程序計數器,以指向下一條指令。
  4. 根據指令需要,從存儲器(或輸入設備)讀取數據,所需數據的存儲位置通常保存在指令代碼中。
  5. 把讀取的數據提供給運算器或寄存器。
  6. 如果指令需要由運算器或專門的硬件來完成,則命令該硬件執行所請求的操作。
  7. 把來自運算器的計算結果寫回到存儲器、寄存器、或輸出設備。
  8. 轉回第1步。

解釋:大概可以這麼理解

   1)從主存中取出一條指令,並指出下一條指令在主存中的位置。

    2)對指令進行譯碼,併產生相應的操作控制信號,以便啓動規定的動作。

   3)指揮並控制cpu、主存和輸入輸出設備之間的數據流動方向。

(2)控制器的基本任務

就是按照程序所排的指令序列,從存儲器中取出一條指令(簡稱:取指)放到控制器中,對該指令進行譯碼分析,然後根據指令性質,執行這條指令,進行相應的操作。接着,再取指,譯碼,執行。。。。

取指週期:就是把取指令的一段時間叫取指週期(取完指令立馬就pc+1,所以指令在存儲器中必須順序存放!)

執行週期:就是把執行指令的一段時間叫執行週期

(3)指令和數據

計算機有兩股信息在流動,一股是控制信息,也就是操作命令。發源地是控制器,它分散流向各個部件。

另一股是數據信息,它受控制信息的控制,從一個部件流向另外一個部件,邊流動邊加工處理。

一般來說:取指週期從存儲器讀取的信息是指令流,它由存儲器流向控制器;而執行週期中從存儲器讀出的信息流是數據流,它有存儲器流向運算器。(哪些事指令,哪些事數據,控制器完全可以區分)

顯然:某些指令執行過程需要訪問兩次存儲器,一次是取指令,一次是取數據。

5.1 程序計數器(Program Counter,PC)

爲了保證程序能夠周而復始、有條不紊地執行下去,CPU必須具有某些功能保證在執行完當前指令時能知道下一條指令的地址。而程序計數器(PC)正是起到這種作用,所以通常又稱爲指令計數器。

程序計數器工作分兩種情況,一是順序執行,二是轉移執行。

在程序開始執行前,將程序的起始地址送入PC,這在程序加載到內存時以確定,因此PC的內容即是從內存的第一條指令的地址。當執行指令時,CPU將自動修改PC的內容,以便使其保持的總是將要執行的下一條指令的地址。由於大多數指令都是按順序來執行的,所以修改的過程通常只是簡單的對PC加1。當遇到轉移指令如JMP指令時,後繼指令的地址(即PC的內容)不能像通常一樣按順序來取得,而是根據當前指令的地址加上一個向前或向後轉移的位移量相加的和得到,或者根據轉移指令給出的直接轉移的地址得到。因此程序計數器的結構應當是具有寄存信息和計數兩種功能的結構。

5.2 指令寄存器(Instruction Register,IR)

用來保存當前正在執行的一條指令。

當CPU執行一條指令時,先把它從內存儲器取到緩衝寄存器中,然後再送到指令寄存器。然後送到指令譯碼器部件,產生各種微操作指令,控制其它的組成部件工作,完成所需的功能。

一條指令被劃分爲操作碼和地址碼兩個字段。爲了執行任何給定的指令,必須對操作碼進行測試,以便識別所要求的操作。指令譯碼器(Instraction Decoder,ID)就是完成這項工作的。

指令的操作(指令系統,後期在做總結) 

5.3指令譯碼器(Instraction Decoder,ID)

指令譯碼器對來自指令寄存器的操作碼部分進行譯碼,以產生操作性質的控制電位,並將送到微操作控制線路上,在時序部件定時信號作用下,產生具體的操作信號。指令寄存器的操作碼字段的輸出就是指令譯碼器的輸入,操作碼一經譯碼後,即可向操作控制器發出具體操作的特定信號。

5.4 時序發生器和操作控制器

1)微操作:控制器在實現一條指令的功能時,總是把每一條指令分解成一系列時間上先後有序的最基本,最簡單、不可在分的操作控制動作,這種最基本、最簡單、不可在分的操作稱爲微操作。

2)數據通路:我們通常把許多寄存器之間傳輸信息的通路稱爲數據通路(Date Path),它控制信息從什麼地方開始,中間經過哪個寄存器或多路開關,最後傳送到哪個寄存器。

在數據通路中,微操作通過自身的控制作用,和彼此之間的密切配合,使指令流、數據流等信息流按照預定的路徑流動,以實現指令的功能。每一條指令的功能,決定了它所需要的一系列帶時序的微操作信號。

操作控制器:是cpu完成取指令和執行指令全過程的部件,其主要功能是根據指令操作碼和時序信號的要求,產生各種操作信號,以便在各寄存器之間正確的建立數據通路。從而完成取指令和執行指令的控制。

時序信號發生器:對操作信號產生各種控制信號實施時間上的嚴格控制,產生各功能部件所需要的定時控制信號。

由於計算機的高速工作,每一個動作時間必須非常嚴格,不能有任何差錯。時序發生器就是這個作用。

注意:操作控制器類別:有組合邏輯控制器和微程序控制器兩種。二者的差別在於其中的控制信號形成部件不同,進而反應出不同的設計原理和方法。根據設計方法不同,又可將組合邏輯控制器進一步細分爲硬連接控制器和門列陣控制器。也可以總結爲、硬佈線控制器、微程序控制器和門陣列控制器等三種。

硬佈線控制器,它是採用組合邏輯技術來實現的操作控制器;

微程序控制器,它是採用存儲邏輯來實現的操作控制器;

門陣列控制器是吸收前兩種設計思想,即邏輯技術和存儲邏輯技術相結合的操作控制器。本書重點介紹微程序控制器。 操作控制器產生的控制信號必須定時,還必須有時序產生器。因爲計算機高速地進行工作,每一個動作的時間是非常嚴格的,不能有任何差錯。時序產生器的作用,就是對各種操作實施時間上的控制。

CPU中除了上述組成部分外,還有中斷系統、總線接口等其他功能部件,這些內容將在以後各章中陸續展開。

看到這裏可能還是有點迷糊,沒關係,這只是對各部件做一個基本的介紹,關於他們的流程咱們還沒有正式梳理。後面的部分cpu的工作流程在做講解。


6:運算器

運算器是計算機實現運算加工處理等功能的部件。相對控制器而言,運算器接受控制器的命令而進行動作,即運算器所進行的全部操作都是由控制器發出的控制信號來指揮的,所以它是執行部件。

運算器的組成: 運算器由算術邏輯單元(ALU)、累加寄存器(AC)、數據寄存器(DR:數據緩衝寄存器)和程序狀態字寄存器(PSW:狀態條件寄存器) 組成。

運算器的功能:

1、執行所有的算術運算。如加、減、乘、除等基本運算及附加運算;

2、執行所有的邏輯運算,並進行邏輯測試。如與、或、非、零值測試或兩個值的比較等。

 運算器的基本工作流程:

解釋:運算器通常由算術邏輯單元和一系列寄存器組成,其中alu是具體完成算術與邏輯運算的單元,是運算器的核心,由加法器和其它邏輯運算單元組成。寄存器用於存放參與運算的操作數。累加器是一個特殊的寄存器,除了可以存放操作數之外,還用於存放中間結果和最終結果。

注意:超標量計算機包含多個ALU,可以同時處理多條指令,圖形處理器和具有單指令流多數據流SIMD和多指令流多數據流MIMD特性的計算機通常提供可以執行矢量和矩陣算術運算的ALU。

算術邏輯單元(ALU) 算術邏輯單元是運算器的重要組成部件,負責處理數據,實現對數據的算術運算和邏輯運算。

累加寄存器(AC) 累加寄存器AC通常簡稱爲累加器,它是一個通用寄存器。其功能是:當運算器的算術邏輯單元執行算術或邏輯運算時,爲ALU提供一個工作區。例如,在執行一個減法運算前,先將被減數暫取出放在AC中,再從內存儲器中取出減數,然後同AC的內容相減,所得的結果送回AC中。 運算的結果是放在累加器中的,運算器中至少要有一個累加寄存器。目前CPU中的累加寄存器,多達16個、32個,甚至更多。當使用多個累加器時,就變成通用寄存器堆結構,其中任何一個可存放源操作數,也可存放結果操作數。在這種情況下,需要在指令格式中對寄存器號加以編址。

數據緩衝寄存器(DR) 在CPU中引腳大多是複用的,在不同的時間內,具有不同的功能。在對類存儲器進行讀寫操作時,用數據緩衝寄存器用來暫時存放由內存儲器讀寫的一條指令或一個數據字,將我們在不同的時間段內讀寫的數據隔離開來。緩衝寄存器的作用具體有如下幾點:作爲CPU和內存、外部設備之間住處傳送的中轉站;補償CPU和內存、外圍設備之間在操作速度上的差別;在單累加器結構的運算器中,數據緩衝寄存器還可兼作爲操作數寄存器。

狀態條件寄存器(PSW) 狀態條件寄存器保存由算術指令和邏輯指令運行或測試的結果建立的各種條件碼內容,大體包括兩種:一是狀態標誌:如運算結果進位標誌(C),運算結果溢出標誌(V),運算結果爲零標誌(Z),運算結果爲負標誌(N);二是控制標誌,如中斷標誌(I),方向標誌(D),單步標誌等。這些標誌們通常分別由1位觸發器保存,保存了當前指令執行完成之後的狀態。 通常,一個算術操作產生一個運算結果,而一個邏輯操作則產生一個判決。

注意:圖形中還有地址寄存器沒有介紹,筆者在閱讀資料時也沒有將他分類。但是因爲文中對他的介紹是

所以地址寄存器可以當作控制器的一部分。

 

 

 

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