tft每日頭條

 > 生活

 > 計算機存儲器系統包括哪些結構

計算機存儲器系統包括哪些結構

生活 更新时间:2024-12-03 05:52:13

按照在計算機中作用的不同,存儲器分為緩沖存儲器、主存、輔助存儲器。按照存儲信息的材料或介質可以分為磁帶存儲器.磁盤存儲器、半導體存儲器、光盤存儲器。

理想狀态中,我們将存儲器系統視為一個線性字節數組,CPU能在常數時間内訪問每個存儲器位置。但實際上存儲器系統(Memory System)是一個具有不同容量、成本和訪問時間的存儲設備的層次結構,分别具有以下幾部分:

  1. CPU中的寄存器保存最常使用的數據,能在0個時鐘周期内訪問
  2. 高速緩存存儲器(Cache Memory)是靠近CPU的、較小的快速存儲器,保存一部分從主存儲器(Main Memory)取出的常用指令和數據,能在4~75個時鐘周期内訪問
  3. 主存緩存存儲磁盤上的數據,需要上百個時鐘周期訪問
  4. 磁盤存儲通過網絡連接的其他機器的磁盤或磁帶上的數據,需要幾千萬個周期進行訪問

上方存儲器作為下方存儲器的緩存,速度更快、容量更小。

存儲器的層次結構之所以有效,是因為程序具有局部性(Locality)的基本屬性,傾向于不斷訪問相同的數據項集合,或者傾向于訪問相鄰的數據項集合。我們希望程序能具有更好的局部性,使得數據項存儲在較高層次的存儲器中,這樣程序就會傾向于從存儲器結構中較高層次訪問數據項,運行會更快。

1 存儲技術1.1 随機訪問存儲器

随機訪問存儲器(Random-Access Memory,RAM)根據存儲單元實現方式可以分為兩類:靜态的RAM(SRAM)和動态的RAM(DRAM)。

計算機存儲器系統包括哪些結構(計算機組成原理)1

1.1.1 SRAM
  • 将每個位保存到由6個晶體管電路構成的雙穩态的(Bistable)存儲器單元。
  • 屬性:可以無限期地保持在兩個不同的電壓配置或狀态之一,而其他的都是不穩定狀态,會迅速轉移到兩個穩定狀态之一。
  • 特點:由于具有雙穩态,所以隻要有電,就會永遠保持它的值,即使有幹擾,當幹擾消除時就會恢複到穩态。

由于SRAM存取速度較快,隻要供電就會保持不變,對光和電噪音等幹擾不敏感,但是每位的存儲需要6個晶體管,使得造價較為昂貴,且密集度低,使其适合作為小容量高速的高速緩存存儲器。

1.1.2 DRAM
  • 将每個位保存為,對一個由訪問晶體管控制的電容的充電。
  • 特點:由于每個存儲單元比較小,DRAM可以制造的十分密集,可以作為主存或圖形系統的幀緩沖區。由于通過電容電壓來保存位,當電容電壓受到擾動時就無法恢複了。并且電容存在漏電現象,存儲單元10~100毫秒會失去電荷,使得内存系統必須周期性通過讀出重寫來刷新内存的每一位。暴露在光線中會導緻電容電壓改變。

我們可以将w個DRAM單元組成一個超單元(Supercell),使得一個超單元就能存儲w位的信息,并且将d個超單元組合在一個構成一個 d \times wd×w DRAM芯片,能夠存儲dw位信息,并且能對每個超單元進行尋址。并且為了降低地址引腳的數量,我們可以将d個超單元組織成r行、c列的陣列形式。

計算機存儲器系統包括哪些結構(計算機組成原理)2

如上圖所示,我們有一個16 \times 816×8的DRAM芯片,其中包含16個超單元,每個超單元由8個DRAM單元組成,使得每個超單元能存儲8位信息。并且16個超單元被組成4行4列的陣列形式。由一個内存控制器(Memory Controller)通過addr引腳和data引腳将控制DRAM芯片數據的傳入和傳出,比如想要獲得(2,1)處超單元的數據

  1. 内存控制器發送行地址(Row Access Strobe,RAS)2到DRAM芯片,則DRAM芯片會将行2中的整行内容複制到内部行緩沖區。
  2. 内存控制器發送列地址(Column Access Strobe,CAS)1到DRAM芯片,則DRAM芯片會從内部行緩沖區獲得1列的數據,将其發送到内存控制器。

