1. 程式人生 > >計算機組成與設計(5)-----儲存器

計算機組成與設計(5)-----儲存器

思維導圖

引言

    儲存器是儲存資料的硬體裝置.我們既希望其有超高的速度,也希望有超高的容量,還想要便宜.但是在同樣的容量下,不同訪存速度的儲存器價格相差極大,這又與適當的價格形成了矛盾.解決辦法就是對儲存器分層,這是一種折中的辦法,利用部分高速度而低容量的儲存器和低速度而高容量的儲存器互相配合,從而組成了具有大容量和高速度優點的儲存器.

    打個比方來說,如果我們需要去圖書館查詢某一方面的資料,會將n本書抽取,然後放在書桌上,一般情況下,需要的資料很多都在放在書桌上的書中(空間),而且,某一本書會被重複性的閱讀(時間).這就是區域性性原理.利用區域性性原理,設計了處理儲存器層級結構.

  • 時間區域性性:某項資料在被訪問之後很有可能會被再次訪問
  • 空間區域性性:某項資料被訪問之後,其旁邊的資料很有可能會被訪問
  •  儲存器層次結構:一種由多儲存器層次組成的結構,儲存器的容量和訪問時間隨著離處理器距離的增加而增加.

             

    有多層次的儲存器就意味著他們會進行資料的交換.而塊/行是基本單位

  • 塊/行:兩級層次結構的儲存資訊交換的最小單元

    按照功能來說,處理器訪存資訊需要先訪問儲存器層次中高速度的那一層,如果在這一層中找到了所需的資料,就稱為命中,沒有則稱為缺失,若發生缺失,就會在下一層次的儲存器中尋找資料.

  • 命中:如果處理器需要的資料在高層次的儲存器的某一個塊中,這次訪問就是命中的.
  • 命中率:在高層次儲存器中找到資料的比率
  • 命中時間:處理器一次命中所需要的時間
  • 缺失:如果處理器沒有在高層次的儲存器中找到需要的資料,這次訪問就是缺失的.
  • 缺失率:在高層次儲存器中沒有找到資料的比率
  • 缺失代價:若此次訪問時缺失的,需要將低層次儲存器的資料替換到高層次儲存器,所需的時間就是缺失代價

一.儲存器的分類

    儲存器主要有四類,最快價格也最貴的是SRAM,主要用來實現cache層.價格和速度較低的是DRAM,主要用來實現主儲存層次.以上兩者是易失性的,速度和價格更低的是磁碟,其訪問速度最慢,但是價格便宜,容量大,所以一般用來實現儲存大量資料的層次.此外還有快閃記憶體,,主要用於移動儲存裝置.此兩者是非易失性的.

  1. SRAM:靜態隨機訪問儲存器是一種組織層儲存陣列結構的簡單積體電路,讀取和寫入的時間可能不同,但所有的訪問花費相               同時間.
  2. DRAM:在動態隨機訪問儲存器中,儲存單元使用電容儲存電荷的方式儲存資料,所以不能長久的保持資料,需要週期性的重新整理.              而在時鐘的控制下以突發方式傳送連續的資料稱之為SDRAM,他的最快版本稱之為DDR.
  3. 快閃記憶體:一種電可擦除的可程式設計的只讀儲存器(EEPROM)
  4. 磁碟儲存器:由多個磁碟組成的儲存器.每個磁碟具有幾萬個磁軌,磁碟儲存器把磁頭移動到磁碟上適當磁軌的過程稱之為尋                       道.每個磁軌劃分為幾千個扇區,扇區是磁軌的基本單位,也是磁碟上資料讀寫的最小單位,柱面則是給定時間內磁                     道可以訪問的盤面上所有扇區的集合.

二.  cache

     cache也成為快取記憶體,利用SRAM實現.會臨時性的儲存最常用的資料,而訪問這些資料只需要相當短的時間.在實際的應用中,經常使用分離cache以處理指令和資料

  • 分離cache:一級cache由兩個獨立的cache組成,分別處理指令和資料

2.1cache的組織方式

