【計算機組成原理】 存儲系統

存儲器的層次和結構程序員

從不一樣角度對存儲器進行分類:算法

 

1.按在計算機中的做用(層次)分類編程

  (1)主存儲器。簡稱主存,又稱內存儲器(內存),用來存放計算機運行期間所需的大量程序和數據,CPU 能夠直接隨機地對其進行訪問,也能夠和告訴緩衝存儲器(Cache)及輔助存儲器交換數據,其特色是容量較小、存取速度較快、單位價格較高。緩存

  (2)輔助存儲器。簡稱輔存,又稱外存儲器(外存),是主存儲器的後援存儲器,用來存放當前暫時不用的程序和數據,以及一些須要永久性保存的信息,它不能與 CPU 直接交換信息。其特色是容量極大、存取速度較慢、單位成本低。異步

  (3)高速緩衝存儲器。簡稱 Cache,位於主存和 CPU 之間,用來存放正在執行的程序段和數據,以便 CPU 能高速地使用它們。Cache 地存取速度可與 CPU 的速度匹配,但存儲容量小、價格高。目前的高檔計算機一般將它們製做在 CPU 中。性能

 

2.按存儲介質分類編碼

  按存儲介質,存儲器可分爲磁表面存儲器(磁盤、磁帶)、磁芯存儲器、半導體存儲器(MOS型存儲器、雙極型存儲器)和光存儲器(光盤)。spa

 

3.按存取方式分類操作系統

  (1)隨機存儲器(RAM)。存儲器的任何一個存儲單元的內容均可以隨機存取,並且存取時間與存儲單元的物理位置無關。其優勢是讀寫方便、使用靈活,主要用做主存或高速緩衝存儲器。RAM 又分爲靜態 RAM (以觸發器原理寄存信息,SRAM)和動態 RAM(以電容充電原理寄存信息,DRAM)。設計

  (2)只讀存儲器(ROM)。存儲器的內容只能隨機讀出而不能寫入。信息一旦寫入存儲器就固定不變,即便斷電,內容也不會丟失。所以,一般用它存放固定不變的程序、常數和漢字字庫,甚至用於操做系統的固化。它與隨機存儲器可共同做爲主存的一部分,統一構成主存的地址域。

    由 ROM 派生出的存儲器也包含可反覆重寫的類型,ROM 與 RAM 的存取方式均爲隨機存取。廣義上的只讀存儲器已可已可經過電擦除等方式進行寫入,其「只讀」的概念沒有保留,但仍然保留了斷電內容保留、隨機讀取特性,但其寫入速度比讀取速度慢得多。

  (3)串行訪問存儲器。對存儲單元進行 讀/寫 操做時,需按其物理地址的前後順序尋址,包括順序存取存儲器(如磁帶,SAM)與直接存取存儲器(如磁盤,DAM)。

 

順序存取存儲器的內容只能按照某種順序存取,存取時間的長短與信息在存儲體上的物理位置有關,其特色是存取速度緩慢。直接存取存儲器既不像 RAM 那樣隨機地訪問任何一個存儲單元,又不像順序存取存儲器那樣徹底按照順序存取,而是介於二者之間。存取信息時一般先尋找整個存儲器中的某個小區域(如磁盤上的磁道),再在小區域內順序查找。

 

4.按信息的可保存性分類

  斷電後,存儲信息消失的存儲器稱爲易失性存儲器,如 RAM。斷電後,信息仍然保持的信息存儲器稱爲非易失性存儲器,如 ROM、磁表面存儲器和光存儲器。若某個存儲單元所存儲的信息被讀出時,原存儲信息被破壞,則稱爲破壞性讀出;若讀出時,被讀單元存儲信息不被破壞,則稱爲非破壞性讀出,具備破壞性讀出的存儲器,每次讀出操做後,必須緊接一個再生的操做,以便恢復被破壞的信息。。

 

存儲器有 3 個主要性能指標,即存儲容量、單位成本和存儲速度。這 3 個指標相互制約,設計存儲器系統所追求的目標就是大容量、低成本和高速度。

  (1)存儲容量 = 存儲字數 * 字長(如 1M * 8 位)。存儲字數表示存儲器地址空間的大小,字長表示一次存取操做的數據量。

  (2)單位成本:每位價格 = 總成本 / 總容量。

  (3)存儲速度:數據傳輸率 = 數據的寬度 / 存儲週期。

    1. 存取時間(Ta) :存取時間是指從啓動一次存儲器操做到完成該操做所經歷的時間,分爲讀出時間和寫入時間
    2. 存取週期(Tm):存取週期又稱讀寫週期或訪問週期。它是指存儲器進行一次完整的讀寫操做所需的所有時間,即連續兩次獨立訪問存儲器操做(讀或寫操做)之間所需的最小時間間隔
    3. 主存帶寬(Bm):主存帶寬又稱數據傳輸率,表示每秒從主存進出信息的最大數量,單位爲 字/秒、字節/秒(B/s) 或 位/秒(b/s)。

 