注意:

  • 内存控制器發送RAS和CAS時,使用相同的addr引腳,使得必須分兩步發送地址,會增加訪問時間。
  • 如果将16個DRAM單元組織成線性形式,則需要4位的地址引腳才能索引到每個超單元,但是将其組織成4行4列的陣列形式,隻需要2位的地址引腳。

為了一次性能訪問更多的數據,可以将多個DRAM芯片封裝到一個内存模塊(Memory Module)中,将其紮到主闆的擴展槽中。

計算機存儲器系統包括哪些結構(計算機組成原理)3

如上圖所示是封裝了8個 8M \times 88M×8 DRAM芯片的内存模塊,每個DRAM芯片負責8位數據,這樣一次能對64位字進行讀寫。比如想要獲得地址A處的字:

  • 内存控制器首先将A轉化為(i,j)的超單元地址,然後内存控制器依次将i和j廣播到所有DRAM芯片中
  • 每個DRAM芯片依次接收到RAS i和CAS j,會通過上述的方法輸出8位數據
  • 模塊中的電路收集到所有DRAM芯片輸出的8位數據,然後将其合并成一個64位的字,返回給内存控制器

為了進一步擴大存儲能力,可以将多個内存模塊連接到内存控制器,能夠聚合成主存。當内存控制器想要讀取地址A處的字時,會先找到包含地址A的内存模塊k,然後根據上述步驟得到對應的字。

而基于傳統的DRAM單元,可以做一些優化來提高訪問基本DRAM單元的速度:

  • 快頁模式DRAM(Fast Page Mode DRAM,FPM DRAM):傳統的DRAM芯片通過CAS獲得數據後,會将那一行的數據從内部行緩沖區直接删掉,如果訪問多個在同一行的超單元時,需要反複讀取相同的行。而FPM DRAM能夠獲取一次性數據後,後面的讀取直接從内部行緩沖區讀取。
  • 擴展數據輸出DRAM(Extended Data Out DRAM,EDO DRAM):對FPM DRAM進行改進,使得各個CAS信号在時間上更加緊密。
  • 同步DRAM(Synchronous DRAM,SDRAM):DRAM芯片與内存控制器的通信使用一組顯示的控制信号,通常是異步的,而SDRAM使用了,控制内存控制器的外部時鐘信号的上升沿來代替控制信号。
  • 雙倍數據速率同步DRAM(Double Data-Rate Sychronous DRAM,DDR SDRAM):對SDRAM的優化,通過使用兩個時鐘沿作為控制信号,從而使得DRAM的速度翻倍。
  • 視頻RAM(Video RAM,VRAM): 用于圖形系統的幀緩沖區,與FPM DRAM的區别:VRAM的輸出是通過對内部緩沖區的移位得到的,VRAM允許對内存并行地讀和寫。

從更高層面來看,數據流是通過稱為總線(Bus)的共享電子電路在處理器和DRAM主存之間傳遞數據的。總線是一組并行的導線,能夠攜帶地址、數據和控制信号,也可以将數據和地址信号使用相同的導線。

計算機存儲器系統包括哪些結構(計算機組成原理)4

如上圖所示是一個連接CPU和DRAM主存的總線結構。其中I/O橋接器(I/O Bridge)芯片組包括内存控制器,能夠将系統總線的電子信号和内存總線的電子信号互相翻譯,也能将系統總線和内存總線連接到I/O總線。

當從内存加載數據到寄存器中:

  1. CPU芯片通過總線接口(Bus Interface)在總線上發送讀事務(Read Transaction)
  2. CPU會将内存地址發送到系統總線上
  3. I/O橋将信号傳遞到内存總線
  4. 内存接收到内存總線上的地址信号,會從DRAM讀取出數據字,然後将數據寫到内存總線
  5. I/O橋将内存總線信号翻譯成系統總線信号,然後傳遞到系統總線上
  6. CPU從總能線上讀取數據,并将其複制到寄存器中