cache的組織方式是指cache的塊與主儲存器(後文稱主存)的塊之間的對映方式,不同的對映方式有不同的優缺點.

  1. 直接對映:直接對映值主存中的地址僅僅對應cache中的一個位置,即一對多.
  2. 全相連:cache的一種組織方式,主存中的一個地址塊可以對應於所有的cache中的位置.
  3. 組相連:直接對映和全相連都是組相連的極端情況,組相連中塊的組織方式是將cache中的塊分組,主存中的一個地址僅僅會對              應於cache中的一個組,但是,可以對應於該組中的任何一個位置.

    以直接對映舉例,如果cache中塊的數量是二的冪,則對應方式很簡單,只需取主存地址的低位相匹配即可(即塊號對cache塊數求餘數).例如,cache有8個塊,對映方式如下(在組相連中,對應組的方式是塊號對組數求餘數.):

                

    因為cache中的一個塊會對應主存中的多個塊,所以需要一個標記欄位用來判斷此時cache中的資料是否是所請求的資料.如上例,cache中的一個塊對應主存中的四個塊,所以需要判斷.

  • 標記:塊中的一個欄位,包含了地址資訊,用於判讀cache中的資料是否是請求的資料

在塊中,還需要一個欄位來判斷確實沒有有效的資料,比如,當處理器剛啟動時,cache中沒有資料,或者在執行了一些指令後,cache中依然沒有資料,此時標誌應該被忽略,否則,如果標記有效,就會取到空的資料.這個判斷需要一個位的長度.

  • 有效位:用於判斷塊中的資料是否有效

    如果說直接對映中,主存中的地址僅僅會對應於cache中的一個地址,那麼,在以全相連方式組織的cache中,主存中的每一個地址可以對應於cache中的任何一個位置,即多對多.

2.2  cache的訪問處理

以直接對映舉例,容量為8個塊的cache,被方位9次.

下圖是表明請求地址是如何匹配cache的,請求地址的低位會被用於定位所請求資料可能存在於哪一個cache的塊中,高位則和標記比較,用於判斷現在此cache塊中的資料是否為請求的資料,如果是則命中,如果不是,則表示發生了一次缺失.

                 

以下是具體的訪問請求:

以下是具體的訪問步驟:

2.3    cache的缺失處理

  1. 在cache的訪問處理中,發生了缺失,即請求的資料不在cache中,在這種情況下,處理器會進行缺失處理,以下是具體步驟:
  2. 程式計數器的值-4,送會儲存器中
  3. 通知主存執行一次讀操作,並等待主存訪問完成
  4. 將從主存中讀取的資料寫入cache對應的塊的資料區中,並改寫其標記欄位為地址的高位,重新設定有效位,重新執行指令.

2.4cache的寫操作處理

    當處理器需要向儲存器中寫入資料時,則會進行寫操作處理.以保證cache和主存資料的一致性.寫操作處理主要有兩種,寫直達和寫回

2.4.1寫直達

    寫直達是比較簡單的寫入處理,它會同時更新cache和主存中的資料,但是寫直達有較大的缺點,因為需要向主存中寫入資料,所以會花費相當大量的週期處理這一操作

  • 寫直達:同時更新cache和下一層次儲存器,以保證資料的一致性

    在寫直達的基礎之上,可以進行一點優化,使用寫緩衝,此時資料會被寫入cache和寫緩衝中,寫操作處理結束,在這之後,處理器會將寫緩衝當中的資料寫入主存中.

  • 寫緩衝:一個儲存寫入主存的資料的緩衝佇列

2.4.2寫回

寫回是另一種寫操作的處理方式,比起寫直達來說複雜得多.

  • 寫回:發生寫操作是隻會將資料寫入cache中.只有當cache中被修改過的塊被替換時才會寫入較低的儲存器層次中

2.5  cache的效能評估和優化

設計人員有時會採用平均儲存器訪問時間(AMAT)作為評價cache效能的標準.

  • AMAT:即平均儲存器訪問時間,AMAT = 命中時間 + 缺失率 * 缺失代價

2.5.1組織塊以優化效能

  • 相連度:即塊的組織方式中,一個組擁有多少塊.比如直接對映相連度 = 1,全相連 = 塊的個數,組相連 = 一個組擁有的塊數.

    提高適當相連度可以降低缺失率,比如,在一個cache中有8個塊,此次請求的資料已經在cache中,直接對映可能會發生缺失,全相連則不會發生缺失,組相連則在二者之間.當然,提高了相連度會使訪問時間增加,所以需要適當的取捨.

2.5.2並行查詢以優化效能

  在組相連中,通過索引(低位)可以找到組的位置,然後需要遍歷組所有塊的標記以查詢資料,此時可以使用並行的查詢方式優化效能

2.5.3改進替換塊的選擇方式以優化效能

   當相連度大於1時,發生了缺失需要將cache中的一個塊替換以儲存從主存中讀取的資料,此時可以替換最近最少使用的塊以降低缺失率從而提高效能

  • LRU演算法:查詢最近最少使用的演算法

2.5.4使用多級cache以優化效能

