計(jì)算機(jī)體系中數(shù)據(jù)存儲(chǔ)設(shè)備主要分為易失性設(shè)備(如內(nèi)存DRAM)和非易失性設(shè)備(如磁盤,固態(tài)硬盤等),計(jì)算機(jī)體系架構(gòu)中的存儲(chǔ)層次結(jié)構(gòu)(memory hierarchy),操作系統(tǒng)中的文件系統(tǒng)(file system)等會(huì)涉及如何管理存儲(chǔ)設(shè)備,以便獲得更好的性能接癌。本文作為基礎(chǔ)篇介紹常用的存儲(chǔ)設(shè)備,為后續(xù)講解進(jìn)行鋪墊扣讼。
1.物理存儲(chǔ)設(shè)備
第一部分介紹市面上常見的存儲(chǔ)設(shè)備缺猛,主要包括易失性和非易失性存儲(chǔ)設(shè)備。易失性存儲(chǔ)設(shè)備因?yàn)閿嚯姾髷?shù)據(jù)丟失主要用于作為緩存或內(nèi)存使用,而非易失性存儲(chǔ)設(shè)備斷電后仍能保證數(shù)據(jù)不丟失荔燎,主要用于持久化存儲(chǔ)數(shù)據(jù)耻姥。
1.1.易失性存儲(chǔ)設(shè)備
-
DRAM
DRAM(Dynamic Random Access Memory)動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器主要用于作為主內(nèi)存使用。存儲(chǔ)器內(nèi)部是一個(gè)按行和列尋址的長(zhǎng)方形矩陣有咨,為了在每個(gè)芯片中容納更多的位咏闪,DRAM僅使用一個(gè)晶體管來存儲(chǔ)一位數(shù)據(jù),信息的讀取過程會(huì)破壞該信息摔吏,所以需要進(jìn)行恢復(fù),為了防止在沒有讀寫一個(gè)位時(shí)丟失信息纵装,必須定期“刷新”該位征讲,不過只需要對(duì)一行數(shù)據(jù)讀取就能刷新該行,存儲(chǔ)器系統(tǒng)中的DRAM必須在特定時(shí)間間隔(比如8ms)訪問每一行橡娄,這也是稱為動(dòng)態(tài)RAM的原因诗箍。
現(xiàn)代DRAM通常是以“組(Bank)”為單位來組織行的,DDR4通常有16組挽唉,每一組有一系列行構(gòu)成滤祖,當(dāng)發(fā)送Act(Activate)指令時(shí),會(huì)打開一個(gè)組將一行數(shù)據(jù)讀取到緩沖區(qū)瓶籽,當(dāng)發(fā)送Pre(precharge)指令時(shí)匠童,會(huì)關(guān)閉組和行,為下次訪問做準(zhǔn)備塑顺。當(dāng)行已經(jīng)在緩沖區(qū)時(shí)汤求,可以采用2種方式進(jìn)行傳送,一種是根據(jù)DRAM的寬度采取連續(xù)列地址傳送(通常是4严拒,8扬绪,16位);另一種是指定塊傳送方式裤唠,并給出初始地址挤牛。每個(gè)命令和塊傳送過程都是通過時(shí)鐘同步。
- SRAM
SRAM(Static Random Access Memory)靜態(tài)隨機(jī)訪問存儲(chǔ)器, 和DRAM的差異是DRAM數(shù)據(jù)需要持續(xù)刷新,而SRAM不需要刷新, 只要保持通電, 存儲(chǔ)的數(shù)據(jù)就能穩(wěn)定不變种蘸。SRAM采用6個(gè)晶體管保持1bit數(shù)據(jù), 導(dǎo)致單位面積容量有限, 由于無需刷新數(shù)據(jù), SRAM性能比DRAM好, 但價(jià)格高, 一般作為CPU的L1, L2, L3緩存使用墓赴。 - 寄存器
寄存器(Processor Register)是CPU內(nèi)部一小塊用于存儲(chǔ)數(shù)據(jù)的單元, 類型包括指令寄存器, 數(shù)據(jù)寄存器, 地址寄存器, 程序計(jì)數(shù)器, 通用寄存器等, 大小包括8位, 32位及64位, 主要用于處理器進(jìn)行計(jì)算或數(shù)據(jù)緩存。
1.2.非易失性存儲(chǔ)設(shè)備
- 軟盤
軟盤(floppy disk劈彪,又稱FDD)是在早期計(jì)算機(jī)中廣泛使用的存儲(chǔ)媒介竣蹦,一般是在聚氯乙烯制成的盤面上覆蓋磁性材料來記錄數(shù)據(jù)。典型的3.5英寸軟盤容量是1.44M沧奴,它包含80個(gè)磁道痘括,每個(gè)磁道有18個(gè)扇區(qū),兩面都可以存儲(chǔ)數(shù)據(jù),一個(gè)扇區(qū)512字節(jié)纲菌,故容量為80×18×2×512=1440KB挠日。軟盤主要由控制電路板、馬達(dá)翰舌、磁頭定位器和磁頭組成嚣潜。主要特點(diǎn)是小巧可插拔,方便攜帶椅贱;但容量小懂算,存取速度慢。隨著u盤庇麦,光盤计技,移動(dòng)硬盤的普及,軟盤逐漸淡出人們視野山橄。 - 光盤
光盤(compact disc)是以光信息為存儲(chǔ)載體的設(shè)備垮媒,利用激光原理來讀寫數(shù)據(jù)。主要分為2類:只讀型光盤航棱,如CD-ROM睡雇,DVD-ROM等;可擦寫光盤饮醇,如CD-RW它抱,DVD-R,DVD+R朴艰,DVD+RW等抗愁;根據(jù)光盤結(jié)構(gòu)差異(即燒錄讀取激光波長(zhǎng)和物鏡孔徑),主要分為CD呵晚,DVD蜘腌,藍(lán)光等。容量為CD(700M)饵隙、DVD(4.7G)撮珠、藍(lán)光(25G)。
結(jié)構(gòu)包括基板金矛、記錄層芯急、反射層、保護(hù)層驶俊、印刷層娶耍。其中記錄層用來存儲(chǔ)數(shù)據(jù),對(duì)于只讀型光盤饼酿,是在基板上涂抹有機(jī)染料榕酒;對(duì)于可擦寫光盤胚膊,是涂抹碳性材料。通過激光燒錄時(shí)改變碳性材料的極性或有機(jī)染料的反射率想鹰,從而形成對(duì)應(yīng)計(jì)算機(jī)二進(jìn)制碼的0和1紊婉。 - 硬盤
硬盤(hard disk,又稱HDD)是計(jì)算機(jī)主要存儲(chǔ)設(shè)備辑舷,一般是在鋁制或玻璃制碟片上覆蓋磁性材料來記錄數(shù)據(jù)喻犁,通常是會(huì)永久性固定在磁盤驅(qū)動(dòng)器中。磁盤主要包括主軸馬達(dá)何缓、柱面肢础、磁道、扇區(qū)碌廓、內(nèi)存芯片等組成乔妈,磁盤轉(zhuǎn)速(RPM)越快則內(nèi)部數(shù)據(jù)傳輸速率越快,平均訪問時(shí)間越短氓皱。服務(wù)器為了追求磁盤讀寫性能轉(zhuǎn)速通常為10000rpm,甚至高達(dá)15000rpm勃刨。幾個(gè)硬盤相關(guān)的核心概念:
平均訪問時(shí)間(access):磁頭從起始位置到達(dá)目標(biāo)磁道波材,并從目標(biāo)磁道找到訪問數(shù)據(jù)所在扇區(qū)所需時(shí)間,平均在8~12ms身隐。
平均尋道時(shí)間(seek):磁頭移到到目標(biāo)磁道時(shí)間廷区,平均等待時(shí)間:處于目標(biāo)磁道,等待需要訪問的扇區(qū)旋轉(zhuǎn)到磁頭下方的時(shí)間贾铝,為磁盤旋轉(zhuǎn)一周時(shí)間的一半隙轻,即1×60/(2×rpm)。而硬盤內(nèi)部傳輸速率主要由轉(zhuǎn)速?zèng)Q定垢揩,速度非尘谅蹋快。而外部傳輸速率和接口類型有關(guān)叁巨,例如SATA3.0理論速率高大750MB/s斑匪。數(shù)據(jù)傳輸時(shí)間非常短,基本可以忽略锋勺。因此磁盤的平均訪問時(shí)間=平均尋道時(shí)間+平均等待時(shí)間蚀瘸。 - U盤
U盤全稱是USB閃存盤(usb flash disk,UFD)庶橱,是一種采用usb標(biāo)準(zhǔn)無需物理驅(qū)動(dòng)器的微型高容量移動(dòng)存儲(chǔ)產(chǎn)品贮勃。U盤主要2部分:由PCB、USB控制芯片苏章、Flash閃存等組成的機(jī)芯以及外殼寂嘉。主要優(yōu)點(diǎn)是小巧易攜帶奏瞬、存儲(chǔ)容量大、價(jià)格便宜垫释、性能可靠丝格,目前主流的U盤容量有128/256g,最高有1T棵譬。USB3.0理論傳輸速率是500MB/s显蝌。 -
固態(tài)硬盤
固態(tài)硬盤(solid state disk,SSD)是基于閃存或DRAM作為存儲(chǔ)媒介的硬盤設(shè)備订咸。之所以成為固態(tài),就是不存在可移動(dòng)部件曼尊。
其組成部分和U盤類似,包括PCB脏嚷、主控芯片骆撇、緩存芯片、存儲(chǔ)媒介Flash或DRAM父叙∩窠迹基于閃存的存儲(chǔ)媒介在斷電后仍然能夠保存數(shù)據(jù),而基于DRAM為存儲(chǔ)媒介的固態(tài)硬盤要求有獨(dú)立電源供應(yīng)保持不斷電趾唱,F(xiàn)lash SSD是市面上主流產(chǎn)品涌乳。相對(duì)于傳統(tǒng)硬盤,優(yōu)點(diǎn)是安靜甜癞、防震夕晓、省點(diǎn)、性能好悠咱,由于無需機(jī)械尋道蒸辆,獲取任意位置數(shù)據(jù)的時(shí)間都相同,使得固態(tài)硬盤IO性能遠(yuǎn)高于傳統(tǒng)硬盤析既。Flash晶片有NOR Flash和NAND Flash兩種躬贡,由于NAND Flash容量大,寫和擦除速度快眼坏,因此大部分固態(tài)硬盤都是NAND Flash逗宜。Flash的基本電路單元是浮空柵極晶體管,每個(gè)單元稱為一個(gè)cell空骚,cell類型主要包括:1.single level cell(SLC)纺讲;2.multi level cell(MLC);3.Triple level cell(TLC); 4.Quard level cell (QLC)(備注: 歷史原因MLC專指2層單元), 單元層次越多囤屹,容量越大熬甚,價(jià)格越便宜。下面簡(jiǎn)單介紹SSD的工作原理肋坚,SSD主控芯片主要負(fù)責(zé):錯(cuò)誤糾正和檢查ECC乡括,磨損平衡(Wear Leveling)肃廓,壞塊映射(Bad block mapping),緩存控制诲泌,垃圾回收盲赊,加密等。傳統(tǒng)硬盤的讀寫基本單元是扇區(qū)敷扫,通常是512字節(jié)哀蘑;而固態(tài)硬盤的基本讀寫單元稱為page,每個(gè)page由一堆cell組成葵第,page分為2部分绘迁,一部分存儲(chǔ)數(shù)據(jù),一部分存儲(chǔ)ECC及其他信息卒密;不同型號(hào)SSD的page不一樣缀台,一般page由2048字節(jié)數(shù)據(jù)區(qū)和64字節(jié)空閑區(qū)組成,共2112字節(jié)哮奇。每128個(gè)page組成一個(gè)block膛腐。由于電路構(gòu)造原因,block是數(shù)據(jù)擦除最小單元鼎俘,不同于傳統(tǒng)磁盤哲身,block寫入數(shù)據(jù)后不能直接覆蓋,需要擦除后變?yōu)榭瞻譩lock才允許寫入新數(shù)據(jù)而芥。SSD控制器會(huì)維護(hù)一個(gè)mapping table,記錄邏輯地址和物理地址的映射關(guān)系膀值,當(dāng)讀取邏輯Page頁時(shí)棍丐,需要通過mapping table找到物理Page頁地址,然后在Flash讀取相應(yīng)數(shù)據(jù)沧踏。由于Flash無法覆蓋寫歌逢,因此容易產(chǎn)生很多垃圾數(shù)據(jù),為了解決這個(gè)問題翘狱,SSD有垃圾回收機(jī)制秘案,在寫入新數(shù)據(jù)時(shí),如果SSD控制器無法找到找到可以寫入的空Page時(shí)潦匈,會(huì)選擇若干block阱高,將仍然有效的page復(fù)制到某個(gè)block,然后將原來的block進(jìn)行擦除以便回收空間茬缩,由于有這個(gè)垃圾回收過程赤惊,因此SSD在寫入大量數(shù)據(jù)后,也會(huì)變慢凰锡。為了保持gc時(shí)有空白block能夠用于遷移數(shù)據(jù)未舟,一般SSD都會(huì)有7%的預(yù)留空間(Over Provisioning)圈暗,這部分空間無法對(duì)外使用,由SSD用來進(jìn)行垃圾回收裕膀、備用壞塊等员串。預(yù)留空間越大,垃圾回收越快昼扛,F(xiàn)lash損耗越小寸齐,F(xiàn)lash損耗用P/E數(shù)(Program/Erase Count)來衡量∫熬荆考慮到SSD可能會(huì)對(duì)某些block進(jìn)行頻繁擦寫访忿,比如操作系統(tǒng)日志可能頻繁更新,導(dǎo)致不同block的損耗不均衡斯稳,為了保證所有block的損耗是均衡了海铆,采用了磨損平衡(Wear Leveling)機(jī)制。
因?yàn)镕lash無法覆寫即垃圾回收機(jī)制挣惰,因此引入了寫放大(write amplification)機(jī)制卧斟,寫放大倍數(shù)=閃存寫入數(shù)據(jù)量/主控寫入數(shù)據(jù)量,當(dāng)flash是空盤時(shí)憎茂,寫放大倍數(shù)為1珍语;當(dāng)出現(xiàn)垃圾回收時(shí),由于寫入數(shù)據(jù)時(shí)要遷移page竖幔,寫放大倍數(shù)可能大于1.
1.3.總結(jié)
表1: 設(shè)備大小和性能對(duì)比, 由于不同設(shè)備性能存在差異, 表1描述了相關(guān)設(shè)備的典型參數(shù).
寄存器 | 緩存SDRAM | 主內(nèi)存DRAM | 固態(tài)硬盤SSD | 硬盤HDD | |
---|---|---|---|---|---|
大小 | 1000~4000byte | 64KB~64MB | 4~256GB | 256GB~1TB | 16~64TB |
性能 | 0.2~0.3ns | 1~20ns | 50~100ns | 0.025~0.2ms | 5~10ms |
價(jià)格美元/GB, 2012年數(shù)據(jù) | * | 500~1000 | 10~20 | 0.75~1 | 0.05~0.1 |
2.存儲(chǔ)器層次結(jié)構(gòu)設(shè)計(jì)
2.1 存儲(chǔ)器層次結(jié)構(gòu)
在開始本章節(jié)前, 首先給出計(jì)算機(jī)發(fā)展過程中的3個(gè)知名定律或原則:
- 摩爾定律:1965 Gordon Moore 預(yù)測(cè)芯片中晶體管數(shù)量每2年增加一倍板乙。(已經(jīng)變緩,2015年終結(jié)拳氢,目前每年3.5%)
- Dennard scaling:1974年Dennard提出募逞,晶體管不斷變小,但芯片的功率密度不變馋评。要保持功率密度不變, 意味著電壓和電流得減半放接。(2003年終結(jié), 實(shí)際上為保持可靠性,電壓和電流無法繼續(xù)下降, 隨著晶體管變小, 靜態(tài)功率也無法再忽視了留特。)
- 阿姆達(dá)爾定律:1967年纠脾,不斷提升的處理器數(shù)量會(huì)導(dǎo)致性能提升遞減。并行計(jì)算的理論加速受到任務(wù)順序部分的限制蜕青。
雖然近年摩爾定律和Denard scaling開始失效, CPU的增長(zhǎng)已經(jīng)放緩, 但CPU和存儲(chǔ)器之間性能仍存在指數(shù)級(jí)差異苟蹈。
理想情況下, 我們希望擁有無限大的內(nèi)存容量, 這樣就可以訪問任意一個(gè)特定的機(jī)器字(指令或數(shù)據(jù)), 但考慮到實(shí)際情況, 我們不得不設(shè)計(jì)一個(gè)分層結(jié)構(gòu)的存儲(chǔ)器, 每一層比前一層容量更大, 但訪問速度也更慢。這種經(jīng)濟(jì)而又實(shí)用的解決方案就是存儲(chǔ)器層次結(jié)構(gòu)(memory hierarchy), 這一方案充分利用了局部性原理以及"在給定技術(shù)和功耗要求下, 硬件尺寸越小, 性能越快"的準(zhǔn)則右核。
存儲(chǔ)結(jié)構(gòu)劃分為幾個(gè)級(jí)別, 約接近CPU, 硬件容量越小, 速度越快, 而單位字節(jié)成本也越高. 通過這種設(shè)計(jì), 目標(biāo)是提供一種存儲(chǔ)體系, 每字節(jié)的成本和最便宜的存儲(chǔ)器級(jí)別相同, 而速度與最快速的級(jí)別相同. 低層級(jí)存儲(chǔ)器包含上一級(jí)存儲(chǔ)器中的數(shù)據(jù), 層次結(jié)構(gòu)的最低一層必需滿足這一包含性質(zhì). 計(jì)算機(jī)體系架構(gòu)中存儲(chǔ)器結(jié)構(gòu)如下所示:
L1 | L2 | L3 | 內(nèi)存 | |
---|---|---|---|---|
大小 | 64kB | 256kB | 16~64MB | 32~256GB |
速度 | 1ns | 3~10ns | 10~20ns | 50~100ns |
2.2.基本概念
-
緩存布局
主內(nèi)存和緩存中移動(dòng)數(shù)據(jù)的基本單位是塊(block, 或稱為行l(wèi)ine), 一般包括多個(gè)字, 主要是為了性能考慮, 利用了空間局部性原理汉操。設(shè)計(jì)時(shí)需要考慮塊如何放置在緩存中, 常見方案是組相連(set associative), 組由多個(gè)塊組成, 查找一個(gè)塊時(shí), 首先需要映射到組, 然后在組內(nèi)進(jìn)行搜索. 組的映射: [塊地址] MOD [緩存中組數(shù)], 如果組中有n個(gè)塊, 則稱為n路組相聯(lián)(n-way set associative), 如果n為1, 則是直接映射(direct mapped), 如果只有一個(gè)組, 則稱為全相聯(lián)(fully associative)
寫緩存策略
為了保證緩存和存儲(chǔ)器中副本一致, 通常有3種策略
直寫(write through): 更新緩存, 并直接寫入存儲(chǔ)器進(jìn)行更新
回寫(write back): 僅更新緩存, 此時(shí)塊被標(biāo)記為臟塊, 只有在塊替換時(shí)才將其更新回存儲(chǔ)器
后寫(write behind): 僅更新緩存, 并記錄臟記錄列表, 定期將臟記錄刷回存儲(chǔ)器
為了提高寫性能, 兩種策略都是用了寫緩沖(write buffer), 將數(shù)據(jù)寫入緩沖區(qū)后, 馬上進(jìn)行緩存操作, 而無需等待將數(shù)據(jù)寫入存儲(chǔ)器.
采用只寫能更好的解決緩存一致性問題, 但直寫代價(jià)高, 通常在L1采用直寫, 而L2/L3采用回寫方式
通過缺失率(miss rate)來衡量緩存組織的性能, 缺失率=緩存中未找到數(shù)據(jù)請(qǐng)求數(shù)/總請(qǐng)求數(shù).
缺失產(chǎn)生的類型(4C模式)主要分為:
1.強(qiáng)制(Compulsory):指首次訪問時(shí),數(shù)據(jù)不在緩存中
2.容量(Capacity):指緩存無法包含所有的數(shù)據(jù)塊蒙兰,因此有些塊需要淘汰, 在訪問時(shí)需重新放回緩存
3.沖突(Conflict):指多個(gè)數(shù)據(jù)塊可能映射到一個(gè)組中磷瘤,不同塊的訪問混在一起芒篷,可能導(dǎo)致需要先將一個(gè)塊淘汰,之后重新加載
4.一致性(coherency):指在多處理器和多線程中采缚,需要將緩存刷新以保持多個(gè)處理器緩存中的數(shù)據(jù)一致性针炉。
存儲(chǔ)器平均訪問時(shí)間=命中時(shí)間+缺失率×缺失代價(jià)
提升缺失率的方法包括:
(1) 增大塊
(2) 增大緩存
(3) 提高相聯(lián)程度
(4) 采用多級(jí)緩存 ??在加快緩存命中速度以跟上高速時(shí)鐘頻率和加大緩存,縮小處理器訪問和存儲(chǔ)器訪問之間的差距中間很難抉擇, 但是可以通過多級(jí)緩存方案, L1緩存足夠小, 以便跟上時(shí)鐘頻率; L2或L3緩存足夠大, 以便能夠更多容納數(shù)據(jù)減小對(duì)存儲(chǔ)器的訪問
(5)讀缺失優(yōu)先級(jí)高于寫入操作 ??讀取缺失時(shí)先檢查緩沖區(qū)的內(nèi)容, 在沒有沖突時(shí), 則在寫入操作之前讀取數(shù)據(jù)從而降低寫缺失
(6)緩存索引期間避免地址轉(zhuǎn)換 ?? 由于需要將處理器的虛擬地址轉(zhuǎn)換為存儲(chǔ)器的物理地址, 轉(zhuǎn)換旁視緩沖區(qū)(translation look aside buffer, TLB)
-
虛擬內(nèi)存
虛擬存儲(chǔ)器(virtual memory, 又稱虛擬內(nèi)存)是操作系統(tǒng)對(duì)內(nèi)存的管理方式, 能夠在物理內(nèi)存不足時(shí)將數(shù)據(jù)在輔助存儲(chǔ)(磁盤或Flash)和主存中換入和換出,這種虛擬化的方式使得對(duì)用戶來說存在一個(gè)比實(shí)際物理內(nèi)存更大的一塊內(nèi)存扳抽,被稱為虛擬內(nèi)存空間篡帕。程序使用虛擬地址, 而處理器只能通過地址總線訪問主內(nèi)存,計(jì)算機(jī)通過軟硬件結(jié)合的方式完成虛擬地址到物理地址的映射(地址轉(zhuǎn)換), 硬件部分是CPU中的內(nèi)存管理單元(Memory Management Unit, MMU),軟件部分則通過操作系統(tǒng)的內(nèi)存管理模塊(如頁表)贸呢。對(duì)于程序來說主內(nèi)存和用于虛擬內(nèi)存的磁盤組成了一個(gè)完整的連續(xù)地址空間镰烧。通過虛擬內(nèi)存技術(shù), 實(shí)現(xiàn)了對(duì)主內(nèi)存和輔助內(nèi)存的2級(jí)存儲(chǔ)器層次結(jié)構(gòu)的自動(dòng)化管理, 減輕了程序員的壓力。使得既可以共享內(nèi)存空間, 增加了安全保護(hù)(虛擬內(nèi)存保護(hù)了進(jìn)程的地址空間不被其他進(jìn)程訪問), 并提高了可用內(nèi)存空間楞陷。
虛擬存儲(chǔ)器中基本單位是頁(Page), 一般大小是4KB, 虛擬地址空間中的虛擬頁(Virtual Page)和主內(nèi)存中的物理頁(Physical Page)大小一樣, 虛擬地址空間大小由處理器的地址大小決定, 為了通過虛擬地址定位頁內(nèi)位置, 需要2^p位, 我們選擇虛擬地址的低p位作為偏移量, 選擇低位的原因是利用空間局部性原理, 相鄰地址對(duì)應(yīng)同一個(gè)page或相鄰page, 同樣選擇物理地址的低p位作為偏移量. 虛擬地址由虛擬頁號(hào)(virtual page number, VPN)和偏移量(offset, VPO)組成, 物理地址由物理頁號(hào)(physical page number, PPN)和偏移量(offset, PPO)組成, 需要維護(hù)一個(gè)單獨(dú)的頁表(page table)來實(shí)現(xiàn)虛擬頁號(hào)到物理頁號(hào)的映射. 當(dāng)物理頁在主內(nèi)存中不存在時(shí), 則出現(xiàn)頁缺失(page fault), 此時(shí)會(huì)觸發(fā)頁缺失異常, 由處理器中斷, 切換到頁中斷處理函數(shù)(page fault handler), 從輔助存儲(chǔ)中加載對(duì)應(yīng)的頁數(shù)據(jù)到主內(nèi)存. 如果主內(nèi)存中沒有空間用于存儲(chǔ)新的頁數(shù)據(jù)時(shí), 則需要采用頁替換策略選擇替換頁, 一般采用最近最少使用(LRU)策略, 將LRU頁內(nèi)容換出到輔助內(nèi)存, 將空出的物理頁用于存儲(chǔ)新訪問的缺失虛擬頁內(nèi)容, 這種處理模式稱為頁面調(diào)度(paging), 這種調(diào)度也稱為按需調(diào)度(demand paging), 由程序的需要將相應(yīng)頁從輔助內(nèi)存加載到主內(nèi)存.
程序工作集(working set)是指程序運(yùn)行需要保持在主內(nèi)存中活動(dòng)頁集合, 程序開始運(yùn)行后, 通過不斷的頁缺失調(diào)度, 工作集會(huì)逐步穩(wěn)定, 頁缺失也會(huì)逐步變少, 從而使得程序只需訪問主內(nèi)存即可運(yùn)行, 這也是局部性原理來保證的, 如果程序編寫的不好, 可能會(huì)頻繁發(fā)生頁缺失, 造成頻繁從輔助內(nèi)存讀取數(shù)據(jù)到主內(nèi)存, 這種現(xiàn)象稱為抖動(dòng)(thrashing), 需要盡量避免.
頁表中的每一項(xiàng)(page table item, PTE)除了維護(hù)虛擬頁號(hào)到物理頁號(hào)的映射, 還會(huì)記錄額外信息
臟位(dirty bit): 1表示數(shù)據(jù)從輔助存儲(chǔ)加載到內(nèi)存后數(shù)據(jù)發(fā)生修改, 如果臟頁發(fā)生替換, 需要首先將臟頁內(nèi)容刷會(huì)輔助存儲(chǔ)
駐留位(resident bit): 1表示頁駐留在主內(nèi)存, 0表示未駐留(可能在磁盤或者未分配).
下圖是頁缺失的例子, 當(dāng)cpu訪問的虛擬地址對(duì)應(yīng)的物理地址頁缺失, 數(shù)據(jù)在內(nèi)存時(shí), 此時(shí)主內(nèi)存已滿, 會(huì)選擇一個(gè)LRU頁, 將該頁內(nèi)容放回磁盤, 缺失頁數(shù)據(jù)加載到物理內(nèi)存中
由于地址轉(zhuǎn)換VtoP在每次CPU進(jìn)行內(nèi)存訪問時(shí)都會(huì)發(fā)生, 為了提升查找page table的性能, 可以考慮專用硬件設(shè)備, 如SRAM來作為緩存, 避免CPU每次都查找主內(nèi)存. 這種專用設(shè)備被稱為轉(zhuǎn)址旁路緩存(translation lookaside buffer , TLB), 位于CPU中. TLB非常小且速度快, 采用全相聯(lián)緩存布局, 在TLB命中時(shí)只需一次物理內(nèi)存訪問, 通常命中率高達(dá)99%.
上下文(context)是指每個(gè)程序維護(hù)的一個(gè)虛擬地址到物理地址的映射, 每個(gè)程序有單獨(dú)上下文, 在程序切換時(shí)由操作系統(tǒng)選擇合適的上下文加載到映射表; 此外, 提供了保護(hù)機(jī)制用于區(qū)分內(nèi)核態(tài)(kernel)和用戶態(tài)(user), 比如中斷處理只能由OS切換到內(nèi)核態(tài)調(diào)用.
為了避免每個(gè)上下文有獨(dú)立的映射表, 造成上下文切換代價(jià)高昂(TLB需要清空重新加載), 高效的上下文切換方案調(diào)整為TLB中包含上下文信息(上下文id)
實(shí)際地址空間被分為多個(gè)區(qū)域進(jìn)行管理, 調(diào)度方式有分頁式怔鳖、段式、段頁式. 如下圖所示, 被劃分為獨(dú)立區(qū)間, 如代碼碼, 保留的中斷處理, 堆空間和椆潭辏空間等.
頁映射也可以采用層次結(jié)構(gòu), 使用多級(jí)緩存可以減小頁映射表的大小. 如圖所示, 采用2級(jí)映射時(shí), 一級(jí)頁和二級(jí)頁只有1024PTE, 考慮到程序局部性原理, 可以只需要緩存部分項(xiàng), 尤其是在多進(jìn)程, 每個(gè)進(jìn)程有自己的上下文時(shí), 可以極大節(jié)省TLB占用.
- b
3.操作系統(tǒng)文件系統(tǒng)設(shè)計(jì)
9.擴(kuò)展閱讀
TODO
10.參考文獻(xiàn)
【1】Computer Architecture: A Quantitative Approach (6th)
【2】NAND Flash電路單元SLC&MLC&TLC的區(qū)別
【3】Architecture of an SSD and Benchmarking
【4】Computer Organization And Design (5th)
【5】計(jì)算機(jī)結(jié)構(gòu): MIT課程
【6】Virtual memory - Wikipedia