㈠ 什麼是虛擬內存 虛擬內存工作原理
1、虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁碟存儲器上,在需要時進行數據交換。
2、虛擬存儲器是由硬體和操作系統自動實現存儲信息調度和管理的。它的工作過程包括6個步驟:
①中央處理器訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組信息是否存放在主存內。
②如該組號已在主存內,則轉而執行④;如果該組號不在主存內,則檢查主存中是否有空閑區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組信息調入主存。
③從輔存讀出所要的組,並送到主存空閑區,然後將那個空閑的物理組號a和邏輯組號a登錄在地址變換表中。
④從地址變換表讀出與邏輯組號a對應的物理組號a。
⑤從物理組號a和組內位元組地址b得到物理地址。
⑥根據物理地址從主存中存取必要的信息。
㈡ 計算機中存儲器Cache的基本原理是什麼虛擬內存的工作原理又是什麼
其實網路里也有~
Cache其有三部分:
Cache存儲體:存放由主存調入的指令與數據塊。
地址轉換部件:建立目錄表以實現主存地址到緩存地址的轉換。
替換部件:在緩存已滿時按一定策略進行數據塊替換,並修改地址轉換部件。
虛擬內存:
別稱虛擬存儲器(Virtual
Memory)。電腦中所運行的程序均需經由內存執行,若執行的程序很大或很多,則會導致內存消耗殆盡。為解決該問題,Windows中運用了虛擬內存技術,即勻出一部分硬碟空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。若計算機缺乏運行程序或操作所需的隨機存儲器
(RAM),則
Windows
會用之進行補償。它將計算機的RAM和硬碟上的臨時空間組合。當RAM運行速率緩慢時,它便將數據從RAM移動到稱為「分頁文件」的空間中。將數據移入與移出分頁文件可釋放RAM,以便完成工作。
一般而言,計算機的RAM越多,程序運行得越快。若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試借增加虛擬內存來進行補償。但是,計算機從RAM讀取數據的速率要比從硬碟讀取數據的速率快,因而擴增RAM容量(可加內存條)是最佳選擇。
參考:http://ke..com/view/44274.htm
http://ke..com/view/976.htm
㈢ 虛擬內存具體有什麼作用,原理是什麼
虛擬內存是Windows XP為作為內存使用的一部分硬碟空間。即便物理內存很大,虛擬內存也是必不可少的。虛擬內存在硬碟上其實就是為一個碩大無朋的文件,文件名是PageFile.Sys,通常狀態下是看不到的。必須關閉資源管理器對系統文件的保護功能才能看到這個文件。虛擬內存有時候也被稱為是「頁面文件」就是從這個文件的文件名中來的。
設置虛擬內存
對於虛擬內存文件,Windows XP為了安全默認值總是設的很大,浪費了不少的硬碟空間,其實我們完全可以將它的值設小一點。方法是:進入「控制面板/系統/高級/性能/設置/高級/虛擬內存/更改」,來到虛擬內存設置窗口,首先確定你的頁面文件在哪個驅動器盤符,然後將別的盤符驅動器的頁面文件全部禁用。建議你把它是設置到其他分區上,而不是默認的系統所在的分區,這樣可以提高頁面文件的讀寫速度,有利於系統的快速運行。根據微軟的建議,頁面文件應設為內存容量的1.5倍,但如果你的內存比較大,那它佔用的空間也是很可觀的,所以,建議如果內存容量在256MB以下,就設置為1.5倍,最大值和最小值一樣,如果在512MB以上,設置為內存容量的一半完全可行。
㈣ 電腦的虛擬內存是什麼有什麼作用和影響
是頁面文件,虛擬內存是文件數據交叉鏈接的活動文件
作用是:虛擬內存一般是用在內存不足的情況
系統自動調用硬碟的空間,用來暫時替代不夠的內存工作。
㈤ 誰能告訴我虛擬內存的原理
引言
Windows的內存結構是深入理解Windows操作系統如何運作的最關鍵之所在,通過對內存結構的認識可清楚地了解諸如進程間數據的共享、對內存進行有效的管理等問題,從而能夠在程序設計時使程序以更加有效的方式運行。Windows操作系統對內存的管理可採取多種不同的方式,其中虛擬內存的管理方式可用來管理大型的對象和結構數組。
在Windows系統中,任何一個進程都被賦予其自己的虛擬地址空間,該虛擬地址空間覆蓋了一個相當大的范圍,對於32位進程,其地址空間為232=4,294,967,296 Byte,這使得一個指針可以使用從0x00000000到0xFFFFFFFF的4GB范圍之內的任何一個值。雖然每一個32位進程可使用4GB的地址空間,但並不意味著每一個進程實際擁有4GB的物理地址空間,該地址空間僅僅是一個虛擬地址空間,此虛擬地址空間只是內存地址的一個范圍。進程實際可以得到的物理內存要遠小於其虛擬地址空間。進程的虛擬地址空間是為每個進程所私有的,在進程內運行的線程對內存空間的訪問都被限制在調用進程之內,而不能訪問屬於其他進程的內存空間。這樣,在不同的進程中可以使用相同地址的指針來指向屬於各自調用進程的內容而不會由此引起混亂。下面分別對虛擬內存的各具體技術進行介紹。
地址空間中區域的保留與釋放
在進程創建之初並被賦予地址空間時,其虛擬地址空間尚未分配,處於空閑狀態。這時地址空間內的內存是不能使用的,必須首先通過VirtualAlloc()函數來分配其內的各個區域,對其進行保留。VirtualAlloc()函數原型為:
LPVOID VirtualAlloc(
LPVOID lpAddress,
DWORD dwSize,
DWORD flAllocationType,
DWORD flProtect
);
其參數lpAddress包含一個內存地址,用於定義待分配區域的首地址。通常可將此參數設置為NULL,由系統通過搜索地址空間來決定滿足條件的未保留地址空間。這時系統可從地址空間的任意位置處開始保留一個區域,而且還可以通過向參數flAllocationType設置MEM_TOP_DOWN標志來指明在盡可能高的地址上分配內存。如果不希望由系統自動完成對內存區域的分配而為lpAddress設定了內存地址(必須確保其始終位於進程的用戶模式分區中,否則將會導致分配的失敗),那麼系統將在進行分配之前首先檢查在該內存地址上是否存在足夠大的未保留空間,如果存在一個足夠大的空閑區域,那麼系統將會保留此區域並返回此保留區域的虛擬地址,否則將導致分配的失敗而返回NULL。這里需要特別指出的是,在指定lpAddress的內存地址時,必須確保是從一個分配粒度的邊界處開始。
一般來說,在不同的CPU平台下分配粒度各不相同,但目前所有Windows環境下的CPU如x86、32位Alpha、64位Alpha以及IA-64等均是採用64KB的分配粒度。如果保留區域的起始地址沒有遵循從64KB分配粒度的邊界開始之一原則,系統將自動調整該地址到最接近的64K的倍數。例如,如果指定的lpAddress為0x00781022,那麼此保留區域實際是從0x00780000開始分配的。參數dwSize指定了保留區域的大小。但是系統實際保留的區域大小必須是CPU頁面大小的整數倍,如果指定的dwSize並非CPU頁面的整數倍,系統將自動對其進行調整,使其達到與之最接近的頁面大小整數倍。與分配粒度一樣,對於不同的CPU平台其頁面大小也是不一樣的。在x86平台下,頁面大小為4KB,在32位Alpah平台下,頁面大小為8KB。在使用時可以通過GetSystemInfo()來決定當前主機的頁面大小。參數flAllocationType和flProtect分別定義了分配類型和訪問保護屬性。由於VirtualAlloc()可用來保留一個區域也可以用來佔用物理存儲器,因此通過flAllocationType來指定當前要保留的是一個區域還是要佔用物理存儲器是意義的。其可能使用的內存分配類型有:
分配類型 類型說明
MEM_COMMIT 為特定的頁面區域分配內存中或磁碟的頁面文件中的物理存儲
MEM_PHYSICAL 分配物理內存(僅用於地址窗口擴展內存)
MEM_RESERVE 保留進程的虛擬地址空間,而不分配任何物理存儲。保留頁面可通過繼續調用VirtualAlloc()而被佔用
MEM_RESET 指明在內存中由參數lpAddress和dwSize指定的數據無效
MEM_TOP_DOWN 在盡可能高的地址上分配內存(Windows 98忽略此標志)
MEM_WRITE_WATCH 必須與MEM_RESERVE一起指定,使系統跟蹤那些被寫入分配區域的頁面(僅針對Windows 98)
分配成功完成後,即在進程的虛擬地址空間中保留了一個區域,可以對此區域中的內存進行保護許可權許可范圍內的訪問。當不再需要訪問此地址空間區域時,應釋放此區域。由VirtualFree()負責完成。其函數原型為:
BOOL VirtualFree(
LPVOID lpAddress,
DWORD dwSize,
DWORD dwFreeType
);
其中,參數lpAddress為指向待釋放頁面區域的指針。如果參數dwFreeType指定了MEM_RELEASE,則lpAddress必須為頁面區域被保留時由VirtualAlloc()所返回的基地址。參數dwSize指定了要釋放的地址空間區域的大小,如果參數dwFreeType指定了MEM_RELEASE標志,則將dwSize設置為0,由系統計算在特定內存地址上的待釋放區域的大小。參數dwFreeType為所執行的釋放操作的類型,其可能的取值為MEM_RELEASE和MEM_DECOMMIT,其中MEM_RELEASE標志指明要釋放指定的保留頁面區域,MEM_DECOMMIT標志則對指定的佔用頁面區域進行佔用的解除。如果VirtualFree()成功執行完成,將回收全部范圍的已分配頁面,此後如再對這些已釋放頁面區域內存的訪問將引發內存訪問異常。釋放後的頁面區域可供系統繼續分配使用。
下面這段代碼演示了由系統在進程的用戶模式分區內保留一個64KB大小的區域,並將其釋放的過程:
// 在地址空間中保留一個區域
LPBYTE bBuffer = (LPBYTE)VirtualAlloc(NULL, 65536, MEM_RESERVE, PAGE_READWRITE);
……
// 釋放已保留的區域
VirtualFree(bBuffer, 0, MEM_RELEASE);
物理存儲器的提交與回收
在地址空間中保留一個區域後,並不能直接對其進行使用,必須在把物理存儲器提交給該區域後,才可以訪問區域中的內存地址。在提交過程中,物理存儲器是按頁面邊界和頁面大小的塊來進行提交的。若要為一個已保留的地址空間區域提交物理存儲器,需要再次調用VirtualAlloc()函數,所不同的是在執行物理存儲器的提交過程中需要指定flAllocationType參數為MEM_COMMIT標志,使用的保護屬性與保留區域時所用保護屬性一致。在提交時,可以將物理存儲器提交給整個保留區域,也可以進行部分提交,由VirtualAlloc()函數的lpAddress參數和dwSize參數指明要將物理存儲器提交到何處以及要提交多少物理存儲器。
與保留區域的釋放類似,當不再需要訪問保留區域中被提交的物理存儲器時,提交的物理存儲器應得到及時的釋放。該回收過程與保留區域的釋放一樣也是通過VirtualFree()函數來完成的。在調用時為VirtualFree()的dwFreeType參數指定MEM_DECOMMIT標志,並在參數lpAddress和dwSize中傳遞用來標識要解除的第一個頁面的內存地址和要釋放的位元組數。此回收過程同樣也是以頁面為單位來進行的,將回收設定范圍所涉及到的所有頁面。下面這段代碼演示了對先前保留區域的提交過程,並在使用完畢後將其回收:
// 在地址空間中保留一個區域
LPBYTE bBuffer = (LPBYTE)VirtualAlloc(NULL, 65536, MEM_RESERVE, PAGE_READWRITE);
// 提交物理存儲器
VirtualAlloc(bBuffer, 65536, MEM_COMMIT, PAGE_READWRITE);
……
// 回收提交的物理存儲器
VirtualFree(bBuffer, 65536, MEM_DECOMMIT);
// 釋放已保留的區域
VirtualFree(bBuffer, 0, MEM_RELEASE);
由於未經提交的保留區域實際是無法使用的,因此在編程過程中允許通過一次VirtualAlloc()調用而完成對地址空間的區域保留及對保留區域的物理存儲器的提交。相應的,回收、釋放過程也可由一次VirtualFree()調用來實現。上述代碼可按此方法改寫為:
// 在地址空間中保留一個區域並提交物理存儲器
LPBYTE bBuffer = (LPBYTE)VirtualAlloc(NULL, 65536, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
……
// 釋放已保留的區域並回收提交的物理存儲器
VirtualFree(bBuffer, 0, MEM_RELEASE | MEM_DECOMMIT);
頁文件的使用
在前面曾多次提到物理存儲器,這里所說的物理存儲器並不局限於計算機內存,還包括在磁碟空間上創建的頁文件,其存儲空間大小為計算機內存和頁文件存儲容量之和。由於通常情況下磁碟存儲空間要遠大於內存的存儲空間,因此頁文件的使用對於應用程序而言相當於透明的增加了其所能使用的內存容量。在使用時,由操作系統和CPU負責對頁文件進行維護和協調。只有在應用程序需要時才臨時將頁文件中的數據載入到內存供應用程序訪問之用,在使用完畢後再從內存交換回頁文件。
進程中的線程在訪問位於已提交物理存儲器的保留區域的內存地址時,如果此地址指向的數據當前已存在於內存,CPU將直接將進程的虛擬地址映射為物理地址,並完成對數據的訪問;如果此數據是存在於頁文件中的,就要試圖將此數據從頁文件載入到內存。在進行此處理時,首先要檢查內存中是否有可供使用的空閑頁面,如果有就可以直接將數據載入到內存中的空閑頁面,否則就要從內存中尋找一個暫不使用的可釋放的頁面並將數據載入到此頁面。如果被釋放頁面中的數據仍為有效數據(即以後還會用到),就要先將此頁面從內存寫入到頁文件。在數據載入到內存後,仍要在CPU將虛擬地址映射為物理地址後方可實現對數據的訪問。與對物理存儲器中數據的訪問有所不同,在運行可執行程序時並不進行程序代碼和數據的從磁碟文件到頁文件的復制過程,而是在確定了程序的代碼及其數據的大小後,由系統直接將可執行程序的映像用作程序的保留地址空間區域。這樣的處理方式大大縮短了程序的啟動時間,並可減小頁文件的尺寸。
對內存的管理
使用虛擬內存技術將能夠對內存進行管理。對當前內存狀態的動態信息可通過GlobalMemoryStatus()函數來獲取。GlobalMemoryStatus()的函數原型為:
VOID GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer);
其參數lpBuffer為一個指向內存狀態結構MEMORYSTATUS的指針,而且要預先對該結構對象的數據成員進行初始化。MEMORYSTATUS結構定義如下:
typedef struct _MEMORYSTATUS {
DWORD dwLength; // MEMORYSTATUS結構大小
DWORD dwMemoryLoad; // 已使用內存所佔的百分比
DWORD dwTotalPhys; // 物理存儲器的總位元組數
DWORD dwAvailPhys; // 空閑物理存儲器的位元組數
DWORD dwTotalPageFile; // 頁文件包含的最大位元組數
DWORD dwAvailPageFile; // 頁文件可用位元組數
DWORD dwTotalVirtual; // 用戶模式分區大小
DWORD dwAvailVirtual; // 用戶模式分區中空閑內存大小
} MEMORYSTATUS, *LPMEMORYSTATUS;
下面這段代碼通過設置一個定時器而每隔5秒更新一次當前系統對內存的使用情況:
// 設置定時器
SetTimer(0, 5000, NULL);
……
void CSample22Dlg::OnTimer(UINT nIDEvent)
{
// 獲取當前內存使用狀態
MEMORYSTATUS mst;
GlobalMemoryStatus(&mst);
// 已使用內存所佔的百分比
m_dwMemoryLoad = mst.dwMemoryLoad;
// 物理存儲器的總位元組數
m_dwAvailPhys = mst.dwAvailPhys / 1024;
// 空閑物理存儲器的位元組數
m_dwAvailPageFile = mst.dwAvailPageFile / 1024;
// 頁文件包含的最大位元組數
m_dwAvailVirtual = mst.dwAvailVirtual / 1024;
// 頁文件可用位元組數
m_dwTotalPageFile = mst.dwTotalPageFile / 1024;
// 用戶模式分區大小
m_dwTotalPhys = mst.dwTotalPhys / 1024;
// 用戶模式分區中空閑內存大小
m_dwTotalVirtual = mst.dwTotalVirtual / 1024;
// 更新顯示
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
對內存的管理除了對當前內存的使用狀態信息進行獲取外,還經常需要獲取有關進程的虛擬地址空間的狀態信息。可由VirtualQuery()函數來進行查詢,其原型聲明如下:
DWORD VirtualQuery(
LPCVOID lpAddress, // 內存地址
PMEMORY_BASIC_INFORMATION lpBuffer, // 指向內存信息結構的指針
DWORD dwLength // 內存的大小
);
其中lpAddress參數為要查詢的虛擬內存地址,該值將被調整到最近的頁邊界處。當前計算機的頁面大小可通過GetSystemInfo()函數獲取,該函數需要一個指向SYSTEM_INFO結構的指針作為參數,獲取到的系統信息將填充在該數據結構對象中。下面這段代碼通過對GetSystemInfo()的調用而獲取了當前的系統信息:
// 得到當前系統信息
GetSystemInfo(&m_sin);
// 位屏蔽,指明哪個CPU是活動的
m_dwActiveProcessorMask = m_sin.dwActiveProcessorMask;
// 保留的地址空間區域的分配粒度
m_dwAllocationGranularity = m_sin.dwAllocationGranularity;
// 進程的可用地址空間的最小內存地址
m_dwMaxApplicationAddress = (DWORD)m_sin.lpMaximumApplicationAddress;
// 進程的可用地址空間的最大內存地址
m_dwMinApplicationAddress = (DWORD)m_sin.lpMinimumApplicationAddress;
// 計算機中CPU的數目
m_dwNumberOfProcessors = m_sin.dwNumberOfProcessors;
// 頁面大小
m_dwPageSize = m_sin.dwPageSize;
// 處理器類型
m_dwProcessorType = m_sin.dwProcessorType;
//進一步細分處理器級別
m_wProcessorLevel = m_sin.wProcessorLevel;
// 系統處理器的結構
m_wProcessorArchitecture = m_sin.wProcessorArchitecture;
// 更新顯示
UpdateData(FALSE);
VirtualQuery()的第二個參數lpBuffer為一個指向MEMORY_BASIC_INFORMATION結構的指針。VirtualQuery()如成功執行,該結構對象中將保存查詢到的虛擬地址空間狀態信息。MEMORY_BASIC_INFORMATION結構的定義為:
typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress; // 保留區域的基地址
PVOID AllocationBase; // 分配的基地址
DWORD AllocationProtect; // 初次保留時所設置的保護屬性
DWORD RegionSize; // 區域大小
DWORD State; // 狀態(提交、保留或空閑)
DWORD Protect; // 當前訪問保護屬性
DWORD Type; // 頁面類型
} MEMORY_BASIC_INFORMATION;
通過VirtualQuery()函數對由lpAddress和dwLength參數指定的虛擬地址空間區域的查詢而獲取得到的相關狀態信息:
// 更新顯示
UpdateData(TRUE);
// 虛擬地址空間狀態結構
MEMORY_BASIC_INFORMATION mbi;
// 查詢指定虛擬地址空間的狀態信息
VirtualQuery((LPCVOID)m_dwAddress, &mbi, 1024);
// 保留區域的基地址
m_dwBaseAddress = (DWORD)mbi.BaseAddress;
// 分配的基地址
m_dwAllocateBase = (DWORD)mbi.AllocationBase;
// 初次保留時所設置的保護屬性
m_dwAllocateProtect = mbi.AllocationProtect;
// 區域大小
m_dwRegionSize = mbi.RegionSize;
// 狀態(提交、保留或空閑)
m_dwState = mbi.State;
// 當前訪問保護屬性
m_dwProtect = mbi.Protect;
// 頁面類型
m_dwType = mbi.Type;
// 更新顯示
UpdateData(FALSE);
小結
本文主要對內存管理中的虛擬內存技術的基本原理、使用方法和對內存的管理等進行了介紹。通過本文將能夠掌握虛擬內存的一般使用方法,與之相關的內存管理技術還包括內存文件映射和堆管理等技術,讀者可參閱相關文章。這幾種內存管理技術同屬Windows編程中的高級技術,在應用程序中適當使用將有助於程序性能的提高。本文所述程序在Windows 2000 Professional下由Microsoft Viusual C++ 6.0編譯通過。
㈥ 虛擬內存工作原理
當內存不足的時候把一些還沒開始工作或者阻塞的進程和資源從內存移到外存上,等進程被調度了再從外存把這些進程和數據移到內存,這個就是虛擬內存。
㈦ 虛擬內存檔的原理和用途
虛擬內存檔使用計算機內存的一部分來模擬一個硬碟。在DOS/windows下由相應的軟體利用系統分配給它的內存空間來實現這種模擬。linux系統可以使用其內核支持的機制來實現。
虛擬內存檔還可以使用帶有壓縮機制的文件系統,例如:cramfs。這是因為一般的RAM盤的容量一般都較小,且RAM的存儲空間比硬碟的要寶貴得多,價格也比硬碟要來得高,所以這樣做是很合理的。
虛擬內存檔的一個用途是做為Web緩存,這樣可以提高載入頁面的速度,因為硬碟的存取速度遠小於內存(RAM)的存取速度 。由於RAM的易失性,這一措施還帶來了安全性上的好處 。
㈧ 虛擬內存的工作原理。
Windows操作系統用虛擬內存來動態管理運行時的交換文件。為了提供比實際物理內存還多的內存容量以供使用,Windows操作系統佔用了硬碟上的一部分空間作為虛擬內存。當CPU有要求時,首先會讀取內存中的資料。當內存容量不夠用時,Windows就會將需要暫時儲存的數據寫入硬碟。所以,計算機的內存大小等於實際物理內存容量加上「分頁文件」(就是交換文件)的大小。如果需要的話,「分頁文件」會動用硬碟上所有可以使用的空間。
再提供幾條設置技巧:
1、改變頁面文件的位置
其目的主要是為了保持虛擬內存的連續性。因為硬碟讀取數據是靠磁頭在磁性物質上讀取,頁面文件放在磁碟上的不同區域,磁頭就要跳來跳去,自然不利於提高效率。而且系統盤文件眾多,虛擬內存肯定不連續,因此要將其放到其他盤上。改變頁面文件位置的方法是:用滑鼠右鍵點擊「我的電腦」,選擇「屬性→高級→性能設置→高級→更改虛擬內存」,在驅動器欄里選擇想要改變到的位置即可。值得注意的是,當移動好頁面文件後,要將原來的文件刪除(系統不會自動刪除)。
2、改變頁面文件的大小
改變了頁面文件的位置後,我們還可以對它的大小進行一些調整。調整時我們需要注意,不要將最大、最小頁面文件設為等值。因為通常內存不會真正「塞滿」,它會在內存儲量到達一定程度時,自動將一部分暫時不用的數據放到硬碟中。最小頁面文件越大,所佔比例就低,執行的速度也就越慢。最大頁面文件是極限值,有時打開很多程序,內存和最小頁面文件都已「塞滿」,就會自動溢出到最大頁面文件。所以將兩者設為等值是不合理的。一般情況下,最小頁面文件設得小些,這樣能在內存中盡可能存儲更多數據,效率就越高。最大頁面文件設得大些,以免出現「滿員」的情況。
3、禁用頁面文件
當擁有了512MB以上的內存時,頁面文件的作用將不再明顯,因此我們可以將其禁用。方法是:依次進入注冊表編輯器 「HKEY_LOCAL_ Ma-nagerMemoryManagement」下,在「DisablePa-ging Executive」(禁用頁面文件)選項中將其值設為「1」即可。
下面是虛擬內存的簡要用法:
如果計算機在較低的 RAM 下運行,並且立即需要更多 RAM,則 Windows 會用硬碟空間來模擬系統 RAM。這叫做虛擬內存,通常稱為頁面文件。頁面文件類似於 UNIX 的「交換文件」。在安裝過程中創建的虛擬內存頁面文件(名為「pagefile.sys」)的默認大小是計算機上 RAM 大小的 1.5 倍。
當初設計Windows使用虛擬內存本身是因為物理內存很貴,一般都不會超過128MB容量,需要硬碟空間作臨時緩沖——也就是說,你應該把應用時需要多少物理內存和自己實際擁有的內存作一個比較,如果實際擁有的內存少於應用峰值,就會遇到麻煩了。
一般來說,如果要進行平面大圖、3D動畫渲染等數據量很大的任務,不應禁用虛擬內存;如果經常要列印帶大量圖片的文檔,禁止虛擬內存也會讓程序出現錯誤。因為像Word一類軟體列印之前要生成緩沖文件,再傳輸到列印機上,圖片尺寸較大、解析度較高時,需要的緩沖區容量也很大,筆者以前幫助廣告美工出設計圖時,就遇到列印一張圖生成將近300MB臨時文件的情況。因為Windows和應用程序本身也是需要一定內存來運行的,如果你是512MB的配置,禁用了虛擬內存,很有可能中途報告虛擬內存不足,強行退出造成列印紙張及油墨的浪費。
所以,必須根據你的任務應用環境,來決定是否禁用虛擬內存。即使是把虛擬內存大小固定設置,也必須謹慎,否則在運行大型應用軟體的時候才出現虛擬內存不足的提示,整個系統會因為CPU的佔用率極高而變得很慢,此時再改動就沒那麼方便了
㈨ 電腦虛擬內存是什麼
虛擬內存是用硬碟空間做內存來彌補計算機RAM空間的缺乏。當實際RAM滿時(實際上,在RAM滿之前),虛擬內存就在硬碟上創建了。當物理內存用完後,虛擬內存管理器選擇最近沒有用過的,低優先順序的內存部分寫到交換文件上。這個過程對應用是隱藏的,應用把虛擬內存和實際內存看作是一樣的。
技術細節:對於英特爾 IA-32 處理器(包括 386、奔騰等)而言,用戶應用程序(進程)訪問內存時其內存地址是虛擬的,CPU 會將它轉換為實際的物理內存地址。物理內存不夠時,操作系統系統會將各個進程中一部分暫時不用的內存換出到頁面文件(交換文件)中,並將需要訪問內存的程序的內容從頁面文件中換入到物理內存。
虛擬內存的作用
不知大家有沒有發現,在Windows2000(XP)目錄下有一個名為pagefile.sys的系統文件(Windows98下為Win386.swp),它的大小經常自己發生變動,小的時候可能只有幾十兆,大的時候則有數百兆,這種毫無規律的變化實在讓很多人摸不著頭腦。其實,pagefile.sys是Windows下的一個虛擬內存,它的作用與物理內存基本相似,但它是作為物理內存的「後備力量」而存在的,也就是說,只有在物理內存已經不夠使用的時候,它才會發揮作用。
虛擬內存的產生
我們都知道,雖然在運行速度上硬碟不如內存,但在容量上內存是無法與硬碟相提並論的。當運行一個程序需要大量數據、佔用大量內存時,內存就會被「塞滿」,並將那些暫時不用的數據放到硬碟中,而這些數據所佔的空間就是虛擬內存。現在我們也明白為什麼pagefile.sys的大小會經常變化了。
內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序分配的內存的總量走過了內存大小,就會導致內存消耗殆盡。為了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬碟空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。
舉個例子來說,壓縮程序在壓縮時有時候需要讀取文件的很大一部分並保存在內存中作反復的搜索。假設內存大小是128MB,而要壓縮的文件有 200MB,且壓縮軟體需要保存在內存中的大小也是 200MB,那麼這時操作系統就要權衡壓縮程序和系統中的其他程序,把多出來的那一部分數據放進交換文件。下面,就讓我們一起來看看如何對虛擬內存進行設置吧。
虛擬內存的設置
對於虛擬內存主要設置兩點,即內存大小和存放位置,內存大小就是設置虛擬內存最小為多少和最大為多少;而存放位置則是設置虛擬內存應使用哪個分區中的硬碟空間。對於內存大小的設置,如何得到最小值和最大值呢?你可以通過下面的方法獲得:選擇「開始→程序→附件→系統工具→系統監視器」(如果系統工具中沒有,可以通過「添加/刪除程序」中的Windows安裝程序進行安裝)打開系統監視器,然後選擇「編輯→添加項目」,在「類型」項中選擇「內存管理程序」,在右側的列表選擇「交換文件大小」。這樣隨著你的操作,會顯示出交換文件值的波動情況,你可以把經常要使用到的程序打開,然後對它們進行使用,這時查看一下系統監視器中的表現值,由於用戶每次使用電腦時的情況都不盡相同,因此,最好能夠通過較長時間對交換文件進行監視來找出最符合您的交換文件的數值,這樣才能保證系統性能穩定以及保持在最佳的狀態。一般來說,交換文件太大不會影響效率,但會佔用額外的磁碟空間。交換文件太小有時會引起可以運行的程序數量變少。
找出最合適的范圍值後,在設置虛擬內存時,用滑鼠右鍵點擊「我的電腦」,選擇「屬性」,彈出系統屬性窗口,選擇「性能」標簽,點擊下面「虛擬內存」按鈕,彈出虛擬內存設置窗口,點擊「用戶自己指定虛擬內存設置」單選按鈕,「硬碟」選較大剩餘空間的分區,然後在「最小值」和「最大值」文本框中輸入合適的范圍值。如果您感覺使用系統監視器來獲得最大和最小值有些麻煩的話,這里完全可以選擇「讓Windows管理虛擬內存設置」。
調整分頁位置
Windows9x的虛擬內存分頁位置,其實就是保存在C盤根目錄下的一個虛擬內存文件(也稱為交換文件)Win386.swp,它的存放位置可以是任何一個分區,如果系統盤C容量有限,我們可以把Win386.swp調到別的分區中,方法是在記事本中打開System.ini(C:Windows下)文件,在[386Enh]小節中,將「PagingDrive=C:WindowsWin386.swp」,改為其他分區的路徑,如將交換文件放在D:中,則改為「PagingDrive=D:Win386.swp」,如沒有上述語句可以直接鍵入即可。
而對於使用Windows2000和WindowsXP的,可以選擇「控制面板→系統→高級→性能」中的「設置→高級→更改」,打開虛擬內存設置窗口,在驅動器[卷標]中默認選擇的是系統所在的分區,如果想更改到其他分區中,首先要把原先的分區設置為無分頁文件,然後再選擇其他分區。
或者,WinXP一般要求物理內存在256M以上。如果你喜歡玩大型3D游戲,而內存(包括顯存)又不夠大,系統會經常提示說虛擬內存不夠,系統會自動調整(虛擬內存設置為系統管理)。
如果你的硬碟空間夠大,你也可以自己設置虛擬內存,具體步驟如下:右鍵單擊「我的電腦」→屬性→高級→性能設置→高級→虛擬內存更改→選擇虛擬內存(頁面文件)存放的分區→自定義大小→確定最大值和最小值→設置。一般來說,虛擬內存為物理內存的1.5倍,稍大一點也可以,如果你不想虛擬內存頻繁改動,可以將最大值和最小值設置為一樣。{另一種說法:調整時我們需要注意,不要將最大、最小頁面文件設為等值。因為通常內存不會真正「塞滿」,它會在內存儲量到達一定程度時,自動將一部分暫時不用的數據放到硬碟中。最小頁面文件越大,所佔比例就低,執行的速度也就越慢。最大頁面文件是極限值,有時打開很多程序,內存和最小頁面文件都已「塞滿」,就會自動溢出到最大頁面文件。所以將兩者設為等值是不合理的。一般情況下,最小頁面文件設得小些,這樣能在內存中盡可能存儲更多數據,效率就越高。最大頁面文件設得大些,以免出現「滿員」的情況。
PS:①1.5倍虛擬內存設置,是網上技術文檔通用說明的,個人認為可以根據常用軟體的實際情況設定。推薦有經驗的用戶使用。
②現在有很多工具軟體(例如WINDOWS優化大師、超級兔子),可以很好的更改這些設置,工具軟體也會根據你的電腦的實際情況進行相應的推薦設置。
虛擬內存使用技巧
對於虛擬內存如何設置的問題,微軟已經給我們提供了官方的解決辦法,對於一般情況下,我們推薦採用如下的設置方法:
(1)在Windows系統所在分區設置頁面文件,文件的大小由你對系統的設置決定。具體設置方法如下:打開"我的電腦"的"屬性"設置窗口,切換到"高級"選項卡,在"啟動和故障恢復"窗口的"寫入調試信息"欄,如果你採用的是"無",則將頁面文件大小設置為2MB左右,如果採用"核心內存存儲"和"完全內存存儲",則將頁面文件值設置得大一些,跟物理內存差不多就可以了。
小提示:對於系統分區是否設置頁面文件,這里有一個矛盾:如果設置,則系統有可能會頻繁讀取這部分頁面文件,從而加大系統盤所在磁軌的負荷,但如果不設置,當系統出現藍屏死機(特別是STOP錯誤)的時候,無法創建轉儲文件(Memory.dmp),從而無法進行程序調試和錯誤報告了。所以折中的辦法是在系統盤設置較小的頁面文件,只要夠用就行了。
(2)單獨建立一個空白分區,在該分區設置虛擬內存,其最小值設置為物理內存的1.5倍,最大值設置為物理內存的3倍,該分區專門用來存儲頁面文件,不要再存放其它任何文件。之所以單獨劃分一個分區用來設置虛擬內存,主要是基於兩點考慮:其一,由於該分區上沒有其它文件,這樣分區不會產生磁碟碎片,這樣能保證頁面文件的數據讀寫不受磁碟碎片的干擾;其二,按照Windows對內存的管理技術,Windows會優先使用不經常訪問的分區上的頁面文件,這樣也減少了讀取系統盤里的頁面文件的機會,減輕了系統盤的壓力。
(3)其它硬碟分區不設置任何頁面文件。當然,如果你有多個硬碟,則可以為每個硬碟都創建一個頁面文件。當信息分布在多個頁面文件上時,硬碟控制器可以同時在多個硬碟上執行讀取和寫入操作。這樣系統性能將得到提高。
虛擬內存設置注意事項
允許設置的虛擬內存最小值為2MB,最大值不能超過當前硬碟的剩餘空間值,同時也不能超過32位操作系統的內存定址范圍——4GB。
1、禁用頁面文件
當擁有了1G以上的內存時,頁面文件的作用將不再明顯,因此我們可以將其禁用。方法是:依次進入注冊表編輯器「HKEY_LOCAL_-nagerMemoryManagement」下,在「DisablePa-gingExecutive」(禁用頁面文件)選項中將其值設為「1」即可。
PS:此舉可能會造成系統不穩定.某些程序無法運行或死機。請根據自己實際情況更改。
1G以上內存就比較夠用了,玩游戲、使用大型軟體不推薦禁用虛擬內存。當然如果內存有2G的時候,可以根據自己的實際情況選擇虛擬內存的使用大小(我個人認為2G內存可以禁用虛擬內存以提升系統性能,VISTA系統內存使用比較大,可以根據實際情況設定)。
2、清空頁面文件
在同一位置上有一個「ClearPageFileAtShutdown(關機時清除頁面文件)」,將該值設為「1」。這里所說的「清除」頁面文件並非是指從硬碟上完全刪除pagefile.sys文件,而是對其進行「清洗」和整理,根據微軟的說法,這是一個安全選項,與性能無關。
高級話題:使用 SweepRAM 工具。適用於 Windows 2000/XP/2003。網上可以找到 SweepRAM 程序。該程序最大的作用是把所有進程的工作集清空。所謂工作集是指進程已映射的物理內存部分(即這些內存塊全在物理內存中,並且 CPU 可以直接訪問),還有一部分不在工作集中的虛擬內存則可能在轉換列表中(CPU 不能通過虛地址訪問,需要 Windows 映射之後才能訪問),還有一部分則在磁碟上的頁面文件里。工作集在進程運行時會被 Windows 自動調整,頻繁訪問的頁面(4KB 的塊)會留在內存中,而不頻繁訪問的頁面在內存緊張時會被從工作集中移出,暫時保存在內存中的「轉換列表」中,或者進一步換出到頁面文件中。當應用程序再次訪問某一頁面時,操作系統會將它重新加回工作集中。
SweepRAM 工具以一種適中的頻率(大約 40 分鍾一次)反復運行,可以將各進程的工作集清空,而之後各進程的工作集會慢慢恢復。這樣可以保持更好的工作集平衡,從而提高系統性能。
虛擬內存運行的原理以及過程
可能大家都會知道虛擬內存就是當物理內存不足夠的時候,把硬碟的一部分當作內存來使用。
這樣理解其實不夠准確
物理內存就是大家平時經常說的1G內存,512M內存
首先要知道:打開任何一個程序,都是要佔用物理內存的 ,當關閉這個程序的時候,系統也將會從物理內存中刪除這個程序的信息
接著分兩方面理解虛擬內存
--------------假設計算機物理內存是512M,系統都安裝在C盤--------------------------------------
(一)當物理內存足夠的時候
假設,我們運行的程序佔用了215M,此時物理內存絕對夠用了,但是不要以為此時系統沒有用虛擬內存技術,系統照樣用了虛擬內存技術,當我們打開QQ的時候,系統就為QQ這個程序指定了一個虛擬空間,只是此時這個虛擬空間裡面沒有信息而已
(二)當物理內存不足的時候
假設計算機運行」迅雷」和」IE瀏覽器」這兩個個軟體的時候物理內存已經達到512M,我們啟動QQ,如果沒有虛擬內存技術,我們此時根本不能啟動QQ,因為QQ不能在內存中寫入相關信息,不過現在有了虛擬內存技術,此時系統將會釋放一部分物理內存給QQ用,假設釋放的是迅雷所佔用的物理內存,那麼迅雷所佔用的物理內存信息將會保存到硬碟上的一個pagefile.sys的文件中
當我們想再運行迅雷的時候,此時系統會從pagefile.sys查找相應的迅雷信息,同時把這些信息重新載入到物理內存裡面,並且把QQ的信息釋放到pagefiles.sys裡面
這樣一個循環交換過程就是虛擬內存技術,為什麼叫它虛擬呢,因為系統把文件釋放到了硬碟上,而這個硬碟可不是內存,只是臨時的保存內存信息的地方
一句話,虛擬內存就是用如硬碟u盤等不是內存的介質來存儲內存的信息
Window xp系統裡面的c:/windows/prefetch這個文件夾裡面的文件是虛擬內存技術的擴展,這些prefetch(預讀)文件可以提升程序的運行速度
當我們運行程序時候,系統會依據內存記錄這個程序經常用到的文件,並且把這個程序讀取信息記錄下來,同時在c:/windows/prefech下創建一個後綴是.pf的文件,並且把讀取的信息保存到這.pf文件夾裡面,
假設我們運行已經被記錄photoshop這個程序,那麼你雙擊桌面上的photoshop的時候,系統會先從c:/windows/prefetch中查找這個photoshop的相關記錄,而不是繼續運行photoshop,
系統根據以前記錄photoshop用到的相關文件載入到內存中,載入好後,photoshop才可以繼續運行,這樣運行photoshop的速度就會提升了,大家可能看著要先執行.pf文件.再執行ps程序,這樣速度還會快么?其實這個處理速度是很快的,如果沒有預讀文件,打開photoshop的速度會很慢的
C:/windows/prefetch裡面還有一個Layout.ini這個文件,這個文件的作用就是排列文件載入的次序,
如果c:/windows/prefetch裡面的預讀文件很多,那麼你每次運行一個程序的時候,系統都要花大量的時間去搜索這個程序有沒有預讀文件,這樣有可能導致程序啟動很慢,所以預讀文件很多的時候,那麼就去刪除這些預讀文件吧
手動設置虛擬內存
①用右鍵點擊桌面上的「我的電腦」圖標,在出現的右鍵菜單中選「屬性」選項打開「系統屬性」窗口。在窗口中點擊「高級」選項卡,出現高級設置的對話框
②點擊「性能」區域的「設置」按鈕,在出現的「性能選項」窗口中選擇「高級」選項卡,打開其對話框。
③在該對話框中可看到關於虛擬內存的區域,點擊「更改」按鈕進入「虛擬內存」的設置窗口。選擇一個有較大空閑容量的分區,勾選「自定義大小」前的復選框,將具體數值填入「初始大小」、「最大值」欄中,而後依次點擊「設置→確定」按鈕即可,最後重新啟動計算機使虛擬內存設置生效。
㈩ 電腦中虛擬內存是什麼意思
內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬碟空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。舉一個例子來說,如果電腦只有128MB物理內存的話,當讀取一個容量為200MB的文件時,就必須要用到比較大的虛擬內存,文件被內存讀取之後就會先儲存到虛擬內存,等待內存把文件全部儲存到虛擬內存之後,跟著就會把虛擬內里儲存的文件釋放到原來的安裝目錄里了。下面,就讓我們一起來看看如何對虛擬內存進行設置吧。
虛擬內存的設置
對於虛擬內存主要設置兩點,即內存大小和分頁位置,內存大小就是設置虛擬內存最小為多少和最大為多少;而分頁位置則是設置虛擬內存應使用那個分區中的硬碟空間。對於內存大小的設置,如何得到最小值和最大值呢?你可以通過下面的方法獲得:選擇「開始→程序→附件→系統工具→系統監視器」(如果系統工具中沒有,可以通過「添加/刪除程序」中的Windows安裝程序進行安裝)打開系統監視器,然後選擇「編輯→添加項目」,在「類型」項中選擇「內存管理程序」,在右側的列表選擇「交換文件大小」。這樣隨著你的操作,會顯示出交換文件值的波動情況,你可以把經常要使用到的程序打開,然後對它們進行使用,這時查看一下系統監視器中的表現值,由於用戶每次使用電腦時的情況都不盡相同,因此,最好能夠通過較長時間對交換文件進行監視來找出最符合您的交換文件的數值,這樣才能保證系統性能穩定以及保持在最佳的狀態。
小提示:
允許設置的虛擬內存最小值為2MB,最大值不能超過當前硬碟的剩餘空間值,同時也不能超過32位操作系統的內存定址范圍——4GB。