使用在已有cache的基礎之上,多增加一級cache,其容量較一級cache高,當一級cache缺失時訪問下一級的cache,以降低缺失代價,缺點則是會增加訪問時間.

  • 多級cache:儲存系統有多級的cache組成,而不僅僅只有主存和一個cache

2.5.5通過分塊以優化效能

    軟體通過對cache中的資料進行重用,提升了資料的時間區域性性並因此降低了缺失率.

三.虛擬儲存器

    儲存器的層級結構當然不僅有cache和主存兩層,實際上,可以在主存之下,還有磁碟,利用實現cache和主存的方式,也可以實現主存和磁碟這兩層儲存器結構,他們實現的原理是相同的.虛擬儲存器以前被設計出來主要的目的就在於消除一個小而受限的主存容量對程式造成的影響.但是,漸漸地主要的功能變為了允許雲端計算在多個虛擬機器之間有效而安全的共享儲存器,

  • 虛擬儲存器:一種將主存用作輔助儲存器快取記憶體的技術

在虛擬儲存器中,使用的術語發生了一些變化,在虛擬儲存器中,塊被稱為頁,訪問缺失被稱為缺頁,主存中的地址為稱為實體地址,其主要的工作原理就是將處理器產生的虛擬地址結合軟硬體轉換為實體地址,然後用來訪問主存.此過程為稱為地址轉換.地址轉換加強了各個程式地址空間之間的保護

  • 頁:塊被稱為頁,是資料流通的基本單位.連個虛擬頁可能對映到同一個實體地址上,以實現虛擬地址共享.所以虛頁可能比物理         地址多很多.
  • 訪頁:訪問缺失被稱為缺頁,一次缺頁的處理將花費數百萬個時鐘週期,代價相當的大.
  • 實體地址:主存中的地址為稱為實體地址
  • 地址轉換:將處理器產生的虛擬地址結合軟硬體轉換為實體地址,然後用來訪問主存.此過程為稱為地址轉換.其轉換時,地址為                   分為虛頁號和頁偏移,類似於cache到主存的索引(低位)和標誌欄位(高位).
  • 保護:確保共享處理器,主存,I/O裝置的多個程序之間沒有讀寫其他程序的資料機制.

以下是層次圖:

3.1虛擬儲存器的操作處理

3.1.1頁的查詢

    為了快速定位實體地址,會在主存中維護一個稱為頁表的資料結構,根據虛擬地址找到實體地址.在處理器中存在一個頁表暫存器,儲存頁表的起始地址.每一個程序都會擁有自己的頁表.

  • 頁表:儲存虛擬地址和實體地址轉換關係的資料結構.通常使用虛頁號來來索引,如果這個虛頁在主存中,頁表的對應項就可以            找到實體地址

頁表如下圖:

       

3.1.2缺頁故障

    如上圖,如果頁表的有效位關閉,就會發生缺頁故障,此時作業系統會獲得控制權,它會在下一級儲存層次中找到該頁,然後將其放到  主存中.因為不知道什麼時候某一頁會被替換出去,所以會在磁碟中維護一個交換區.同時在維護一個數據結構維護每個虛擬頁在磁碟上冊存放位置,這個資料結構可能是頁表的一部分.

  • 交換區:為地址的全部虛擬地址空間預留的磁碟空間.

如下圖:

    

3.1.3寫操作

    虛擬儲存器對下一層次的儲存器的寫操作會花費上百萬個時鐘週期,所以寫直達不適合,採用寫回機制.此時會在頁表中新增一個髒位,所以也有了髒頁.

  • 髒位:一個欄位,表明此頁已被修改過
  • 髒頁:髒位為是的頁,表示此頁是被修改過的頁,發生替換時,將被寫入下一層次的儲存器.

3.2快表TLB

    為了快速的獲得虛擬地址和實體地址的對映關係,會在處理器中包含一個特殊的cache以跟蹤最近使用的地址變換.,這個地址轉換cache被稱為快表(TLB).所以地址轉換會先查詢快表,如果沒有表示發生了一次TLB缺失,就會去主存中查詢,如果命中,會將會將地址變換裝載到TLB中,重新訪問,如果發生缺失,則需要進行缺頁處理,必須完成如下步驟:

  1. 使用虛擬地址查詢頁表項,並在磁碟上找到被訪問的頁的地址,因為花費的時鐘週期太多,所以通常選擇另一個程序執行.
  2. 選擇一個物理頁,如果選擇的頁被修改過,則需要在把新的虛擬頁裝入之前將這個頁寫回磁碟
  3. 啟動讀操作,將被訪問的頁從磁碟上取回所選擇的的物理頁的位置上
  • TLB:用於記錄最近使用的地址的對映資訊的快取記憶體.從而避免每次都要訪問頁表.