1. 程式人生 > >計算機系統結構(二)

計算機系統結構(二)

第二章

  1. 指令系統結構的分類

    2.1.1 指令系統的主要分類

      區別不同指令系統結構的主要因素

        CPU中用來儲存運算元的儲存單元的型別

      CPU中用來儲存運算元的儲存單元

      • 堆疊
      • 累加器
      • 通用暫存器

      將指令系統的結構分為三種類型

      • 堆疊結構 
      • 累加器結構
      • 通用暫存器結構

      根據運算元的來源不同,又可進一步分為:

      • 暫存器-儲存器結構(RM結構)(運算元來自儲存器)
      • 暫存器-暫存器結構(RR結構)(運算元來自通用暫存器)也稱為load-store結構,這個名稱強調:只有load指令和store指令能夠訪問儲存器。

      對於上述三種不同的指令系統結構的運算元描述方式:運算元的位置,個數以及運算元的給出方式(顯式或者隱式)也會有所不同。顯式的給出:用指令中的運算元欄位給出。隱式的給出:使用事先就約定好的單元。

    2.1.2 通用暫存器型結構

      現代指令系統的主流,在靈活性和提高行能方面有明顯的優勢,跟其他CPU內部儲存單元一樣,暫存器的訪問速度比儲存器快。對於編譯器而言,能更加容易些,有效的分配何使用儲存器。暫存器可以用來存放變數。減少對暫存器的訪問,加快程式的執行速度;(因為暫存器比儲存器快)用更少的地址位(相對於儲存器地址來說)來對暫存器進行定址,從而有效的減少目的碼的大小。

      根據ALU指令的運算元的兩個特徵對通用暫存器型結構進一步細分:

      ALU指令的運算元:

      • 三個運算元(兩個源運算元,一個目的運算元)
      • 兩個運算元的指令其中一個運算元即為源運算元又為目的運算元。
      • ALU運算元的個數可以為0--3中的某一個,為0表示沒有儲存器運算元

      通用暫存器型結構進一步細分為3種類型

      • 暫存器-暫存器型(RR型)
      • 暫存器-儲存器型(RM型)
      • 儲存器-儲存器型(MM型)

      

  2.定址方式

    2.2.1定址方式的定義

      定址方式:指令系統中如何形成所要訪問的資料的地址。定址方式可以指明指令系統中的運算元或者一個暫存器運算元或者是一個暫存器運算元。對於儲存器來說,由定址方式確定的儲存器的地址稱為有效地址。

      一些運算元的定址方式

        <--:賦值操作

        Mem:儲存器

        Regs:暫存器組

        方括號:表示內容

          Mem[]:儲存器內容

          Regs[]:暫存器內容

          Mem[Regs[R1]]:以暫存器R1中的內容作為地址的儲存單元中的內容

      

      採用多種定址方式可以顯著地減少程式的指令條數,但可能增加計算機的實現複雜度以及指令的CPI。

      各種定址方式的使用情況的統計結果:

      

      立即數定址方式和偏移定址方式的使用頻率最高。

      立即數定址方式的使用頻度

      

      大約1/4的load指令和ALU指令採用了立即數定址。

    2.2.3 兩種表示定址方式的方法

      將定址方式編碼於操作碼中。由操作碼描述相應的操作的定址方式。適合:處理機採用load-store結構,定址方式只有很少幾種。

      在指令字中設定專門的定址欄位,用以直接指出定址方式。靈活,操作碼短,但需要設定專門的定址方式欄位,而且操作碼和定址方式欄位合起來所需要的總位數可能會比隱含的總位數多。適合:處理機具有多種定址方式,且指令有多個運算元。

  3.指令系統的設計與優化

    2.3.1 指令系統的設計的基本原則

      指令系統的設計包括1.指令功能的設計2.指令格式的設計

      主要考慮因素:速度,成本,靈活性

      硬體實現的特點:速度快,成本高,靈活性差

      軟體實現的特點:速度慢,價格便宜,靈活性高

      對指令系統的基本要求:完整性,規整性,正交性,高效率,相容性

      • 完整性:在一個有限可能的儲存空間內,對任意客借的問題,編制計算程式時,指令系統所提供的指令足夠使用。要求指令系統功能齊全,使用方便。
      • 規整性:主要包括對稱性和均勻性
        • 對稱性:所有與指令系統有關的儲存單元的使用、操作碼的設定等都是對稱的。
        • 均勻性:指對於各種不同運算元型別、字長、操作種類和資料儲存單元,指令的設定都要等同對待。
      • 正交性:在指令中各個不同含義的欄位,如操作型別。資料型別定址方式欄位等,在編碼時相互關照、相互獨立。
      • 高效率:指指令的執行速度快,使用頻率高。
      • 相容性:主要是要實現向後相容,指令系統可以增加新指令,但不能刪除或更改指令的功能。

      在設計指令系統時,有兩種截然不同的設計策略產生了兩類不同的計算機系統:

       CISC(複雜指令系統計算機)

      • 增強指令功能,把越來越多的功能交由硬體來實現,並且指令的數量也是越來越多。

       RISC(精簡指令系統計算機)

      • 儘可能的把指令系統簡化,不僅指令數量少,而且指令的功能也比較簡單

     2.3.2控制指令 

       控制指令是用來改變控制流的。

      • 跳轉:當指令是無條件改變控制流時,稱之為跳轉指令。
      • 分支:當控制指令是有條件改變控制流時,則稱之為分支指令。

       控制指令的使用頻率(load-store型指令系統結構的機器,基準程式為SPEC CPU2000)  

       

       改變控制流的大部分指令是分支指令(條件轉移)。

       分支條件的方法及其優缺點

       

       轉移目標地址的表示,最常用的方法:在指令中提供一個偏移量,由該偏移量和程式計數器(PC)的值相加而得出目標地址。(PC相對定址)

      • 優點:有效的減少該目標地址所需要的位數,位置無關(程式碼可被裝載到主存的任意位置執行)
      • 關鍵:確定偏移量欄位的長度,模擬器結果表明:採用4--8位的偏移量欄位(以指令字為單位)就能表示大多數控制指令的轉移目標地址了。

       過程呼叫和返回

      • 除了要改變控制流之外,可能還要儲存機器狀態。至少也得儲存返回地址(放在專用的連結暫存器或堆疊中)。
      • 過去有些指令系統的結構提供了專門的儲存機制來儲存許多暫存器內容。
      • 現在較新的指令系統結構則要求由編譯器生成load和store指令來儲存或恢復暫存器的內容。

     2.3.3指令操作碼的優化

       指令的組成:由兩部分組成:操作碼,地址碼(地址資訊)

         操作碼包括:操作種類、運算元的描述

         操作種類:加減乘除,資料傳送,移位轉移,輸入輸出,程式控制,處理機制控制等

       運算元描述:主要有,資料的型別,資料字長型別。

       指令格式的設計:確定指令字的編碼方式,包括操作碼欄位和地址碼欄位的編碼和表示方式。  

       指令格式的優化:如何用最短的位數來表示指令的操作資訊和地址資訊。

       基於哈夫曼編碼指令操作碼的優化的基本思想:

         當各種事件發生的概率不均等時,可以發生概率最高的事件用最短的位數(時間)來表示(處理),而對於出現概率較低的事件,則可以用較長的位數(時間)來表示(處理),從而使總的平均位數(時間)縮短,節省程式空間。

      • 固定長操作碼:就是需哦有指令使用相同的程式碼位數,其最小碼長等於:
        • L=li=[log2N]   ;式中L是平均碼長,li是第i種指令的碼長,n是指令總數。
        • 優點:規整,譯碼簡單。
        • 缺點:浪費資訊量。

       huffman編碼法:

         基本原理:當用n個長度不等的程式碼分別代表n種發生概率不等的事件時,按照短程式碼給高概率事件、把長程式碼給低概率事件的原則分配,可使平均碼長達到最低。

        • 使用頻度高的指令,短編碼
        • 使用頻度低的指令,長編碼

         1.要採用哈夫曼編碼法表示操作碼,必須知道各種指令在程式執行過程中的出現的概率,通常可以通過已有的典型的程式統計得知。

       最優haffman編碼:

         根據Huffman編碼法的原理,採用最優編碼法表示的操作碼的最短平均長度可以通過如下的計算,也就是操作碼優化的程度可以用資訊熵來衡量:

          

         固定長的操作碼相對於最優的哈夫曼的操作碼的冗餘量為:

          

       構造哈夫曼樹的方法

        • 將各事件使用頻度從小到大排列 
        • 每次從中選擇兩個頻度最小的節點,將其合併成一個新的節點,並把新的節點畫在所選節點的上面。
        • 然後用兩條邊把新的節點分別於那兩個節點相連(新節點的頻度值為所選節點的頻度值之和)
        • 把新的節點與其他剩餘的未結合的節點一起,在以上述的步驟進行處理,反覆進行直到全部的節點都結合完畢,形成根節點。 

       實際上,操作碼不可能達到最右編碼的法的最短平均長度。利用哈夫曼樹進行操作碼編碼的方法,又稱為最小概率合併法。把所有指令按照操作碼在程式中的出現的概率,自左向右,從大到小排列,每條指令是一個節點。