計算機組成基礎(2)-- 微體系結構層


當CPU接收到一組0、1構成的二進制指令,準備去實現某項功能時,它有兩種執行方法:

  1. 對於組合邏輯電路,這串二進制指令就是電路的控制信號,操控電路產生結果。
  2. 還有些場合,一串二進制指令實現不了某項功能,而是需要多串二進制指令共同作用,多次操作組合邏輯電路,最終產生正確的結果。這時候,這串二進制指令可能就是一個地址信息,從該地址順序執行若干條二進制指令,這樣一種方式稱之爲微體系結構。

一、微體系結構舉例

閱讀本節後回答以下問題:

  1. 爲什麼提出微體系結構
  2. 描述微體系結構
  3. 微指令的構成?如何實現跳轉?

數據通路

微體系結構中,要執行多條指令的被控對象稱之爲數據通路,數據通路中的ALU控制信號的0、1組合就決定了數據通路的功能,可以把這組控制信號簡單理解成操作碼的一部分。
在這裏插入圖片描述
在這裏插入圖片描述
數據通路在一個週期內可以完成對同一個寄存器的讀寫,這需要一定的精巧設計

1.數據通路時序

在這裏插入圖片描述

2.內存操作

數據通路處理數據的來源是內存,它與內存的通信方式有兩種

  1. 由內存地址寄存器(MAR)和內存數據寄存器(MDR)控制,按字尋址
  2. 由PC寄存器控制,把一個字節讀入MBR的低8位中,按字節尋址

例如把2放入PC寄存器,然後讀內存將得到內存第二個字節的值,該值保存至MBR的低8位。而把2放入MAR然後讀內存,結果是把字節8-11(第2個字)存入MDR。

總結來說,字節是尋址的最小單位。字是計算機一次處理數據的最大單位。 PC/MBR用於讀取指令系統層的可執行程序,程序由字節爲單位。MAR/MDR用於讀取指令系統層的數據字,數據由字爲單位。

但是,實際內存是面向字節的,即內存的物理地址按照字節計算的。針對32位的總線,把2放入MAR(讀取第二個字),實際是把8放入MAR開始讀取(從第8個字節開始讀),也就是說字的實現需要採用某種映射方式。一種最爲簡單的映射方法是將MAR中的內容左移兩位,再放到地址總線上。

微指令

爲了控制一次數據通路,我們一條指令需要29個(24個)控制信號:

  1. 6個控制ALU和2個控制移位器的信號(一個選擇左/右移的功能,另一個使能或者是時間脈衝)
  2. 9個來自C總線的數據寫入寄存器的使能
  3. 9個輸出到B總線的寄存器使能(不需要同時使能,因此可以用譯碼器使能,4個信號線即可)
  4. 2個MAR/MDR指示內存數據讀寫的信號
  5. 1個PC/MBR指示內存讀寫的信號

再加上一些附加字段(下一條指令),構成了36位的一條指令結構

在這裏插入圖片描述

微指令控制

數據通路與控制數據通路的控制器,兩者構成了完整的微體系結構
在這裏插入圖片描述

  • 控制存儲器保存着所有微指令,每條微指令構成一個字,對應一個地址,一個字36位,需要512個不同的地址。把控制存儲的地址寄存器稱爲微程序計數器(MPC),數據寄存器稱爲微指令寄存器(MIR)
  • 微指令沒有順序執行的特性,按照指令中的下一條地址來跳轉運行。當MIR加載並穩定後,MIR中的下一條指令地址信息加載到MPC中去了。
  • 說明下操作下一條指令地址的寄存器JAM。JAM寄存器有三位、JMPC、JAMN、JAMZ。當三位都爲0時候,地址就是下一條指令的地址,當JAMN或者JAMZ置位後,下一條地址的情況就要取決於ALU此時的N狀態或Z狀態(狀態標誌位),JMPC置位實現MBR與Addr的相或,實現地址的跳轉

二、如何用微指令實現指令系統層的指令

我們已經知道微指令是用來實現指令系統層的指令的,即完成一條指令系統層的指令需要運行多條微指令來實現。那麼具體而言,一條指令系統層的指令是由哪些微指令構成,又是怎麼運行的呢?閱讀完本節你需要回答清楚這個問題。

我們必須挑選一個指令系統層的指令作爲例子來闡述,本書挑選的是IJVM,即探如何用微指令Mic-1構成指令系統IJVM。

下文先闡述IJVM的特點,再闡述Mic-1構成IJVM的機理。

指令系統層IJVM的特性

由於指令系統層是由微指令構成的,那麼瞭解指令系統層的特性就是了解微指令的特性。