當将寄存器中的數據保存到内存中:

  1. CPU芯片通過總線接口發起寫事務(Write Transaction)
  2. CPU會将内存地址發送到系統總線上
  3. I/O橋将信号傳遞到内存總線
  4. 内存接收到内存總線上的地址信号,會等待數據到達
  5. CPU将寄存器中的數據字複制到系統總線
  6. I/O橋将内存總線信号翻譯成系統總線信号,然後傳遞到系統總線上
  7. 内存從内存總線讀出數據,并将其保存到DRAM中。

這裡的讀事務和寫事務統稱為總線事務(Bus Transaction)。

1.1.3 非易失性存儲器

之前介紹的DRAM和SRAM在斷電時都會丢失數據,所以是易失的(Volatile),而非易失性存儲器(Nonvolatile Memory)即使斷電後,也會保存信息,該類存儲器稱為隻讀存儲器(Read-Only Memory,ROM),但是現在ROM中有的類型既可以讀也可以寫了,可以根據ROM能夠重編程的次數以及對它們進行重編程所用的機制進行區分,包括:

  • 可編程ROM(PROM):可以編程一次
  • 可擦寫PROM(EPROM):可以批量擦除
  • 閃存(Flash Memory):具有部分(塊級)擦除功能,大約擦除十萬次後會耗盡

存儲在ROM設備中的程序稱為固件(Firmware),包括BIOS、磁盤控制器、網卡、圖形加速器和安全子系統等。當計算機系統通電後,會運行存儲在ROM中的固件。

1.2 磁盤存儲

磁盤(Disk)是被用來保存大量數據的存儲設備,但是讀信息的速度比DRAM慢10萬倍,比SRAM慢100萬倍。

計算機存儲器系統包括哪些結構(計算機組成原理)5

如上圖所示是一個磁盤的構造。磁盤是由多個疊放在一起的盤片(Platter)構成,每個盤片有兩個覆蓋着磁性記錄材料的表面(Surface)。每個表面由一組稱為磁道(Track)的同心圓組成,每個磁道被劃分為若幹扇區(Sector),每個扇區包含相同數量的數據位(通常為512位)作為讀寫數據的基本單位。扇區之間通過間隙(Gap)分隔開來,間隙不保存數據信息,隻用來表示扇區的格式化位。通常會使用柱面(Cylinder)來描述不同表面上相同磁道的集合,比如柱面k就是6個表面上磁道k的集合。盤片中央會有一個可以旋轉的主軸(Spindle),使得盤片以固定的旋轉速率(Rotational Rate)旋轉,單位通常為RPM(Revolution Per Minute)

将磁盤能記錄的最大位數稱為最大容量(容量),主要由以下方面決定:

  • 記錄密度(Recording Density):一英寸的磁道中可以放入的位數
  • 磁道密度(Track Density):從盤片中心出發,沿着半徑方向一英寸,包含多少磁道
  • 面密度(Areal Density):記錄密度和磁道密度的乘積

磁盤容量的計算公式為:

計算機存儲器系統包括哪些結構(計算機組成原理)6

在面密度較低時,每個磁道都被分成了相同的扇區,所以能夠劃分的扇區數由最内側磁道能記錄的扇區數決定,這就使得外側的磁道具有很多間隙。現代大容量磁盤采用多區記錄(Multiple Zone Recording)技術,将一組連續的柱面劃分成一個區,在同一個區中,每個柱面的每條磁道都有相同數量的扇區,由該區中最内側的磁道決定,由此使得外側的區能劃分成更多的扇區。

計算機存儲器系統包括哪些結構(計算機組成原理)7