存取時間不等於存儲週期,一般存儲週期大於存儲時間。這是由於對任何一種存儲器,在讀寫操做以後,總要有一段時間恢復內部狀態的復原時間。對於破壞性讀出的存儲器,存取週期每每比存取時間大得多,由於存儲器中的信息讀出後須要立刻進行再生。

操做系統保存在硬盤上,首先須要將其引導到主存中,而引導程序一般存放在 ROM 中,程序運行時須要進行讀寫操做,所以應採用 RAM。

 

存儲器的層次化結構

  爲了解決存儲系統大容量、高速度和低成本 3 個相互制約的矛盾,在計算機系統中,一般採用多級存儲器結構,以下圖所示。在圖中由上至下,價位愈來愈低,速度愈來愈慢,容量愈來愈大,CPU 訪問的頻度也愈來愈低。

  

 

 

 

  實際上,存儲系統層次結構主要體如今 「Cache - 主存」 層次和 「主存 - 輔存」 層次。前者主要解決 CPU 和主存速度不匹配的問題,後者主要解決存儲系統容量的問題。在存儲體系中,Cache、主存能與 CPU 直接交換信息,輔存則要經過主存與 CPU 交換信息;主存與 CPU、Cache、輔存都能交換信息。

 

 

 

                 三級存儲系統的層次結構及其構成

 

主存和 Cache 之間的數據調動是由硬件自動完成的,對全部程序員均是透明的;而主存和輔存之間的數據調動則是由硬件和操做系統共同完成的,對應用程序員是透明的

在 「主存 - Cache」 和 「主存 - 輔存」 層次中,上一層的內容都只是下一層中內容的副本,也即 Cache(主存)中的內容只是主存(輔存)中內容的一部分。

 

半導體隨機存儲器

 

 

 74138 譯碼器當選通端G1爲高電平,另兩個爲低電平時,纔可將地址端的二進制編碼在一個對應的輸出端以低電平譯出。

 

SRAM 的工做原理

  靜態隨機存儲器(SRAM)的存儲元是用雙穩態觸發器(六管 MOS)來記憶信息的,所以即便信息被讀出後,它仍保持其原狀態而不須要再生(非破壞性讀出)。可是,只要電源被切斷,原來的保存信息便會丟失,故它屬於易失性半導體存儲器。SRAM 的存取速度快,但集成度低,功耗較大,因此通常用來組成告訴緩衝存儲器。

 

DRAM 的工做原理

  動態隨機存儲器(DRAM)是利用存儲元電路中的柵極電容上的電荷來存儲信息的,常見的 DRAM 的基本存儲電路一般分爲三管式和單管式。DRAM 採用地址複用技術,地址線是原來的 1/2,且地址信號分行、列兩次傳送。相對於 SRAM 來講,DRAM 具備容易集成、價位低、容量大和功耗低等優勢,但 DRAM 的存取速度比 SRAM 慢,通常用來組成大容量主存系統。

 

DRAM 保存的信息會自動消失(易失性存儲器),爲此,每隔一段時間必須刷新,一般取 2ms,這個時間稱爲刷新週期。經常使用的刷新方式有 3 種:集中刷新、分散刷新和異步刷新。

  (1)集中刷新:指在一個刷新週期內,利用一段固定的時間,依次對存儲器的全部行進行逐一再生,在此期間中止對存儲器的讀寫操做,稱爲「死時間」,又稱訪存「死區」。集中刷新的優勢是讀寫操做時不受刷新工做的影響,所以系統的存取速度較高;缺點是在集中刷新期間(死區)不能訪問存儲器。

  (2)分散刷新:把對每行的刷新分散到各個工做週期中。這樣,一個存儲器的系統工做週期分爲兩部分:前半部分用於正常讀、寫或保持;後半部分用於刷新某一行。這種刷新方式增長了系統的存取週期,如存儲芯片的存取週期爲 0.5μs,則系統的存取週期爲 1μs。分散刷新的優勢是沒有死區;缺點是加長了系統的存取週期,下降了整機的速度。

  (3)異步刷新:異步刷新是前兩種方法的結合,它既能夠縮短「死時間」,又能充分利用最大刷新間隔爲 2ms 的特色。具體作法是將刷新週期除以行數,獲得兩次刷新操做的時間間隔 t,利用邏輯電路每隔時間 t 產生一次刷新請求。這樣能夠避免使 CPU 連續等待過長的時間,並且減小了刷新次數,從根本上提升了整機速度。

 

  DRAM 的刷新需注意如下問題:(1)刷新對 CPU 是透明的,即刷新不依賴外部的訪問;(2)動態 RAM 的刷新單位是行,故刷新操做時僅須要行地址;(3)刷新操做相似於讀操做,但又有所不一樣。刷新操做僅給柵極電容補充電荷,不須要信息輸出。另外,刷新時不須要選片,即整個存儲器中的全部芯片同時被刷新。

  SRAM 和 DRAM 都知足斷電內容消失,但須要刷新的只有 DRAM,而 SRAM 不須要刷新。

 

