第十四周學習總結

20145332盧鑫發表於2016-12-16

學號20145332 《資訊保安系統設計基礎》第十四周學習總結

9.1 物理和虛擬定址

實體地址:
  計算機系統的主存被組織成一個由M個連續的位元組大小的單元組成的陣列,每位元組都有一個唯一的實體地址PA。
根據實體地址定址的是物理定址。

 虛擬地址:
虛擬儲存器被組織為一個由存放在磁碟上的N個連續的位元組大小的單元組成的陣列。
使用虛擬定址時,CPU通過生成一個虛擬地址VA來訪問主存,這個虛擬地址在被送到儲存器之前先轉換成適當的實體地址

9.2 地址定址

是一個非負整數地址的有序集合。如若地址空間中的整數是連續的,那麼這就是一個線性地址空間
地址空間區分了資料物件(位元組)和他們的屬性(地址)

9.3 虛擬儲存器作為快取的工具

在任意時刻,虛擬頁面的集合都被分為三個不相交的子集:
①未分配的:VM系統還沒分配/建立的頁,不佔用任何磁碟空間。
②快取的:當前快取在物理儲存器中的已分配頁
③未快取的:沒有快取在物理儲存器中的已分配頁

·DRAM快取的組織結構:
①不命中處罰很大
②是全相聯的——任何虛擬頁都可以放在任何的物理頁中。
③替換演算法精密
④總是使用寫回而不是直寫。
·頁表:是一個資料結構,存放在物理儲存器中,將虛擬頁對映到物理頁。
就是一個頁表條目PTE的陣列
·缺頁:就是指DRAM快取不命中。
缺頁異常:會呼叫核心中的缺頁異常處理程式,選擇一個犧牲頁。
頁:虛擬儲存器的習慣說法,就是塊
交換=頁面排程:磁碟和儲存器之間傳送頁的活動
按需頁面排程:直到發生不命中時才換入頁面的策略,所有現代系統都使用這個。

9.4 虛擬儲存器作為儲存器管理的工具

作業系統為每個程式提供了一個獨立的頁表,也就是一個獨立的虛擬地址空間。
抖個虛擬頁面可以對映到同一個共享物理頁面上。
儲存器對映:將一組連續的虛擬頁對映到任意一個檔案中的任意位置的表示法。

9.5 虛擬儲存器作為儲存器保護的工具

 任何現代計算機系統必須為作業系統提供手段來控制對儲存器系統的訪問。
 地址翻譯機制以一種自然的方式擴充套件到提供更好的訪問控制。每次CPU生成一個地址時,地址翻譯硬體都會讀一個PTE,所以通過在PTE上新增一些額外的許可位來控制對一個虛擬頁面內容的訪問十分簡單。

9.6 地址翻譯

1.地址翻譯:是一個N元素的虛擬地址空間(VAS)中的元素和一個M元素的實體地址空間(PAS)中元素之間的對映。
2.頁表基址暫存器:
CPU中的一個控制暫存器,叫做頁表基址暫存器(page table base register,PTBR)指向當前頁表。N位的虛擬地址包含兩個部分:一個p位的VPO(virtual page offset,虛擬頁面偏移)和一個n-p位的VPN(virtual page number)。MMU利用VPN來選擇適當的PTE。如VPN0選擇PTE0。因為物理和虛擬頁面都是p位元組的,所以PPO(physical page offset物理頁面偏移)和VPO是相同的,所以,將頁表條目中PPN(physical page number,物理頁號)和虛擬地址中的VPO串聯起來,就是相應的實體地址。
3.頁面命中完全由硬體處理的,而處理缺頁要求硬體和OS核心協作完成。
4.結合快取記憶體和虛擬儲存器
大多數系統是選擇物理定址的方式來訪問快取記憶體。使用物理定址,多個程式同時在快取記憶體中有儲存塊和共享來自相同虛擬頁面的塊成為簡單的事情。而且,快取記憶體無需處理保護的問題,因為訪問許可權的檢查是地址翻譯過程中一部分。
5.利用TLB加速地址翻譯
在MMU中包括一個關於PTE的小的快取,稱為TLB。TLB是一個小的,虛擬定址的快取,其中每一行都儲存著一個由單個PTE組成的塊。
6.多級頁表
多級頁表——採用層次結構,用來壓縮頁表。

9.8 儲存器對映

儲存器映器:指Linux通過將一個虛擬儲存器區域與一個磁碟上的物件關聯起來,以初始化這個虛擬儲存器區域的內容的過程。
共享物件:共享物件對於所有把它對映到自己的虛擬儲存器程式來說都是可見的。即使對映到多個共享區域,物理儲存器中也只需要存放共享物件的一個拷貝。
私有物件:私有物件運用的技術:寫時拷貝,在物理儲存器中只儲存有私有物件的一份拷貝。
mmap函式要求核心建立一個新的虛擬儲存器區域

9.9 動態儲存器分配

·分配器的要求和目標:
要求:處理任意請求序列、立即響應請求、只使用堆、對齊塊、不修改已分配的塊
目標:最大化吞吐率(吞吐率:每個單位時間裡完成的請求數)
最大化儲存器利用率——峰值利用率最大化
·碎片(雖然有未使用的儲存器,但是不能用來滿足分配請求時,發生這種現象):
內部碎片:發生在一個已分配塊比有效載荷大的時候
易於量化。
外部碎片:發生在當空閒儲存器合計起來足夠滿足一個分配請求,但是沒有一個單獨的空間塊足以處理這個請求時發生
難以量化,不可預測。
·隱式空閒連結串列
堆塊的格式:由一個字的頭部,有效荷載,和可能的額外填充組成。
·放置已分配的塊
①首次適配:從頭開始搜尋空閒連結串列,選擇第一個合適的空閒塊
②下一次適配:從上一次搜尋的結束位置開始搜尋
③最佳適配:檢索每個空閒塊,選擇適合所需請求大小的最小空閒塊
·合併空閒塊:合併是針對於假碎片問題的,任何實際的分配器都必須合併相鄰的空閒塊。
兩種策略:立即合併、推遲合併。
·顯式空閒連結串列:
區別:①分配時間:隱式的,分配時間是塊總數的線性時間
但是顯式的,是空閒塊數量的線性時間。
②連結串列形式:隱式——隱式空閒連結串列
顯式——雙向連結串列,有前驅和後繼,比頭部腳部好使。
排序策略:後進先出、按照地址順序維護
·分離的空閒連結串列
分離儲存,是一種流行的減少分配時間的方法。一般思路是將所有可能的塊大小分成一些等價類/大小類。
分配器維護著一個空閒連結串列陣列,每個大小類一個空閒連結串列,按照大小的升序排列。
基本方法:
①簡單分離儲存每個大小類的空閒連結串列包含大小相等的塊,每個塊的大小就是這個大小類中最大元素的大小。
②分離適配:每個空閒連結串列是和一個大小類相關聯的,並且被組織成某種型別的顯示或隱式連結串列,每個連結串列包含潛在的大小不同的塊,這些塊的大小是大小類的成員。
這種方法快速並且對儲存器使用很有效率。
③夥伴系統:其中每個大小類都是2的冪
 這樣,給定地址和塊的大小,很容易計算出它的夥伴的地址,也就是說:一個塊的地址和它的夥伴的地址只有一位不同。

9.10 垃圾收集

垃圾收集器:是一種動態儲存分配器,它自動釋放程式不再需要的已分配塊。這些塊稱為垃圾。自動回收堆儲存的過程叫做垃圾收集。
            在對Mark&Sweep的描述中使用下列函式:其中ptr定義為typedef void *ptr