1. 程式人生 > >作業系統真實的虛擬記憶體是什麼樣的(三. committed memory)

作業系統真實的虛擬記憶體是什麼樣的(三. committed memory)

1. commit limit與current commit charge

接上文,我們看到testlimit -r開關,只是預留虛擬記憶體,並沒有實際進行提交(commit)。預留虛存並不儲存資料或程式碼,但有時候應用需要這個預留(就像預訂坐位一樣),用以建立大塊虛存,並且在需要的時候進行提交,以確保提交的記憶體在地址空間上是連續的。當程序提交一塊虛存時,作業系統要確保儲存在記憶體裡的資料要麼全部在記憶體裡,要麼全部在硬碟中。這意味著程序的執行有另外一個限制:commit limit。

commit limit是實體記憶體和頁檔案大小的總和。事實上,並不是所有實體記憶體被計算在內,因為作業系統預留了一部分給自己使用。所有存活程序提交的虛存的總和,稱之為current commit charge,它不能超過系統的commit limit。當commit limit值達到時,虛存的分配就會失敗。這意味著標準的32位程序,在達到2GB地址空間限制之前,有可能會出現虛存分配失敗。

current commit charge和commit limit由程序管理器來跟蹤,其資料顯示如下圖:

在Vista和Win2008之前的版本,可能顯示的不叫current commit charge和limit,而採用的是current commit change ("PF Usage"),實際上就是page file usage:

在Vista和win2008下,工作管理員不顯示commit charge圖,只給出current commit charge和limit值,表示為"Page File"


你可以使用Testlimit -m 來對commit limit進行壓力測試,讓它強行分配已提交記憶體。32位版本的Testlimit在達到commit limit之前可能不會碰到地址空間的級限,這要依賴於實體記憶體的大小、虛存頁檔案的大小以及current commit charge值的大小。如果在32位windows下執行,並且要看看在達到commit limit時系統的行為,可以多執行幾個Testlimit例項,直到有一個在用盡地址空間之前,達到commit limit。

注意,預設情況下,頁檔案是動態增長的,那意味著commit limit也會動態增長(在commit charge變大並且接近它時),並且,即使頁檔案達到它的最大值,系統也會放掉部分記憶體,進行內部調節,就如同普通的應用程式快取完資料以後,會放掉一部分記憶體一樣。Testlimit在達到commit limit之後,會sleep幾秒鐘,接著嘗試分配更多記憶體,不斷重複,直至被強行終斷。

如果你執行的是64位的Testlimit, 幾乎可以肯定的是,在用盡地址空間之前,它就會達到commit limit,除非實體記憶體和頁檔案大小加起來能超過8TB,這個8TB在第一節裡,已經描述了,它是64位應用可以訪問的地址空間。這裡是64位Testlimit在8GB記憶體的系統上(指定每次分配100M)的執行過程中的部分結果:

相關推薦

作業系統真實虛擬記憶體是什麼樣的(. committed memory)

1. commit limit與current commit charge接上文,我們看到testlimit -r開關,只是預留虛擬記憶體,並沒有實際進行提交(commit)。預留虛存並不儲存資料或程式碼,但有時候應用需要這個預留(就像預訂坐位一樣),用以建立大塊虛存,並且在

淺談作業系統虛擬記憶體

我們把記憶體可以看成一個一維陣列,那麼這個陣列的下標就是記憶體的實體地址,CPU用記憶體的實體地址來定位他想獲取的記憶體塊(陣列中的內容),我們把這種方式稱為物理定址。 如下圖: 我們都知道,我們寫的程式經過編譯器編譯成機器級語言後會被儲存到檔案中,當我們要執行它的時候,作業系統會將其載入到記憶體中並

作業系統虛擬記憶體+儲存管理選擇題

Chapter 9虛擬記憶體 1、基本概念 (1)定義: 虛擬儲存器是具有請求調入功能和置換功能,能僅把程序的一部分裝入記憶體便可執行程序的儲存管理系統,它能從邏輯上對記憶體容量進行擴充的一種虛擬的儲存器系統 (2)區域性性原理: ①時間區域性性 ②空間區域性性 2、De

讀懂作業系統虛擬記憶體(一)

前言 由於個人對虛擬記憶體這塊特別感興趣,所以就直接暫且跳過其他,接下來將通過幾篇文章進行詳細講解,當然其他基礎內容後續在我進行相應整體學習後也會同步輸出文章,比如作業系統概念、程式連結、程序管理、頁面置換演算法、流水線、浮點指令、記憶體管理、磁碟管理等內容。不管周遭的環境如何,畢竟還很菜,堅持每天讓自己進步

讀懂作業系統虛擬記憶體地址翻譯原理分析篇(二)

前言 上一節我們整體概括通過MMU將虛擬地址翻譯為實體地址的轉換,這個過程都是按序就班的進行,一切都是基於已提前建立、分配虛擬頁、物理頁以及命中的前提,只是給和我一樣沒怎麼系統學習作業系統的童鞋首先在腦海裡有個大概的印象,本節我們從源頭開始分析為程式建立程序到對映到主存上整個詳細過程,本文將通過大量圖解來分析

讀懂作業系統虛擬記憶體TLB與快取(cache)關係篇(四)

前言 前面我們講到通過TLB快取頁表加快地址翻譯,通過上一節快取原理的講解為本節做鋪墊引入TLB和快取的關係,同時我們來完整梳理下從CPU產生虛擬地址最終對映為實體地址獲取資料的整個過程是怎樣的,若有錯誤之處,還請批評指正。 TLB和快取序列訪問(Serial TLB & Cache Access)

讀懂作業系統虛擬記憶體頁表(五)