概念一

函數(或者稱爲過程、方法)有自己的局部變量,局部變量也需要保存在內存中的某些位置,能用一個絕對地址保存局部變量麼?

  • 不行,舉個例子,函數嵌套調用時,需要保護現場,要把原本數據保存到其他地方,再調用嵌套函數。如果不保存,嵌套返回時,對應地址的信息就被破壞了。

因此選擇了一塊內存區域,稱爲棧,這一塊區域的寄存器都沒有自己的地址號,因爲這塊區域存儲的數據是在反覆進入/出去的。

形象地舉個栗子:絕對地址思想就像是一個人在某個城市(內存)買了一套房子,這套房子只歸這個人持有,他進行了一些房屋佈置,買了些家居(函數執行),然後有一天原主人要長期出差,這套房子空出來了。有一天,有個人偷偷住進了這套房子,他根本不知道原主人的存在,於是他把舊傢俱丟了,重新進行了房屋佈置(函數嵌套),住了一段時間這個人走了(嵌套的函數執行完了),這時候原主人出差回來了(返回現場),發現自己原本的裝修都沒有了。

想到一個更污的栗子:張三娶了一個老婆李四,每天過着性福的生活,某一天他突然被公司要求長期出差了。隔壁老王乘虛而入,也跟李四過上了性福的生活。老王有一天發生自己的精力不夠了,他離開了李四。這時候張三出差回來了,當天晚上他正準備與李四成長一番,惆悵的發現,自己的尺寸好像不匹配了。

棧的思想就像一個公寓,反正沒有房產權,你也不在乎地址的概念。現在來了一個人,他就住在第一間臥室裏面,他佈置了些家居。又來了另一個人,他於是住到第二件臥室去了,他也佈置了些家居,但他不會影響到第一個住客,等到有一天他真的不想住了,他也就不需要他的家居了,於是他離開了。這樣,第二間臥室又可以住進來新的租客了。

概念二

棧有兩個指針(房屋管理人記錄租客情況),寄存器LV指向當前過程的基地址,SP指向當前過程的最高一個字,LV與SP之間的數據結構成爲局部變量結構
在這裏插入圖片描述
概念三

棧的另一個用途是保存操作數,例如計算a1=a2+a3的過程如下
在這裏插入圖片描述

IJVM的內存模型

IJVM沒有直接可見的絕對內存地址,它是把內存分成了許多區域,然後提供各個區域的基地址,有以下區域:

  1. 常量池。寄存器CPP保存基地址
  2. 局部變量結構。寄存器LV保存基地址
  3. 操作數棧。看成局部變量結構的一部分,是在局部變量結構的上面開闢的一塊區域
  4. 方法區,保存二進制程序。寄存器PC指向下一條指令

IJVM指令集

大致截圖一下,看看結構就行了。
在這裏插入圖片描述
重點看看函數調用與函數返回時,棧空間的變化。

  • 函數調用過程:原函數在執行,遇到了函數1調用,它先把指向函數1的指針壓入棧,然後把函數1定義的局部變量入棧,最後執行INVOKEVIRTUAL。函數1局部變量上面有一塊操作數棧,再上面纔是函數1的第一條可執行的指令,先會保存現場(保存原函數的PC和LV),然後讓LV指向當前局部變量空間的棧底。再之上就是新的調用函數2的棧結構了。
  • 函數返回過程:利用保存的原函數的LV、PC進行現場恢復
    在這裏插入圖片描述在這裏插入圖片描述
    最後我們看一下高級語言與指令系統層彙編語言的對應關係
    在這裏插入圖片描述在這裏插入圖片描述

微指令Mic-1如何構成指令系統IJVM

微指令是一串36位的二進制數,多串二進制數,構成了一條IJVM的指令。微指令的二進制數實際結構不方便講解,我們給每一條二進制的微指令用一句話來代替,方便講解。合法的話如下圖所示,DEST、SOURCE就是數據通路圖中的那些寄存器。

在這裏插入圖片描述除了上面這張圖,還有幾句等效的語言:

  1. MAR/MDR讀寫數據用rd和wr表示。
  2. PC/MBR讀寫操作碼,用fetch表示

做了上述假設後,可以看看如何用微指令實現指令系統層的指令了,部分截圖如下:
在這裏插入圖片描述

三、流水線思想

嵌入式CPU中,流水線的思想很重要,需要加以理解。最簡單的理解就是,同一時間,微體系結構的不同部分能同時工作,處理不同批次的數據信息。
在這裏插入圖片描述
還有七段流水線的思想。
在這裏插入圖片描述

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