SRAM 和 DRAM 各自的特色
特色 \ 類型 SRAM DRAM
存儲信息 觸發器 電容
破壞性讀出
須要刷新 不要 須要
送行列地址 同時送 分兩次送
運行速度
集成度
發熱量(功耗)
存儲成本
主要用途 高速緩存 主機內存

 

ROM 器件有兩個顯著的優勢:

(1)結構簡單,因此位密度比可讀寫存儲器高。

(2)具備非易失性,因此可靠性高。

 

根據製造工藝不一樣,ROM 可分爲掩膜式只讀存儲器(MROM)、一次可編程只讀存儲器(PROM)、可擦除可編程只讀存儲器(EPROM)、閃速存儲器(Flash Memory)和固態硬盤(Solid State Drives)。

MROM 寫入後任何人沒法改變其內容。PROM 容許用戶利用專門的設備(編程器)寫入本身的程序,一旦寫入,內容就沒法改變。EPROM不只能夠由用戶利用編程器寫入信息,並且能夠對其內容進行屢次改寫。須要修改 EPROM 內容時,先將其所有內容擦除,而後編程。

 

主存容量的擴展:位擴展法,字擴展法,字位同時擴展法。

 

雙端口 RAM 和多模塊存儲器

雙端口 RAM 是指同一個存儲器有左、右兩個獨立的端口,分別具備兩組相互獨立的地址線、數據線和控制線,容許兩個獨立的控制器同時異步地訪問存儲單元。當兩個端口的地址不相同時,在兩個端口上進行讀寫操做必定不會發生衝突。

 

 

 

兩個端口同時存取存儲器地同一地址單元時,會因數據衝突形成數據存儲或讀取錯誤。兩個端口對同一主存操做有如下4 種狀況:

  1. 兩個端口不一樣時對同一地址單元存取數據。
  2. 兩個端口同時對同一地址單元讀出數據。
  3. 兩個端口同時對同一地址單元寫入數據。
  4. 兩個端口同時對同一地址單元操做,一個寫入數據,另外一個讀出數據。

其中,第 1 種和第 2 種狀況不會出現錯誤;第 3 種狀況會出現寫入錯誤;第 4 種狀況會出現讀出錯誤。

 

爲提升訪存速度,常採用多模塊存儲器,經常使用的有單體多字存儲器和多體低位交叉存儲器。

 

 

 

1.單體多字存儲器

  單體多字系統的特色是存儲器中只有一個存儲體,每一個存儲單元存儲 m 個字,總線寬度也爲 m 個字。一次並行讀出 m 個字,地址必須順序排列並處於同一存儲單元。

  單體多字系統在一個存取週期內,從同一地址取出 m 條指令,而後將指令逐條送至 CPU 執行,每隔 1/m 存取週期,CPU 向主存取一條指令。這增大了存儲器的帶寬,提升了單體存儲器的工做速度。

  缺點:指令和數據在主存內必須是連續存放的,一旦遇到轉移指令,或操做數不能連續存放,這種方法的效果就不明顯。

2.多體並行存儲器

  多體並行存儲器由多體模塊組成。每一個模塊都有相同的容量和存取速度,各模塊都有獨立的讀寫控制電路、地址寄存器和數據寄存器,它們既能並行工做,又能交互工做。多體並行存儲器分爲高位交叉編址(順序方式)和低位交叉編址(交叉方式)兩種。

  (1)高位交叉編址:高位地址表示體號,低位地址爲體內地址。採用高位交叉編址方式的存儲器還是順序存儲器。

  (2)低位交叉編址:低位地址爲體號,高位地址爲體內地址。因爲程序連續存放在相鄰體中,所以採用此編址方式的存儲器稱爲交叉存儲器。

 

 

多體模塊結構的存儲器採用低位交叉編址後,可在不改變每一個模塊存取週期的前提下,採用流水線的方式並行存取,提升存儲器的帶寬。

 

 

