六、層次結構儲存系統
層次結構儲存系統
前言:
大家都知道計算機程式的執行採用的是“儲存程式”的方式,也就是程式執行時必須將指令和資料放入主存,然後計算機會自動執行。這個過程中會牽扯到很多儲存器。
既然有那麼多不同的儲存器,必然也有一定的體系結構。那麼所謂的層次結構儲存系統,就是各類儲存器按照層次化方式,構成的計算機的儲存器整體結構。
一、儲存器概述
1、儲存器分類
(1)按儲存元件分類
(2)按存取方式分類
(3)按功能方式分類
(4)按資訊可改性分類
(5)按斷電後資訊可儲存性分類
2、主儲存器組成和主存訪問操作過程
(1)記憶單元:即儲存元、位元,儲存0或1,構成儲存陣列。
(2)儲存陣列:即儲存體、儲存矩陣,是儲存器的核心部分。
(3)編址單位:儲存器內每一個位元都會被編號,相同地址的位元構成一個編址單位,即一個儲存單元。
(4)編址方式:指對儲存單元進行編號的方式,如按位元組編址(指儲存陣列內一個地址中有一個位元組的空間)、按字編址。
(5)訪問主存的方式與過程:
- CPU將訪問目的主存單元的地址送到主存地址暫存器MAR(Memory Address Register)。
- CPU通過地址線將主存地址送到主存中的地址暫存器,然後地址譯碼器譯碼後可去選擇相應單元 。
- CPU通過控制線將讀/寫控制訊號送到主存中的讀寫控制電路以進一步讀or寫。
- 在讀寫控制電路控制下,通過資料線將主存資料暫存器MDR(Memory Data register)的資料傳到主存內選中單元,或者將主存中選中單元的資料傳到MDR中。
這裡強調一下,
1、地址線的位數決定了主存地址空間的最大可定址範圍,如36位地址線的最大可定址範圍是0~236-1。
(同時MAR寬度與地址線寬度一致)
2、資料線的位數決定了每次最多存取資料的大小,如在位元組編址方式下,64位資料線每次最多存取8個位元組的內容。
(同時MDR寬度與資料線寬度一致)
3、儲存器的主要效能指標
(1)儲存器容量
(2)儲存器速度:訪問時間、儲存週期、儲存器頻寬等等
- 訪問時間之讀出時間T(A):儲存器接到命令道資訊送到資料線的時間。
- 訪問時間之寫入時間T(W):儲存器接到命令道資訊被寫入儲存器的時間。
- 儲存週期:儲存器進行一次讀寫操作所需要的全部時間。
- 儲存器頻寬B:儲存器被連續訪問時可以提供的資料傳送速率(資訊位數或位元組數/時間)
(3)價格:這個就不用多說了,不看商業只看技術的話,那肯定是越貴越好。
4、各類儲存元件的特點
這裡主要介紹半導體儲存器。
(1)隨機存取儲存器RAM(Random Access Memory)
- 靜態RAM(SRAM):
1.一個二進位需要6個電晶體;
2.讀寫速度更快,資訊能一直儲存無需重新整理;
3.功耗大,整合度低,價格貴;
4.一般用於高速小容量的儲存器,如快取記憶體cache。- 動態RAM(DRAM):
1.一個二進位只需1個電晶體;
2.讀寫速度較慢,需要定時重新整理;
3.功耗小,整合度高,價格便宜;
4.一般用於慢速大容量儲存器,如主儲存器(記憶體條)。
(2)只讀儲存器ROM(Read-Only Memory)
- MROM、PROM、EPROM、EEPROM:都是隨機存取方式工作。
- 快閃記憶體 Flash ROM :高密度非易失性讀寫儲存器;一般用於如U盤、儲存卡、BIOS等。
5、儲存器的層次結構
前言裡講過,儲存器的層次結構就是各類儲存器按照層次化方式,構成的計算機的儲存器整體結構。
那麼為什麼要有層次結構呢,這是因為不同的儲存器有其不同的特性和優點,如果有一中儲存器既便宜、又容量大、又速度快、還能滿足各種特殊需求,那麼我們或許就不需要層次結構了,直接把這種儲存器往裡面塞就行,但這顯然是不大可能的。
所以我們需要一種層次結構以協調組織各種儲存器,使其能在一定成本範圍內完成我們預期的儲存與讀寫效果。
二、主存和CPU的連線和讀寫操作
1、主存晶片技術
第一節講各類儲存器的特點時提到過動態RAM(DRAM)主要用作主存,那麼現在講講DRAM作為記憶體時的主存晶片技術。目前主要使用的是基於SDRAM的晶片技術的記憶體條,稱為同步DRAM。
(1)DRAM晶片技術
- 目前DRAM晶片主要是採用雙譯碼結構位片式晶片。(其實DRAM晶片都是位片式)
- 前面講到要訪問主存的話,CPU會通過地址線將主存地址送到主存中的地址暫存器,然後地址譯碼器譯碼後可去選擇相應單元 。而雙譯碼結構中地址譯碼器就會分為行地址譯碼器和列地址譯碼器,分別指示儲存陣列中的行號和列號。
- 如果是單純的二維雙譯碼結構晶片,那麼儲存陣列的行列交接處的單元只有一位,稱之為位片式晶片。
- 而有時候也會有三維雙譯碼晶片,即有多個位平面,行列交叉點上不再是一位,而是多位構成的一個儲存字,會被同時讀寫。
(2)基本SDRAM晶片技術:DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM等等,其技術工作過程略顯複雜,這裡不多介紹。
2、主存與CPU的連線與儲存器擴充技術
(1)主存與CPU連線關係如下:
CPU內部匯流排介面–處理器匯流排–I/O橋接器–儲存器匯流排–主存
(2)儲存器擴充技術:
- 主存可以由多個記憶體條(記憶體模組)構成,記憶體條插槽就是儲存器匯流排,而一個記憶體條是由多個儲存器晶片擴充合成的。
- 多個儲存器晶片構成一個儲存器時,需要進行字擴充和位擴充。字擴充是單個晶片容量的擴充,位數不變;而位擴充則是將多個儲存器晶片構成給定字長的儲存器。
- 多個晶片構成的記憶體條採用交叉編址,晶片內地址是不連續的,即同一行列位置處會同時讀寫。比如8個8位晶片會在行列交叉點(i,j)處同時讀取64位地址。而這讀取的片內地址在8片中是相同的,都是指i,j),具體的選片工作會在主存地址的低位地址完成。
- 對於具體儲存陣列,設行數r,列數c,那我們設計時一般要使r<=c,並且|r-c|最小。
如一個8片16M×8位晶片構成的128MB記憶體條,該晶片有8個位平面,行地址和列地址可以是各佔12位。則:
- 128MB=212×212×8位(1B)×8片。
- 如果主存只有這一個記憶體條,則主存地址低3位用於選片,
- 高12+12位分別用於指示片內行地址、列地址。
3、裝入指令和儲存指令過程
load 和 store
三、硬碟儲存器
1、磁碟儲存器結構
(1)磁碟儲存器的基本組成:
- 磁記錄介質:儲存資訊。
- 磁碟驅動器:讀寫電路,讀/寫轉換開關、讀/寫磁頭與磁頭定位伺服系統。
- 磁碟控制器:控制邏輯、時序電路、並->串轉換電路、串->並轉換電路用於連線主機和磁碟驅動器。
(2)磁碟驅動器:
- 磁頭–盤面:每個碟片的倆面各有一個磁頭,磁頭號=盤面號。
- 磁軌–柱面:多個碟片上的相同磁軌形成一個柱面,磁軌號=柱面號.
- 扇區:即扇段,每個磁軌被分成若干扇區,磁碟讀寫時是以扇區為單位的,每一個扇區都有一個編號。而對於每一個扇區,有多個間隙、ID域、資料域組成,資料域一般都是512B(現在有趨勢至4KB)。
- 磁軌編號:讀寫磁碟時是一次讀寫一個柱面,然後移到下一個柱面。磁軌最外面編址0,是自外向內編址的。
(3)磁碟讀寫過程邏輯
- 盤地址:
是磁碟讀寫的根據,由柱面號(磁軌號)、磁頭號(盤面號)、扇面號(扇段號)組成。有了盤地址,就可以讀寫目標磁軌中的指定扇區。
- 操作過程:
- 尋道:磁碟控制器將盤地址送到磁碟驅動器的磁碟地址暫存器,產生尋道命令;啟動磁頭定位伺服系統,根據盤地址選擇對應磁頭到對應柱面;尋道結束,磁碟控制器收到訊號,進入下一階段----旋轉等待。
- 旋轉等待:扇區計數器清零,接下來每一個扇區標誌脈衝都會使扇區計數器+1;當計數與磁碟地址暫存器的扇區地址符合時輸出符合訊號。
- 讀寫:此時已經確定讀寫資訊就在磁頭下,進行寫操作或者讀操作。
2、磁碟儲存器效能
(1)記錄密度:
- 道密度:徑向單位長度內的磁軌數目。
- 位密度:弧向單位長度內的二進位制資訊數目。
- 有高密度儲存和低密度儲存之分,高密度儲存的外道扇區數多,低密度儲存則內外道扇區數都一樣。
(2)儲存容量
(注:格式化的記錄面數約為碟片數的兩倍,此時容量為格式化容量)
- 儲存容量=記錄面數×柱面數×扇區數×扇區位元組數
- 如果是低密度儲存方式,則:儲存容量=記錄面數×柱面數×內圓長度×最內道位密度(如果只給出位密度,一般是最內圈位密度,且是低密度儲存方式)
(3)資料傳輸速率(內部傳輸速率、持續傳輸速率)
- 概念:這裡指的是內部傳輸,指真正進入讀寫階段後單位時間讀寫的二進位制資訊。
- 計算:轉速(每秒)×弧長×位密度。
(4)平均存取時間
- 存取時間=尋道時間+旋轉等待時間+資料傳輸時間,而資料傳輸時間相對很小可以近似忽略。
- 平均存取時間=平均尋道時間+平均等待時間 其中尋道時間一般為5-10ms,可以根據道數和道間移動時間計算; 其中一般為4-6ms平均等待時間就取磁碟旋轉半周的時間.
3、磁碟儲存器連線
第二節講到了到了主存域CPU的連線,提到了連線結構:
CPU內部匯流排介面–處理器匯流排–I/O橋接器–儲存器匯流排–主存
而磁碟儲存器的磁碟控制器就連線在I/O匯流排上,從而與I/O橋接器乃至整個CPU和主存連線。
4、固態硬碟SSD
用快閃記憶體顆粒代替了磁碟作為儲存介質。
四、高速緩衝儲存器Cache
前面提到過儲存器的層次結構,可以看到主存和CPU之間會有一個快取記憶體Cache。根據層次結構原理,Cache裡存放最可能被頻繁訪問的程式和資料。
這能大大提高CPU訪問記憶體,而在這一節我們主要介紹Cache的相關性原理和自身性工作原理。
1、程式訪問區域性性
程式指令、資料很多時候都是連續存放的。而在較短的時間間隔內,程式產生的地址往往集中在儲存空間的一個很小範圍內。通過分析可以得到以下倆個程式訪問區域性性:
(1)時間區域性性:被訪問的某個儲存單元在一個較短的時間間隔內很可能又被訪問。
(2)空間區域性性:被訪問的某個儲存單元的鄰近單元在一個較段的時間間隔內很可能又被訪問。
2、cache工作原理
(1)主存塊,cache行,cache有效位,cache行標記
- 主存塊:cache是能和主存互相交換資訊的,這就要保證cache和主存空間都被劃分為等大的若干區域,以便按區域大小直接資訊交換。其中主存中的區域稱為主存塊(簡稱塊),資訊交換以此為單位。
- cache行:cache的資訊來自主存塊,其中存放一個主存塊的區域稱為cache行(槽)。
- cache有效位:無資訊時cache行是空的,具體標記形式是設立一個有效位(valid bit),有效位清0則意味著該cache行內資訊無效、已被淘汰,置1則表示有效主存塊裝入。
- cache行標記:cache行內除了有效位,還有標記位,與接下來要講的對映裡的主存地址的標記位對應,用作對映匹配。
(2)Cache訪問過程
- 地址搜尋:CPU給出主存地址addr,檢查cache中有無addr所在塊。
- cache訪問:如果cache內有addr所在塊(cache hit),則從cache內區資訊送CPU,。
- 主存訪問:如果cache內無addr所在塊(cache miss),則從主存內取對應塊複製到cache,同時送CPU。
(3)Cache-主存的平均訪問時間
相關概念:
- cache命中-命中率p
- cache不命中-缺失率
- 命中時的訪問時間:即命中時間,cache訪問時間T c c c
- 不命中時的訪問時間:讀取主存塊到cache的時間 主存訪問時間T m m m+cache訪問時間T c c c,其中T m m m稱為缺失損失。
最後得到平均訪問時間:
T a a a = p×T c c c + (1-p)×(T m m m+T c c c) = T c c c + (1-p)×T m m m
3、cache行和主存塊的對映
前面講了cache訪問的一些過程和相關時間概念。但現在有一個問題:
當我們要去訪問某個主存單位時,要去哪個cache裡面搜尋呢?或者說當我們要將某個主存塊複製到cache中時,要怎麼選擇cache行呢?
這裡就要講到cache行和主存塊的對映方式:
(1)直接對映(模對映):
- 主要思想:把主存的每一塊對映到一個固定的cache行中
- cache行號: 主存塊號 mod cache行數
- 主存地址:t位標記+c位cache行號+b位塊內地址。
- 其中主存塊號被分為標記和cache行號 ,根據t+c位直接推出主存塊號(第幾個塊群的第幾個塊)。
如果無命中,則將主存塊複製至對應cache行,設定有效位和標記位(此時標記指示在哪一個快群)
(2)全相聯對映:
- 主要思想:主存的每一塊可對映到任意cache行
- 主存地址:t位標記+b位塊內地址。由於時任意cache行,所以無需在主存地址中指出cache行號,只需比較所有cache行的標記,只要與主存地址中標記一致就可以了。
如果無命中,就直接將主存塊複製到任意空閒行,然後設定cache行標記位和有效位。
(3)組相聯對映:
直接對映和全相聯對映都各有其優缺點,前者容易過多的調進調出,而後者的搜尋開銷大。兩者結合取長補短就產生了組相聯對映:
- 主要思想:將cache分成大小相等的組,每個主存塊對映到cache固定組的任意一行,即組間模對映(直接對映),組內全對映,妙啊。
- cache組號:主存塊號 mod cache組數,同時組號
- 主存地址:t位標記+q位cache組號+b位塊內地址,
- 其中主存塊號被分為標記+cache組號,標記指示主存塊在哪一個主存組群裡,cache組號指示主存塊在該主存族群的第幾個從而指定組號去進行組內全對映搜尋。
- N路組相聯:設共有2ccache行,其中2q個組號,則每個組內有2c-q行,令s=c-q,則有每組有2scache行,稱為2s路組相聯,一般為2路或者4路比較常用。
4、cache中主存塊的替換演算法
(1)先進先出演算法(FIFO演算法):
- 替換掉最早裝入cache的主存塊。
(2)最近最少用演算法(LRU演算法):
- 替換掉近期最少使用的主存塊。
- 每一個cache行有一個計數器,計數值稱為LRU位,越小越常用,被訪問時置0。
(3)最不經常用演算法(LFU演算法)
- 替換掉cache行中引用次數最少的塊。
- 與LRU類似但不完全相同。
(4)隨機替換演算法
- 隨機替換,事實證明效能還可以,主要是代價很低。
5、cache一致性
cache行中的內容時來自主存塊的副本,我們在寫操作時也得更新cache,這裡涉及到cache–主存一致性的問題。(當然,一致性問題在其他的一些情況也會涉及到,比如共享主存)。
總之,為了處理好cache一致性問題,那麼關鍵在於處理好寫操作。
(1)全寫法
- 寫命中時,即要寫的內容就在cache內,則同時寫cache和主存。
- 寫不命中,則進行寫分配法(更新主存並分配cache行裝入)或者非寫分配法(通寫法和直寫法)。
(2)回寫法
- 只寫cache不寫主存,若缺失則將主存塊調入cache中並更新cache。
- cache被替換時才將主存塊內容一次寫回。
- 會出現cache和主存不同步,通常由其他同步機制進行保證。
6、cache和程式效能
程式的效能指程式執行所用的時間,很大程度上體現在指令資料的訪問時間上,而這幾乎由cache命中率決定。這就要求我們的程式有良好的訪問區域性性。
五、虛擬儲存器
1、虛擬儲存器基本概念
計算機系統在執行程式時不是單純地拿著主存的實體地址去進行指令、資料操作的。每一個程式通常會有一個獨立的巨大虛擬儲存空間,這樣編寫程式時就不會有實體記憶體的大小約束了。
可以理解為程式設計師在虛擬地址空間內程式設計,而程式實際執行時會有一套機制去到真正的記憶體內操作。
就好像cache與主存間的關係一樣,虛擬儲存空間也會有交換塊大小、對映、替換、寫一致性等等問題需要考慮。
2、虛擬地址空間
每個程式都會對應一個結構相同,空間一樣的虛擬地址空間映像。
(1)核心空間:用以存放作業系統核心程式碼和資料等,核心程式碼區和資料區在每個程式的地址空間中都一樣。使用者沒有許可權訪問核心空間
(2)使用者空間:用以給使用者存放程式的程式碼和資料等。
- 使用者棧
- 共享庫
- 堆
- 可讀寫資料區
- 只讀資料和程式碼區
3、虛擬儲存器的實現
主要介紹分頁式虛擬儲存器
(1)分頁:
- 虛擬地址空間被劃分為大小相等的頁面,硬碟和主存之間按頁面為單位交換資訊。虛擬地址空間中的頁稱為虛擬頁、邏輯頁、虛頁。
- 主存空間也被劃分為大小相等的頁框,即頁幀、物理頁、實幀。
- 每一個程式生成一個頁表,頁表聯絡了虛擬地址空間和主存空間。通過頁表實現程式中指令所用的邏輯地址(虛)向存放指令或資料的實際實體地址(實)轉換。
(2)頁表:
頁表是一張存放在主存中的虛頁號和實頁號的對照表,記錄著程式的虛頁調入主存時被安排在主存中的位置,且頁表一般長久的儲存在記憶體中。
程式的每一個虛擬頁都在頁表裡有一個對應的頁表項,有如下內容:
- 裝入位:即有效位和存在位,“1”表示對應頁面在主存,該虛擬頁已從外存調入主存,是一個“緩衝位”。
- 修改位:即髒位,說明頁面是否被修改過。修改過的話被替換時會寫回磁碟。
- 使用位:說明使用情況,用來配合替換策略。
- 訪問許可權位:說明許可權,用於儲存保護。
- 禁止快取位:說明是否可以裝入cache,保證儲存器一致性。
- 虛擬頁的存放位置:若裝入位為“1”,表示 主存物理頁號(頁框號);
若裝入位為“0”:則該欄位要麼是虛擬頁在磁碟上的地址,表示虛擬頁面是一個未快取頁,
要麼是null,表示虛擬頁面是一個未分配頁。
(3)地址轉換:
這裡的地址轉換指將虛擬地址轉換為主存實體地址,由CPU內的儲存器管理部件MMU完成。
虛擬地址和主存實體地址都由頁號和頁內偏移地址組成,後者倆者一樣,前者根據頁表項關聯,當我們知道了虛擬地址後,作如下轉換過程:
- 根據頁表基址暫存器找到主存中對應的頁表位置。
- 找到頁表後,根據虛頁號找到對應頁表項。
- 如果裝入位為1,則找到物理頁號並且得到完整的實體地址。
- 如果裝入位為0,則說明缺頁,進行缺頁處理。
(4)快表:
上述過程都需要從主存中查頁表並且做各種後續操作,訪存次數會變多,相對於主存中的頁表(可以稱為慢表),我們可以將活躍頁表項複製到快取記憶體內,形成快表TLB(後被轉換緩衝器)。
TLB很小,表項是TLB標記+慢表項,標記表示該表項來自哪一個虛擬頁。
(5)最後po一張老師ppt裡的CPU訪存過程圖:
----完結撒花 :: 2021/1/3,01:37
相關文章
- 儲存器的層次結構
- [資料庫系統]儲存和檔案結構資料庫
- 儲存結構
- 大型系統儲存層遷移實踐
- docker檔案系統分層儲存原理Docker
- TiDB 底層儲存結構 LSM 樹原理介紹TiDB
- MySQL體系結構與儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- JanusGraph -- 儲存結構
- CentOS 儲存結構CentOS
- IBM AIX儲存層結構分析+aix常用命令IBMAI
- 儲存系統
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- WordPress模板層次02:模板層次結構和原理
- 如何構建通用儲存中間層
- 繪製層次結構圖
- InnoDB記錄儲存結構
- php圖的儲存結構PHP
- redis 儲存結構原理 2Redis
- HBase 資料儲存結構
- 計算機系統的層次結構(計算機組成原理5)計算機
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- VSAN儲存結構解析+儲存資料恢復案例資料恢復
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MySQL索引及優化(1)儲存引擎和底層資料結構MySql索引優化儲存引擎資料結構
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- MFC9.0層次結構圖
- Fuchsia 作業系統的四層結構作業系統
- 庫存系統:應用層、領域層、對接層的架構設計架構
- 【資料結構——圖和圖的儲存結構】資料結構
- PostgreSQL儲存引擎之page結構SQL儲存引擎
- innodb表空間儲存結構
- etcd MVCC 儲存結構及流程MVC
- 【RocketMQ】RocketMQ儲存結構設計MQ
- 圖(Graph)——圖的儲存結構
- 【部落格383】etcd儲存結構
- 杉巖PACS影像系統分散式儲存架構分散式架構
- Sqlserver儲存引擎體系結構簡介_Part1SQLServer儲存引擎