如上圖所示,磁盤通過一個連接在傳動臂(Actuator Arm)上的讀/寫頭(Read/Write Head)來進行讀寫,對于有多個盤面的磁盤,會用多個位于同一柱面上的垂直排列的讀/寫頭。對于扇區的訪問時間(Access Time)由以下幾部分構成:

  • 尋道時間:為了讀取到目标扇區,會先控制傳動臂将讀/寫頭移動到該扇區對應的磁道上,該時間稱為尋道時間。影響因素:依賴于讀/寫頭之前的位置,以及傳動臂在盤面上移動的速度。通常為3~9ms,最大時間可為20ms。- 旋轉時間:當讀/寫頭處于目标磁道時,需要等待目标扇區的第一個位旋轉到讀/寫頭下。影響因素:目标扇區之前的位置,以及磁盤的旋轉速度。T_{max \, rotation} = \frac{1}{RPM} \cdot \frac{60s}{1min} ,平均旋轉時間為一半
  • 傳送時間:當讀/寫頭處于目标扇區的第一位時,就可以進行傳送了影響因素:磁盤旋轉速率,以及每條磁道的扇區數$$ T_{max \, rotation} = \frac{1}{RPM} \cdot \frac{1}{平均每條磁道的扇區數} \times \frac{60s}{1min} $$

可以發現:尋道時間和旋轉時間是主要影響部分,并且兩者大緻相等,通常可以尋道時間乘2來估計訪問時間。

由于磁盤構造的複雜性,現代磁盤将其抽象為B個扇區大小的邏輯塊序列,編号為0,1,...,B-1,通過磁盤中的磁盤控制器來維護邏輯塊号和實際扇區之間的映射關系。為此需要通過磁盤控制器對磁盤進行格式化:

  • 會用表示扇區的信息填寫在扇區之間的間隙
  • 表示出表面有故障的柱面,并且不進行使用
  • 在每個區會預留一組柱面作為備用,沒有映射為邏輯塊。當損壞時,磁盤控制器會将數據複制到備用柱面,則磁盤就可以繼續正常工作了。

當從磁盤讀取數據到主存,需要以下步驟:

  1. 操作系統發送一個命令到磁盤控制器,讀取某個邏輯塊号
  2. 磁盤控制器上的固件執行快速表查找,得到該邏輯塊号翻譯成一個三元組(盤面,磁道,扇區)
  3. 磁盤控制器解釋三元組信息,将讀/寫頭移動到對應的扇區
  4. 将讀取到的信息放到磁盤控制器的緩沖區中
  5. 将緩沖區中的數據保存到主存中。

計算機存儲器系統包括哪些結構(計算機組成原理)8

如上圖所示是一個總線結構實例。對于像圖形卡、鼠标、鍵盤、監視器這類輸入/輸出設備,都是通過I/O總線連接到CPU和主存的,比如Intel的外圍設備互聯(Peripheral Component Interconnect,PCI)總線,在PCI模型中,系統中所有的設備共享總線,一個時刻隻能有一台設備訪問這些線路,目前PCI總線已被PCEe總線取代了。雖然I/O總線比系統總線和内存總線慢,但是能容納種類繁多的第三方I/O設備。

  • 通用串行總線(Universal Serial Bus,USB)控制器:USB總線是一個廣泛使用的标準,連接許多外圍I/O設備,而USB控制器作為連接到USB總線的設備的中轉站。
  • 圖形卡(或适配器):包含硬件和軟件邏輯,負責CPU在顯示器上畫像素。
  • 主機總線适配器:用于将一個或多個磁盤連接到I/O總線,使用主機總線接口定義的通信協議,磁盤接口包括SCSI和SATA,通常SCSI磁盤比SATA磁盤速度更快更昂貴,且SCSI主機總線适配器可以支持多個磁盤驅動器,而SATA隻能支持一個。
  • 網絡适配器:可以通過将适配器插入到主闆上空的插槽,從而連接到I/O總線。

注意:系統總線和内存總線是與CPU相關的,而PCI總線這樣的I/O總線被設計成與底層CPU無關。

CPU會在地址空間中保留一塊地址用于與I/O設備通信,每個地址稱為I/O端口(I/O Port),而連接到總線的設備會被映射到一個或多個端口,則處理器可通過端口地址來訪問該I/O設備,該技術稱為内存映射I/O(Memory-mapped I/O)

