第9章 虛擬儲存區(深入理解計算機系統)

2022-09-03 19:03:12 字數 2370 閱讀 1786

乙個系統中的程序是與其他程序共享cpu和主存資源的。為了更加有效地管理儲存器並且少出錯,現在系統提供了一種對主存的抽象概念,叫做虛擬儲存器(vm)。虛擬儲存器是硬體異常、硬體位址翻譯、主存、磁碟檔案和核心軟體的完美互動,它為每乙個程序提供了乙個大的、一致的和私有的位址空間。虛擬儲存器提供了三個重要的能力:1)它將主存看成是乙個儲存在磁碟上的位址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料,通過這種方式,它高效地使用了主存。2)它為每個程序提供了一致的位址空間,從而簡化了儲存器的管理。3)它保護了每個程序的位址空間不被其他程序破壞。

9.1 物理和虛擬定址

使用虛擬定址時,cpu通過生成乙個虛擬位址(virtual address,va)來訪問主存,這個虛擬位址在被送到儲存器之前先轉換成適當的實體地址。將乙個虛擬位址轉換為實體地址的任務叫做位址翻譯。位址翻譯需要cpu硬體和作業系統之間的緊密合作。cpu晶元上叫做儲存器管理單元(memory management unit,mmu)的專用硬體,利用存放在主存中的查詢表來動態翻譯虛擬位址,該錶的內容是有作業系統管理的。

9.2 位址空間

乙個位址空間的大小是由表示最大位址所需要的位數來描述的。乙個包含n=2^n個位址的虛擬位址空間就叫做乙個n位位址空間。現代作業系統典型的支援32位或者64為虛擬位址空間。乙個系統還有乙個實體地址空間,它與系統中物理儲存器的m個位元組相對應。

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

9.3.1 dram快取的組織結構

和儲存器結構中其他快取一樣,磁碟(較低層)上的資料被分割成塊,這些塊座位磁碟和主存之間的傳輸單元。vm系統通過將虛擬儲存器分割為稱為虛擬頁(virtual page,vp)的大小固定的塊來處理這個問題,大小為p=2^p位元組。類似的,物理儲存器被分割為物理頁(physical page,pp),大小也為p位元組(物理也也稱為頁幀(page frame))。

在任意時刻,虛擬頁面的集合都分為三個不相交的子集:

快取的:當前快取在物理儲存器中的已分配頁。

未快取的:沒有快取在物理儲存器中的已分配頁。

9.3.2 頁表

頁表,將虛擬頁對映到物理頁,存放在物理儲存器中。每次位址翻譯硬體將乙個虛擬位址轉換為實體地址時都會讀取頁表。作業系統負責維護頁表的內容,以及在磁碟與dram之間來回傳送頁。頁表就是乙個頁表條目(page table entry)的陣列。虛擬位址空間的每個頁在頁表中乙個固定偏移量處都有乙個pte。每個pte是由乙個有效位和乙個n位位址字段組成的。有效位表明了該虛擬頁當前是否被快取在dram中。位址字段表示該虛擬頁在dram中的位置或磁碟上的起始位置。

9.3.3 頁命中

9.3.4 缺頁

dram的快取不命中稱為缺頁(page fault)。

9.8 儲存器對映

1)unix檔案系統中的普通檔案:乙個區域可以對映到乙個普通磁碟檔案的連續部分。

2)匿名檔案:乙個區域可以對映到乙個匿名檔案,匿名檔案是由核心建立的,包含的全是二進位制零。

9.9 動態儲存器分配

雖然可以使用低階的mmap和munmap函式來建立和刪除虛擬儲存器的區域,但是c程式設計師還是會覺得當執行時需要額外虛擬儲存器時,用動態儲存器分配器更方便,也有更好的可移植性。

動態儲存器分配器維護著乙個程序的虛擬儲存器區域,稱為堆(heap)。它緊接在未初始化的bss區域後開始,並向上生長(向更高的位址)。對於每個程序,核心維護著乙個變數brk,它指向堆的頂部。

分配器有兩種基本風格。兩種風格都要求應用顯示地分配塊。它們的不同在於由哪個實體來負責釋放已分配的塊。

顯式分配器:要求應用顯式地釋放任何已分配的塊。例如,c標準庫提供一種叫做malloc程式包的顯式分配器。c程式通過呼叫malloc函式來分配乙個塊,並通過呼叫free函式來釋放乙個塊。c++中用new和delete

隱式分配器:要求分配器檢測乙個已分配塊何時不再被程式所使用,那麼就釋放這個塊。隱式分配器也叫做垃圾收集器。

9.9.4 碎片

造成堆利用率很低的主要原因是一種稱為碎片的現象,當雖然有未使用儲存器單不能用來滿足分配請求時,就會發生這種現象。有兩種形式的碎片:內部碎片(internal fragmentation)和外部碎片(external fragmentation)。

內部碎片是在乙個已分配塊比有效荷載大時發生的。很多原因都可能造成這個問題,如,乙個分配器的實現可能對已分配塊強加乙個最小的大小值,而這個值比請求的有效荷載大,或者,分配器可能增加塊大小以滿足對齊約束條件。

外部碎片是當空閒儲存器合計起來足夠滿足乙個分配請求,但是沒有乙個單獨的空閒塊足夠大可以來處理這個請求時發生的。

深入理解計算機作業系統 第9章 快取,儲存器管理

9.3 虛擬儲存器作為快取工具 1 虛擬儲存器被組織為乙個由存放在磁碟上的n個連續位元組大小的單元組成的陣列。2 每個位元組都有乙個唯一的虛擬位址,作為陣列索引 3 磁碟上的內容被快取到主存中 4 磁碟上的資料被分割成塊,作為磁碟與主存之間的傳輸單元 虛擬頁 1 vm系統將虛擬儲存器分割為虛擬頁的大...

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

現代作業系統普遍採用虛擬儲存器,說白了虛擬儲存器是不真實存在的,是作業系統虛擬的,在磁碟上開闢的空間,該虛擬儲存器可以在任何磁碟上。1 虛擬儲存器提供了三個重要的能力 1.1 將主存看做是乙個快取記憶體,快取最近使用的存放磁碟上的虛擬位址空間的內容,將虛擬位址與整個磁碟進行對映,主存中儲存這種對映的...

深入理解計算機系統之第6章

1.了解基本的儲存技術,2.程式設計師需要理解儲存器層次結構,因為其對應用程式的效能有巨大影響。3.理解區域性性原理,縮短程式執行時間。區域性性通常有兩種不同的形式 時間區域性性和空間區域性性。在乙個具有良好時間區域性性的程式中,被引用過一次的儲存器位置很可能在不遠的將來再被多次引用。在乙個具有良好...