計組—虛擬存儲器
虛擬存儲器可謂是計組和操作糸統(tǒng)綜合性非常強的知識點了。 首先是為什么要引入虛擬存儲器,眾所周知,我們在工作時,計算機需要訪存數(shù)據(jù),為了解決速度不匹配問題,引入了內(nèi)存和cpu進行數(shù)據(jù)交流來處理。但是這就是在用硬件速度來解決問題,硬件造價很貴,不可能有很大的容量用來處理數(shù)據(jù)。因此我們平時在使用時為了擴大容量同時又能保持一定的速度,引入了虛擬存儲器(稍顯啰嗦) 虛擬存儲器其實就是把主存和輔存統(tǒng)籌在一起,二者在硬件和糸統(tǒng)軟件的共同管理下工作。虛擬存儲器具有主存的速度和輔存的容量。 虛擬存儲器將主存和輔存的地址空間統(tǒng)一編址,從而形成一個龐大的地址空間。用戶編程所涉及地址為虛地址或邏輯地址。實際的主存單元地址為實地址或物理地址。虛地址比實地址要大很多。 cpu用虛地址,即是找出虛地址和實地址對應關系,并判斷虛地址對應內(nèi)容是否裝入主存。若存在則直接訪問主存實際單元,若不存在則需要把一頁或一段調(diào)入主存,若主存已滿還需要替換算法。 虛擬存儲器和cache類似,將比較常用的數(shù)據(jù)副本放入主存,采用全相聯(lián)映射,寫操作用回寫法。 一、頁式虛擬存儲器 1)虛擬地址:虛頁號+頁內(nèi)地址 2)頁表:虛擬地址到物理地址的轉(zhuǎn)換,虛頁號和實頁號的對照表。一般長久地保存在內(nèi)存中。 3)快表(TLB):因為頁表在主存,因此訪存時要先訪問一次主存去查頁表,再訪問一次主存才能得到數(shù)據(jù)。訪存次數(shù)太多。因此將經(jīng)常訪問的一些頁表項放入高速緩沖器組成的快表(TLB)中。相應的把存在主存中的頁表稱為慢表(page這個不重要)。通??毂碛萌嗦?lián)或組相聯(lián)方式。 TLB由標記字段和頁表項內(nèi)容組成,標記內(nèi)容就是全相聯(lián)下頁表項對應的虛頁號。組相聯(lián)下則是對應虛頁號的高位部分。 4)具有TLB和cache的多級存儲糸統(tǒng): 如圖所示,此處引用王道書p133,此圖也是p139中2018年統(tǒng)考真題。
下面簡要地從我的角度闡述一下流程,首先將起點定位cpu,cpu給出一個32位的虛擬地址用以查找,這里虛擬地址分為虛頁號和頁內(nèi)地址。通過虛頁號與TLB中的tag位進行對比,若相等且有效位為1,那么說明命中快表,可以直接通過快表查找虛擬地址對應物理地址的實頁號和頁內(nèi)地址。 如果沒有命中,按照TLB缺失進行處理。需要訪問主存來找頁表,這里用的是兩級頁表表示方法要先找頁目錄然后對應找到頁表所在位置,再將頁表中訪問的對應表項更新調(diào)入到TLB中,滿足程序局部性原理。若TLB更新調(diào)入前已經(jīng)滿了,還需要設置替換策略。 在地址轉(zhuǎn)換后,需要將物理地址按照一定的映射方式映射到cache中,此圖用的是二路組相聯(lián),可以看到一個組號對應兩行。將標記位與物理地址高位進行對比,若對比成功且有效位為1,那么cache命中,可以取塊內(nèi)地址來查找到所求數(shù)據(jù)送入cpu。 查找的時候快表慢表可以同時查,這里就有三種缺失情況①TLB缺失②cache缺失③page缺失,不在主存中。
二、段式虛擬存儲器 其實簡單理解就是把頁式虛擬存儲器的頁換成了段,頁表變成了段表。而段相比于頁是長度可變的,因此就需要記錄某個段對應的斷號、裝入位、段起點和段長。
優(yōu)點:具有邏輯獨立性,易于編譯,管理,共享等等。(總之方便操作) 缺點:很顯而易見,分配空間是比較繁瑣的,而且容易產(chǎn)生碎片,造成浪費。 三、段頁式虛擬存儲器 把程序按邏輯結構先分段,然后在段內(nèi)再分成大小固定的頁。主存調(diào)入單位仍是頁。每個程序?qū)粋€段表,每段對應一個頁表。 由此得到,虛地址分為段號、段內(nèi)頁號、頁內(nèi)地址。cpu虛地址訪存,段號得段表地址,段表取出頁表起始地址,與虛地址段內(nèi)頁號合并成頁表地址,頁表地址取出實頁號再與頁內(nèi)地址拼成主存實地址。 優(yōu)點:兼具段和頁的有點餓,按段實現(xiàn)共享和保護。 缺點:兩次訪存查表,糸統(tǒng)開銷較大。 ps:這塊打字累死人,但是沒辦法,平板買的二手的沒配筆,不好畫圖,簡單做點筆記湊合看看吧。