假設磁盤控制器映射到端口0xa0,探讨磁盤的讀取過程:

  • CPU會通過對地址0xa0執行三個存儲指令,将地址0xa0的内容保存到内存中,完成對磁盤的讀取。發送完指令後,由于磁盤讀取速度比CPU執行速度慢很多,所以CPU會先去執行其他工作。指令1:發送一個命令字,告訴磁盤發起一個Read指令2:指明應該讀取的邏輯塊号指令3:指明保存的内存地址
  • 磁盤控制器接收到Read命令後,會通過上述方法直接将磁盤内容傳送到主存中。這種設備可以自己執行讀寫總線事務而無需CPU幹涉的過程,稱為直接内存訪問(Direct Memory Access,DMA)
  • 磁盤發送完數據後,會給CPU發送一個中斷信号,暫停CPU正在做的工作,然後将控制返回到CPU被中斷的地方。1.3 固态硬盤

固态硬盤(Solid State Disk,SSD)是一種基于閃存的存儲技術,插在I/O總線上标準硬盤插槽(通常為USB或SATA),處于磁盤和DRAM存儲器的中間點。從CPU的角度來看,SSD與磁盤完全相同,有相同的接口和包裝。它由閃存和閃存翻譯層(Flash Translation Layer)組成

  • 閃存翻譯層是一個硬件/固件設備,用來将對邏輯塊的請求翻譯成對底層物理設備的訪問。
  • 閃存的基本屬性決定了SSD随機讀寫的性能,通常由B個塊的序列組成,每個塊由P頁組成,頁作為數據的單位進行讀寫。通常頁大小為512字節~4KB,塊中包含32~128頁,則塊的大小有16KB~512KB。

當對頁進行寫操作時,首先需要先對該頁所處的整個塊進行擦除。

計算機存儲器系統包括哪些結構(計算機組成原理)9

以上是Intel SSD 730的性能,IOPS是每秒I/O操作數,吞吐量數量基于4KB塊的讀寫。我們可以發現随機寫操作較慢,這是因為:

  • 對頁進行寫操作時,通常需要花費較長時間來擦除塊,比訪問頁所需的時間慢了一個數量級
  • 當塊中包含其他數據時,會先将塊中帶有有效數據的頁複制到被擦出過的塊中,才能對那個塊進行擦除。在閃存翻譯層中實現了複雜的邏輯,試圖最小化這些重複的操作。

塊的擦除次數是有限的,當塊磨損後,就不能再使用了,閃存翻譯層中的平均磨損(Wear Leveling)邏輯會試圖将擦除平均到所有塊中,來最大化每個塊的壽命。

SSD的優缺點:

  • 優點:由于閃存是半導體存儲器,沒有移動的部件,所以速度比磁盤更快且磨損小,能耗低
  • 缺點:SSD每字節比磁盤貴大約30倍,所以常用的存儲容量比磁盤小100倍左右。
1.4 存儲技術趨勢

具有以下重要思想:

  • 不同存儲技術有不同的價格和性能折中:從性能而言,SRAM>DRAM>SSD>磁盤,而從每字節造價而言,SRAM>DRAM>SSD>磁盤。
  • 不同存儲技術的價格和性能屬性以不同的速率變化着

計算機存儲器系統包括哪些結構(計算機組成原理)10

從上一圖中可看出,DRAM主存和磁盤的性能滞後于CPU性能,訪問時間比單個處理器的周期時間慢很多,而SRAM的性能雖然也滞後于CPU性能,但是還保持增長,所以現代計算機會使用基于SRAM的高速緩存,來彌補CPU和内存之間的差距。

2 局部性

具有良好局部性(Locality)的程序,會傾向于引用最近引用過的數據項本身,或者引用最近引用過的數據項周圍的數據項。局部性主要具有兩種形式:

  • 時間局部性(Temporal Locality):引用過的數據項在不久會被多次引用。
  • 空間局部性(Spatial Locality):引用過的數據項,在不久會引用附近的數據項。

從硬件到操作系統,再到應用程序,都利用了局部性。

  • 硬件:在處理器和主存之間引入一個小而快速的高速緩存存儲器,來保存最近引用的指令和數據,從而提高對主存的訪問速度。
  • 操作系統:用主存來緩存虛拟空間中最近被引用的數據塊。
  • 應用程序:比如Web浏覽器會将最近引用的文檔放入本地磁盤中,來緩存服務器的數據。

有良好局部性的程序比局部性較差的程序運行更快。

想要分析一個程序的局部性是否好,可以依次分析程序中的每個變量,然後根據所有變量的時間局部性和空間局部性來總和判斷程序的局部性。