前言 在一個擁有32位的地址空間,4KB的頁面(212),並且每個PTE為4個位元組,那麼頁表大小為4MB(4 * 232 / 212),但若為64位地址空間,4KB的頁面(212)且每個PTE為4位元組,那麼頁表大小為16TB(4 * 264 / 212),由於頁表常駐記憶體,佔用記憶體

ucore作業系統學習() ucore lab3虛擬記憶體管理分析

1. ucore lab3介紹 虛擬記憶體介紹   在目前的硬體體系結構中,程式要想在計算機中執行,必須先載入至物理主存中。在支援多道程式執行的系統上,我們想要讓包括作業系統核心在內的各種程式能併發的執行,而物理主存的總量通常是極為有限的,這限制了併發程式的發展。受制於成本問題,擁有足夠大容量主存的個人計算機

第八章—虛擬記憶體【計算機作業系統

8.1 簡單分頁與虛擬分頁有什麼區別? 簡單分頁:一個程式中的所有的頁都必須在主儲存器中程式才能正常執行,除非使用覆蓋技術。 擬記憶體分頁:不是程式的每一頁都必須在主儲存器的幀中來使程式執行,頁在需要的時候進行讀取。 8.2 解釋什麼是抖動。 虛擬記憶體結構的震動現象,在這

作業系統虛擬記憶體中的四種典型頁替換演算法(OPT,LRU,FIFO,Clock)

 頁面置換:在地址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷(page fault)。當發生缺頁中斷時作業系統必須在記憶體選擇一個頁面將其移出記憶體,以便為即將調入的頁面

3.作業系統簡單介紹 作業系統發展歷史 批處理分時系統 作業系統是什麼 作業系統對檔案的抽象 程序 虛擬記憶體是什麼 作業系統作用 作業系統功能

作業系統 其實 作業系統並不是與計算機硬體一起誕生的 它是在人們使用計算機的過程中,為了管理硬體資源,提高效能提高資源利用率,而逐步地形成和完善起來的。 作業系統也是一種程式,負責管理系統資源 上電自檢(經過BIOS)之後,處理器第一個要處理的程式 之所以叫做作業系統,其實就相當於它提供

虛擬現實中真實地形的視覺化方法

1 引言   隨著計算機圖形影象軟硬體技術的發展,人們認識周圍環境從傳統的二維思維方式轉向立體空間的思維方式,開始構建三維的、實時互動的、可“ 進入”的虛擬地理環境,相繼提出3DGIS、VRGIS以及相關三維GIS的概念。在這些三維的虛擬環境中,真實地形的生成有著非常廣泛的應

[作業系統] 虛擬記憶體

虛擬記憶體 1. 什麼是虛擬記憶體 每個程式擁有自己的地址空間,這個空間被分割成多個塊,每一塊稱作一頁。每一頁有連續的地址範圍。這些頁被對映到實體記憶體,但並不是所有的頁都必須在記憶體中才能執行程式。當程式引用到一部分在實體記憶體中的地址空間時

Java虛擬機器():記憶體分配與回收策略

[GC[DefNew Desired survivor size 524288 bytes, new threshold 1 (max 1) - age 1: 748104 bytes, 748104 total : 5024K->730K(9216K), 0.0038710 sec

作業系統--記憶體學習筆記(2)程序記憶體管理--虛擬記憶體

虛擬記憶體(virtual memory) = CPU + MMU(Memory Management Unit), MMU是一個CPU上的元器件,它將實體地址對映為虛擬地址,這樣CPU可以之別虛擬地址,而不是實際實體地址了。使用MMU的好處有 1、同一個虛擬地址可以指向不

虛擬記憶體(Virtual Memory,VM)和交換檔案(Pagefile,PF)

在保護模式下,Win32 程式可以定址 2GB 或 3GB 虛擬記憶體,對每一個程序來說,它定址的範圍都是這麼多。OS 負責把程序提交的虛擬記憶體按頁(一頁 4KB,工作集)對映到實體記憶體的實際頁幀上(駐留集)。如果設定了硬碟上的交換檔案(Pagefile.sys),那麼

深入理解作業系統虛擬記憶體

最近用java NIO的時候涉及到虛擬記憶體的知識,看了網上一些資料感覺寫的都不直觀,決定自己整理一下。 先解釋幾個名詞: 虛擬記憶體 現代作業系統中的程序在使用記憶體的時候,都不是直接訪問記憶體實體地址的,程序訪問的都是虛擬記憶體地址,然後虛擬

3、作業系統記憶體管理——段頁式(虛擬記憶體

注:參考哈工大李治軍老師公開課。本小節需要之前分段與分頁為基礎 對使用者而言,分段是對記憶體的有效使用;而對於計算機而言,分頁可以提高記憶體的使用效率。作業系統需要滿足兩個方面的需求,所以就採取了段頁相結合的方式來管理記憶體。 對於使用者而言,當用戶發出一個邏輯地址,

作業系統——虛擬記憶體管理

面試問題彙總: 1.邏輯地址、線性地址,實體地址,虛擬地址分別是什麼 實體地址,CPU地址匯流排傳來的地址,實體地址中很大一部分是留給記憶體條中的記憶體的 線性地址(Linear Address)也叫虛擬地址(virtual address)是邏輯地址到實體地址變換之間

作業系統實現之記憶體分頁機制.虛擬空間

這裡我們將把頁目錄表放在0x100000處.頁表也挨著頁目錄表放在0x101000處(第二個頁表.當然在此之前應該把實體記憶體給算出來.這裡可以使用bios中斷來獲取實體記憶體%include "boot.inc" section loader vstart=loader_base_addr ;-------