深入理解計算機系統 虛擬儲存器

2022-08-21 17:09:09 字數 1893 閱讀 9354

現代作業系統普遍採用虛擬儲存器,說白了虛擬儲存器是不真實存在的,是作業系統虛擬的,在磁碟上開闢的空間,該虛擬儲存器可以在任何磁碟上。

1、虛擬儲存器提供了三個重要的能力:

1.1、將主存看做是乙個快取記憶體,快取最近使用的存放磁碟上的虛擬位址空間的內容,將虛擬位址與整個磁碟進行對映,主存中儲存這種對映的頁表,如果缺頁,調入主存,儲存器對映。

1.2、

為每乙個程序提供了一致的位址空間,簡化了連線、共享資料以及程式載入。

1.3、

保護每個程序的位址空間不被其他程序破壞。

2、在記憶體中,大體分為兩種內容,除了給每個程序分配一定的虛擬位址之外,記憶體中還要維持乙個核心虛擬儲存器,在核心虛擬儲存器中,包括與程序相關的資料機構(頁表,任務結構等)、物理儲存器和核心**資料。在虛擬儲存器中為每乙個程序維持乙個任務結構,以鍊錶的形式表示程序的每乙個區域。

3、頁表將虛擬位址對映為實體地址,每個頁表項

(pte)

,有乙個有效位,標識該位址是否在記憶體的快取中,還有物理頁號或磁碟位址。

3.1、頁命中,收到虛擬位址時,根據該虛擬位址查詢頁表,如果有效位有效,則說明在記憶體中,則利用該位址構造實體地址。

3.2、缺頁,如果位址不再頁表中,則犧牲一條記錄,載入進新的位址對映和內容。

4、在實際中,作業系統為每乙個程序提供獨立的頁表,因此也是獨立的虛擬位址空間,按需頁面排程和獨立的虛擬位址空間的結合,可以簡化鏈結(可執行檔案獨立於物理儲存器中**和資料的最終位置,目標檔案知道資料的相對位置,連線的時候,只需加上基位址即可)、簡化載入(容易向儲存器中載入可執行檔案和共享物件檔案,不需拷貝任何資料,虛擬儲存器會自動按需調入資料頁)、簡化共享、簡化儲存器分配(只需虛擬位址連續即可,實體地址可以不連續)、保護工具(在

pte中,可以加許可位,控制對虛擬頁面的訪問)。

5、位址翻譯:得到虛擬位址之後,分為兩部分,前部分虛擬頁號,後部分偏移位址,根據虛擬頁號在頁表中找到物理頁號,偏移位址不變,直接物理頁號和偏移位址構成實體地址。該模組位於

cpu內。

每次翻譯虛擬位址時,都需要到記憶體訪問頁表,為了加快速度,在

cpu內直接再弄乙個快取表,快取

tbe的內容,稱為

tlb。

6、翻譯整個過程

位址翻譯單元從虛擬位址中拿到虛擬頁號,檢查

tlb,看是否存在

tpe的快取,如果有返回,若沒有,查詢主存的頁表,頁表可以實現多級,拿到物理頁號,如沒有產生中斷,調入位址,核心重新傳送解析指令,最終返回實體地址;得到實體地址之後,將實體地址發給

l1快取,

l1沒有l2、

l3、主存。

7、儲存器對映:將乙個虛擬儲存器區域與乙個磁碟上的物件關聯起來,以初始化這個虛擬儲存器區域的內容,一旦乙個虛擬頁面被初始化了,他就在乙個由核心維護的專門的交換檔案之間換來換去。這個概念可以擴充套件到傳統的檔案系統,這樣通過儲存器的對映,高效的把資料載入到儲存器中。

8、動態儲存器分配:堆,分為顯示分配

(new)

,隱式分配

(垃圾**)。

9、malloc

原理,根據系統的對齊策略,進行分配,可以重複使用已經釋放的位址。由於對齊可能產生內部碎片,由於重複使用,可能產生外部碎片。至於消除碎片的方法有很多,可採取維護空閒列表,不同的放置、分割、合併策略,在分配的時候採取首次適配、下一次適配和最佳適配。

10、垃圾收集:採用何種方式來辨別垃圾吶,系統採用的是圖的方式進行,將儲存器視為一張有向圖,每個節點是根節點或堆節點,節點表示的乙個分配塊,如果在乙個塊中指向另乙個塊的某個位置,就連線,當存在一條從任意根節點出發並到達堆節點的有向路徑時,視為可達,那些不可達的節點就是垃圾節點。再進行**時,有兩個階段,標記和**,標記垃圾節點,清除。

11、程序記憶體分布

引數返回位址bp棧

共享堆bss:未初始化資料

data:全域性,靜態。

**段

深入理解計算機系統 儲存結構

1 計算機的儲存結構是金字塔形的,一般來說cpu的週期時間 暫存器 高速sram 說明 ssd是一種基於快閃儲存器的儲存技術,乙個快閃儲存器由塊組成,每個塊又由頁組成,資料以頁為單位讀寫。ram 分為sram和dram,dram需要週期的進行重新整理,ram是易失性儲存器,一旦斷電全部消失。rom ...

深入理解計算機系統 陣列儲存

首先我們要知道,陣列的元素儲存的位址是連續的。一維陣列很好理解,接下來看看二維陣列的空間分布 對於上面這個例子,我們可以將a看成具有五個元素,且每個元素都是3個int長度的一維陣列儲存。分析例子 int main for i 0 i 5 i return sum 翻譯成彙編 main pushl e...

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...