例1:

計算機存儲器系統包括哪些結構(計算機組成原理)11

分析上述程序的局部性。對于變量sum,每一輪叠代都會引用一次,所以sum具有好的時間局部性,而sum是标量,所以沒有空間局部性。對于變量v,其數據在内存中的分布如圖b中所示,每一輪叠代都是引用不同的數據項,所以時間局部性較差,但是會按照内存存儲的順序依次引用數據項,所以空間局部性較好。 綜合來說,該程序具有較好的局部性。

并且由于程序是以指令形式保存在内存中的,而CPU會從内存中讀取指令,所以也可以考慮取指的局部性。由于該循環體内的指令是順序保存在内存中的,而CPU會按順序進行取指,所以具有良好的空間局部性,并且叠代多次會反複讀取相同的指令,所以具有良好的時間局部性,所以該程序的局部性較好。

對于一個向量,如果每一輪引用的數據項之間在内存空間中相隔k,則稱該程序具有步長為k的引用模式(Stride-k Reference Pattern)。步長k越大,則每一輪引用的數據在内存中間隔很大,則空間局部性越差。

例2:

計算機存儲器系統包括哪些結構(計算機組成原理)12

對于以上代碼,變量sum的時間局部性較好且不具有空間局部性,對于二維數組變量v,在内存中是按照行優先存儲的,而代碼中也是按照行優順序進行應用的,所以變量v具有步長為1的引用模式,所以具有較好的空間局部性,而時間局部性較差。總體來說,該程序具有良好的局部性。

例3:

計算機存儲器系統包括哪些結構(計算機組成原理)13

上述代碼将變量v的引用順序變為了列優先,則根據v的内存存儲形式,變量v具有步長為N的引用模式,則時間局部性較差,且空間局部性也較差。總體來說,該程序的局部性較差。

例4:

計算機存儲器系統包括哪些結構(計算機組成原理)14

我們需要判斷以上三個函數的局部性。首先根據結構體的定義可以得到結構體數組在内存中的存儲形式如下所示

計算機存儲器系統包括哪些結構(計算機組成原理)15

則clear1函數的步長為1,具有良好的空間局部性;而clear2函數會在結構體中不同的字段中反複跳躍,空間局部性相對clear1差一些;而clear3函數會在相鄰兩個結構體中反複跳躍,空間局部性相比clear2更差。

總體而言:

  • 重複引用相同變量的程序具有良好的時間局部性
  • 考慮變量的内存存儲形式,判斷程序引用模式的步長,步長越大則空間局部性越差
  • 從取指角度而言,具有循環體則空間局部性和時間局部性較好,而且循環體越小、叠代次數越多,則局部性越好。
3 存儲器層次結構

通過上面兩節,我們可以得到存儲技術和軟件的基本屬性

  • 不同存儲技術的訪問時間相差較大,速度快的技術每字節的成本比速度慢的技術高,且容量小。并且CPU和主存之間的差距在變大。
  • 編寫良好的程序具有良好的局部性。

兩者存在一定的互補,由此可以得到一種組織存儲器系統的方法,存儲器層次結構(Memory Hierarchy)

計算機存儲器系統包括哪些結構(計算機組成原理)16

如上圖所示是一種經典的存儲器層次結構,會使用基于SRAM的高速緩存存儲器來解決CPU和DRAM主存之間的鴻溝,通常還可以在DRAM主存和本地磁盤之間添加一層SSD,來彌補兩者之間的差距。通常還可以在本地磁盤下方添加一個本地磁帶,提供成本更低的存儲。

高速緩存(Cache)是一個小而快速的存儲設備,用來作為存儲在更大更慢設備中的數據對象的緩沖區域。而使用高速緩存的過程稱為緩存(Caching)

存儲器層次結構的中心思想是讓層次結構中的每一層來緩存低一層的數據對象,将第k層的更快更小的存儲設備作為第k 1層的更大更慢的存儲設備的緩存。

該結構之所以有效,是因為程序的局部性原理。相比于第k 1層的數據,程序會傾向于訪問存儲在第k層的數據。如果我們訪問第k 1層存儲的數據,我們會将其拷貝到第k層,因為根據局部性原理我們很有可能将再次訪問該數據,由此我們就能以第k層的訪問速度來訪問數據。而且因為我們不經常訪問第k 1層的數據,我們就可以使用速度更慢且更便宜的存儲設備。