高速緩衝存儲器

高速緩衝技術是利用程序訪問的局部性原理,把程序中正在使用的部分存放在一個高速的、容量較小的Cache中。使 CPU 的訪存操做大多數針對 Cache 進行,從而大大提升程序的執行速度。

Cache 位於存儲器層次結構的頂層,一般由 SRAM 構成。

CPU 與 Cache 之間的數據交換以字爲單位,而 Cache 與主存之間的數據交換則以 Cache 塊爲單位

 

  在Cache 中,地址映射是指把主存地址空間映射到 Cache 地址空間,即把存放在主存中的程序按照某種規則裝入Cache。地址映射不一樣於地址變換。地址變換是指 CPU 在訪存時,將主存地址按映射規律換算成 Cache 地址的過程。地址映射的方式有如下 3 種。

  1.直接映射

  主存數據塊只能裝入 Cache 中惟一的位置。若這個位置已有內容,則產生塊衝突,原來的塊將無條件地被替換出去(無須使用替換算法)。直接映射的塊衝突機率最高,空間利用率低。直接映射的關係可定義爲 j = i mod 2c

  直接映射的地址結構爲 

主存字塊標記 Cache 字塊地址 字塊內地址

  2.全相聯映射

  能夠把主存數據塊裝入 Cache 中的任何位置。

  全相聯映射的地址結構爲

主存字塊標記 字塊內地址

  3.組相聯映射

  將 Cache 空間分紅大小相同的組,主存的一個數據塊能夠裝入一組內的任何一個位置,即組間採起直接映射,而組內採起全相聯映射。兩個 Cache 塊爲一組即二路組相聯。

  組相聯映射的地址結構爲

主存字塊標記 組地址 字塊內地址

 

 

Cache 總容量包括:存儲容量、標記列陣容量(有效位、標記位、一致性維護位、替換算法控制位)。

每一個 Cache 行對應一個標記項(有效位、標記位……)

 

Cache 中主存塊經常使用的替換算法有隨機(RAND)算法、先進先出(FIFO)算法、近期最少使用(LRU)算法和最不常用(LFU)算法。與操做系統算法相似,再也不贅述。

 

Cache 中的內容是主存塊的副本,當對 Cache 中的內容進行更新時,就需選用寫操做策略,使 Cache 內容和主存內容保持一致。此時分兩種狀況:

  對於 Cache 寫命中(write hit),有兩種處理方法。

  (1)全寫法(寫直通法、write - through)。當 CPU 對 Cache 寫命中時,必須把數據同時寫入 Cache 和主存。

  (2)寫回法(write - back)。當 CPU 對 Cache 寫命中時,只修改 Cache 的內容,而不當即寫入主存,只有當此塊被換出時才寫回主存。這種方法減小了訪存次數,但存在不一致的隱患。採用這種策略時,每一個 Cache 行必須設置一個標誌位(髒位),以反應此塊是否被修改過。

  對於 Cache 不命中,也有兩種處理方法

  (1)寫分配法(write - allocate)。加載主存中的塊到 Cache 中,而後更新這個 Cache 塊。它試圖利用程序的空間局部性,但缺點是每次不命中都須要從主存中讀取一塊。

  (2)非寫分配法(not - write - allocate)。只寫入主存,不進行調塊。

Cache的寫命中和寫未命中,就是磁盤或者內存上的存儲區域以前有沒有寫過數據。若是有,此次再寫到相同的區域叫寫命中;若是寫到其餘區域,叫寫未命中。

非寫分配法常與全寫法合用,寫分配法一般和寫回法合用。

 

對於由高速緩存、主存、硬盤構成的三級存儲體系,CPU 訪問該存儲系統時發送的地址爲主存物理地址。當 CPU 訪存時,先要到 Cache 中查看該主存地址是否在 Cache 中,因此發送的是主存物理地址。只有在虛擬存儲器中,CPU 發出的纔是虛擬地址。磁盤地址是外存地址,外存中的程序由操做系統調入主存中,而後在主存中執行,所以 CPU 不可能直接訪問磁盤。

採用 指令Cache 和 數據Cache 分離的主要目的是減小指令流水線的資源衝突。

 

局部性原理的基本含義是:在程序執行過程當中,程序對主存的訪問是不均勻的(即局部)。

頁式虛擬存儲方式和段頁式都以頁爲單位和主存交互。

虛存對應用程序員透明,對系統程序員不透明。

在虛擬存儲器中,當程序正在執行時,由操做系統完成地址映射。

若 Cache 行長太大,Cache 項數變少,於是命中的可能性減少。

 

以上內容均來自王道書籍及相關課程等

相關文章
相關標籤/搜索