存儲(chǔ)設(shè)備基礎(chǔ)

計(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的原因诗箍。


    DRAM內(nèi)部組成結(jié)構(gòu),來源【1】

    現(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)部件曼尊。


    SSD架構(gòu),來源【3】

其組成部分和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)存性能差異

理想情況下, 我們希望擁有無限大的內(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)

存儲(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)如下所示:


CPU&緩存&內(nèi)存層次結(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)存空間楞陷。


    虛擬內(nèi)存機(jī)制

虛擬存儲(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)存.


地址構(gòu)成及地址映射

程序工作集(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)存中


18D4D663F9641890F37CFAE61737F636.jpg

由于地址轉(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%.


基于TLB地址轉(zhuǎn)換

上下文(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占用.


多級(jí)頁映射
  • 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末结执,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子艾凯,更是在濱河造成了極大的恐慌献幔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾诗,死亡現(xiàn)場(chǎng)離奇詭異蜡感,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恃泪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門郑兴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悟泵,你說我怎么就攤上這事杈笔∩了” “怎么了糕非?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)球榆。 經(jīng)常有香客問我朽肥,道長(zhǎng),這世上最難降的妖魔是什么持钉? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任衡招,我火速辦了婚禮,結(jié)果婚禮上每强,老公的妹妹穿的比我還像新娘始腾。我一直安慰自己州刽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布浪箭。 她就那樣靜靜地躺著穗椅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奶栖。 梳的紋絲不亂的頭發(fā)上匹表,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天,我揣著相機(jī)與錄音宣鄙,去河邊找鬼袍镀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冻晤,可吹牛的內(nèi)容都是我干的苇羡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼明也,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宣虾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起温数,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤绣硝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撑刺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹉胖,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年够傍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甫菠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冕屯,死狀恐怖寂诱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情安聘,我是刑警寧澤痰洒,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站浴韭,受9級(jí)特大地震影響丘喻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜念颈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一泉粉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦嗡靡、人聲如沸跺撼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财边。三九已至,卻和暖如春点骑,著一層夾襖步出監(jiān)牢的瞬間酣难,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工憨募, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菜谣。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尾膊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冈敛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在簡(jiǎn)單模型中鸣皂,存儲(chǔ)器系統(tǒng)是一個(gè)線性的字節(jié)數(shù)組,CPU能夠在一個(gè)常數(shù)訪問每個(gè)存儲(chǔ)器位置寞缝。 雖然是一個(gè)行之有效的模型,...
    ShawnPanCn閱讀 1,025評(píng)論 0 0
  • 概述 現(xiàn)代操作系統(tǒng)了提供了一種對(duì)主存的抽象概念荆陆,叫做虛擬內(nèi)存。它為每個(gè)進(jìn)程提供了一個(gè)非常大的被啼,一致的和私有的地址空...
    要上班的斌哥閱讀 16,390評(píng)論 2 55
  • 又是一年秋招季术健,哎呀媽呀我被虐的慘來~這不汹碱,前幾陣失蹤沒更新博客咳促,其實(shí)是我偷偷把時(shí)間用在復(fù)習(xí)課本了(霧 堅(jiān)持在社區(qū)...
    tengshe789閱讀 1,993評(píng)論 0 8
  • 9.虛擬存儲(chǔ)器 為了更加有效地管理存儲(chǔ)器且少出錯(cuò)稚新,現(xiàn)代系統(tǒng)提供了對(duì)主存的抽象概念,叫做虛擬存儲(chǔ)器(VM)跪腹。 虛擬存...
    ShawnPanCn閱讀 758評(píng)論 0 0
  • 存儲(chǔ)器的層次結(jié)構(gòu)‘ 多層結(jié)構(gòu)的存儲(chǔ)器系統(tǒng) 存儲(chǔ)器的多層結(jié)構(gòu)褂删。 存儲(chǔ)層次至少應(yīng)具有三級(jí):最高層為 CPU 寄存器,中...
    傻傻傻瓜_d432閱讀 851評(píng)論 0 0