計算機存儲器系統包括哪些結構(計算機組成原理)17

上圖展示的是存儲器層次結構的基本緩存原理。每一層存儲器都會被劃分成連續的數據對象組塊,稱為塊(Block),每個塊都有一個唯一的地址或名字,并且通常塊的大小都是固定的。第k層作為第k 1層的緩存,數據會以塊大小作為傳送單元(Transfer Unit)在第k層和第k 1層之間來回賦值,使得第k層保存第k 1層塊的一個子集的副本。通常存儲器層次結構中較低層的設備的訪問時間較長,所以較低層中會使用較大的塊。

3.1 緩存命中

當程序需要第k 1層的某個數據對象d時,會先在第k層的塊中搜索d,如果d剛好緩存在第k層中,則成為緩存命中(Cache Hit),則該程序會直接從第k層中讀取d。根據存儲器層次結構,可以知道第k層的讀取速度更快,因此緩存命中會使得程序更快。

3.2 緩存不命

如果第k層沒有緩存數據對象d,則稱為緩存不命中(Cache Miss),則會從第k 1層中取出包含d的塊,然後第k層的緩存會執行某個放置策略(Placement Policy)來決定該塊要保存在第k層的什麼位置

  • 來自第k 1層的任意塊能保存在第k層的任意塊中,如果第k層的緩存滿了,則會覆蓋現存的一個犧牲塊(Victim Block),稱為替換(Replacing)或驅逐(Evicting)這個犧牲塊,會根據替換策略(Replacement Policy)來決定要替換第k層的哪個塊:随機替換策略:會随機選擇一個犧牲塊最近最少被使用(LRU)替換策略:選擇最後被訪問的時間離現在最遠的塊

随機放置塊會使得定位起來代價很高。

  • 可以采用更嚴格的放置策略,将第k 1層的某個塊限制放置在第k層塊的一個小的子集中,比如第k 1層的第i個塊保存在第k層的i mod 4中。但是該放置策略會引起沖突不命中(Conflict Miss),此時緩沖區足夠大,但是由于需要的對象會反複映射到同一個緩存塊,使得緩存一直不命中。此時就需要修改放置策略。

比較特殊的情況是第k層的緩存為空,那麼對于任意的數據對象的訪問都會不命中。空的緩存稱為冷緩存(Cold Cache),該不命中稱為強制性不命中(Compulsory Miss)或冷不命中(Cold Miss)

程序通常會按照一系列階段來運行,每個階段會訪問緩存塊的某個相對穩定不變的集合,則該集合稱為工作集(Working Set),如果工作集大小超過緩存大小,則緩存會出現容量不命中(Capacity Miss),這是由緩存太小導緻的。

3.3 緩存管理

對于每層存儲器,都會有某種形式的邏輯來管理緩存:将緩存劃分成塊、在不同層之間傳遞塊、判斷緩存是否命中并進行處理。

  • 編譯器管理寄存器文件,當寄存器文件中不含有數據時出現不明中,它會決定何時發射加載操作,以及确定用哪個寄存器來存放數據。
  • SRAM高速緩存是DRAM主存的緩存,由内置在緩存中的硬件邏輯管理的。
  • 在有虛拟内存的系統中,DRAM主存是本地磁盤的緩存,由操作系統軟件和CPU上的地址翻譯硬件共同管理。
  • 在具有分布式文件系統的機器中,本地磁盤作為緩存,由運行在本地機器上的客戶端進行管理。

計算機存儲器系統包括哪些結構(計算機組成原理)18

通過以上内容,就能解釋局部性好的程序的優勢:

  • 時間局部性:當一個數據對象在第一次不命中被複制到緩存中時,我們希望程序的時間局部性好,則在不久的将來就能反複在第k層訪問到該塊,使得程序運行更快。
  • 空間局部性:由于緩存中一個塊包含多個數據對象,我們希望程序的空間局部性好,就可以直接利用第k層的數據塊,避免再從第k 1層傳輸塊到第k層。
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved