⑴ linux 設置虛擬內存Swap後,重啟後設置失效 怎麼處理
建議虛擬內存初始大小與最大值都設置為1536MB,設置相同數值是為了避免產生碎片,最好不要設置在C盤,設置在有足夠空間的盤。
怎樣設置虛擬內存:
(一)合理設置虛擬內存
虛擬內存的設定主要根據你的物理內存大小和電腦的用途來設定,在桌面上用滑鼠右擊「我的電腦」,選擇「屬性」,就可以看到內存了。根據微軟公司的建議,虛擬內存設為物理內存容量的1.5--3倍,例如512MB的內存,虛擬內存設定為768--1536MB;1G的內存,虛擬內存設定為1536--3072MB。也可讓Windows來自動分配管理虛擬內存,它能根據實際內存的使用情況,動態調整虛擬內存的大小。在虛擬內存設置頁面下方有一個推薦數值,如果確實不知道設置多少為最佳,建議虛擬內存就設為推薦的數值。虛擬內存有初始大小與最大值兩個數值,最好把初始大小和最大值設為相同,以避免系統頻繁改變頁面文件的大小,影響電腦運行。內存容量2GB或以上的,如果不運行大型文件或游戲,也可以關閉虛擬內存。
虛擬內存就是在你的物理內存不夠用時把一部分硬碟空間作為內存來使用,不過由於硬碟傳輸的速度要比內存傳輸速度慢的多,所以使用虛擬內存比物理內存效率要慢。個人實際需要的值應該自己多次調整為好。 設的太大會產生大量的碎片,嚴重影響系統速度,設的太小就不夠用,於是系統就會提示你虛擬內存太小。
(二)虛擬內存設置方法
右擊「我的電腦」選擇「屬性--高級--性能--設置--高級--虛擬內存--更改」,選擇虛擬內存所在的磁碟,然後在下邊單擊「自定義大小」 並輸入「初始大小」和「最大值」,最後按「設置」按鈕,再確定即可。虛擬內存從C盤設置到其它磁碟的方法(如果在其它盤,設置方法一樣):右擊我的電腦--屬性--高級--性能設置--高級--虛擬內存更改--點選C盤--單選「無分頁文件」--「設置」,此時C盤旁的虛擬內存就消失了;然後選中D或F盤,單選「自定義大小」--在下面的「初始大小」和「最大值」兩個文本框中輸入數值--「設置」—確定--重啟電腦,便完成了設置。
虛擬內存最好不要與系統設在同一個磁碟內,內存是隨著使用而動態地變化,設在C盤就容易產生磁碟碎片,影響系統運行速度。所以,最好將虛擬內存設置在磁碟剩餘空間較大而又不常用的磁碟,如D、F,這樣可以避免系統在C盤進行頻繁的讀寫操作而影響系統速度。虛擬內存在一台電腦,只用設置一次,可設置在任何一個磁碟。
(三)減輕內存負擔:
1、打開的程序不可太多。如果同時打開的文檔過多或者運行的程序過多,就沒有足夠的內存運行其他程序,要關閉不用的程序和窗口。
2、自動運行的程序不可太多 。單擊「開始」--「運行」,鍵入「Msconfig」-「確定」,打開「系統配置實用程序」窗口,刪除不想自動載入的啟動項目
⑵ 虛擬內存是怎麼回事正運行程序時說內存不能為什麼什麼如何解決
該內存不能為written或read的解決方案
[注意]該內存不能為written或read的解決方案 熱
該內存不能為written或read的解決方案
作者:啟明 文章來源: 點擊數:311 更新時間:2005-8-4
運行某些程序的時候,有時會出現內存錯誤的提示,然後該程序就關閉。
「0x????????」指令引用的「0x????????」內存。該內存不能為「read」。
「0x????????」指令引用的「0x????????」內存,該內存不能為「written」。
不知你出現過類似這樣的故障嗎?(0x後面內容有可能不一樣。)
一般出現這個現象有方面的,一是硬體,即內存方面有問題,二是軟體,這就有多方面的問題了。
1、微軟IE緩沖溢出漏洞引起
2、內存或虛擬內存地址使用沖突造成
程序的運行需要分配一定的內存地址給程序使用,當程序結束時釋放留出空間讓給新的程序使用,win是多任務的系統
有時前程序未結束 又有新的任務開始
到底要多少內存或虛擬內存來保證我們同時運行的工作任務呢?也許win在這個問題上沒弄好,所以有此錯誤常常發生,一般運行大型軟體或多媒體後出現這種情況
3、劣質內存條也會出現這個問題
一般來說,內存出現問題的可能性並不大,主要方面是:內存條壞了、內存質量有問題,還有就是2個不同牌子不同容量的內存混插,也比較容易出現不兼容的情況,同時還要注意散熱問題,特別是超頻後。你可以使用MemTest
這個軟體來檢測一下內存,它可以徹底的檢測出內存的穩定度。
假如你是雙內存,而且是不同品牌的內存條混插或者買了二手內存時,出現這個問題,這時,你就要檢查是不是內存出問題了或者和其它硬體不兼容。
4、微軟WINDOWS系統的漏洞,
windows把內存地址0X00000000到0X0000ffff指定為分配null指針的地址范圍,如果程序試圖訪問這一地址,則認為是錯誤。c/c++編寫的程序通常不進行嚴格的錯誤檢查,當採用malloc來分配內存而可供分配的地址空間不夠的情況下返回null指針。但是代碼不檢查這種錯誤,認為地址分配已經成功,於是就訪問0X00000000的地址,於是就發生內存違規訪問,同時該進程被終止。
ASCII字元填充組成的pif文件時會出現以下情況:
一個非法的pif文件(用ascii字元\'x\'填充)至少要369位元組,系統才認為是一個合法的pif文件,才會以pif的圖標[pifmgr.dll,0]顯示,才會在屬性里有程序、
字體、內存、屏幕」等內容。而且僅僅當一個非pif文件的大小是369位元組時察看屬性的「程序」頁時,不會發生程序錯誤,哪怕是370位元組也不行。當對一個大於369位元組的非法pif文件察看屬性的「程序」頁時,Explorer會出錯,提示:\'***\'指令引用的\'***\'內存。該內存不能為\'read\'
,問題出在pif文件的16進制地址:
0x00000181[0x87]0x00000182[0x01]和
0x00000231[0xC3]0x00000232[0x02]
即使是一個合法pif文件,只要改動這四處的任意一處,也會引起程序錯誤。而只
要把0x00000181和0x00000182的值改為[0xFF][0xFF],那麼其它地址任意更改
都不會引起錯誤。
5、可能沒有完全正確安裝apache服務,且啟動了它的原故; 把服務中的
OracleOraHomeXXHTTPServer改成停止
6、應用程序沒有檢查內存分配失敗
程序需要一塊內存用以保存數據時,就需要調用操作系統提供的「功能函數」來申請,如果內存分配成功,函數就會將所新開辟的內存區地址返回給應用程序,應用程序就可以通過這個地址使用這塊內存。這就是「動態內存分配」,內存地址也就是編程中的「指針」。
內存不是永遠都招之即來、用之不盡的,有時候內存分配也會失敗。當分配失敗時系統函數會返回一個0值,這時返回值「0」已不表示新啟用的指針,而是系統向應用程序發出的一個通知,告知出現了錯誤。作為應用程序,在每一次申請內存後都應該檢查返回值是否為0,如果是,則意味著出現了故障,應該採取一些措施挽救,這就增強了程序的「健壯性」。
若應用程序沒有檢查這個錯誤,它就會按照「思維慣性」認為這個值是給它分配的可用指針,繼續在之後的運行中使用這塊內存。真正的0地址內存區保存的是計算機系統中最重要的「中斷描述符表」,絕對不允許應用程序使用。在沒有保護機制的操作系統下(如DOS),寫數據到這個地址會導致立即死機,而在健壯的操作系統中,如Windows等,這個操作會馬上被系統的保護機制捕獲,其結果就是由操作系統強行關閉出錯的應用程序,以防止其錯誤擴大。這時候,就會出現上述的「寫內存」錯誤,並指出被引用的內存地址為「0x00000000」。
內存分配失敗故障的原因很多,內存不夠、系統函數的版本不匹配等都可能有影響。因此,這種分配失敗多見於操作系統使用很長時間後,安裝了多種應用程序(包括無意中「安裝」的病毒程序),更改了大量的系統參數和系統文件之後。
7、應用程序由於自身BUG引用了不正常的內存指針
在使用動態分配的應用程序中,有時會有這樣的情況出現:程序試圖讀寫一塊「應該可用」的內存,但不知為什麼,這個預料中可用的指針已經失效了。有可能是「忘記了」向操作系統要求分配,也可能是程序自己在某個時候已經注銷了這塊內存而「沒有留意」等等。注銷了的內存被系統回收,其訪問權已經不屬於該應用程序,因此讀寫操作也同樣會觸發系統的保護機制,企圖「違法」的程序唯一的下場就是被操作終止運行,回收全部資源。計算機世界的法律還是要比人類有效和嚴厲得多啊!
像這樣的情況都屬於程序自身的BUG,你往往可在特定的操作順序下重現錯誤。無效指針不一定總是0,因此錯誤提示中的內存地址也不一定為「0x00000000」,而是其他隨機數字。
----------------------------------------------------------
如果系統經常有所提到的錯誤提示,下面的建議可能會有幫助:
1.查看系統中是否有木馬或病毒。這類程序為了控制系統往往不負責任地修改系統,從而導致操作系統異常。平常應加強信息安全意識,對來源不明的可執行程序絕不好奇。
2.更新操作系統,讓操作系統的安裝程序重新拷貝正確版本的系統文件、修正系統參數。有時候操作系統本身也會有BUG,要注意安裝官方發行的升級程序。
3.試用新版本的應用程序。
4、刪除然後重新創建 Winnt\\System32\\Wbem\\Repository 文件夾中的文件:
在桌面上右擊我的電腦,然後單擊管理。
在"服務和應用程序"下,單擊服務,然後關閉並停止 Windows Management
Instrumentation 服務。
刪除 Winnt\\System32\\Wbem\\Repository
文件夾中的所有文件。(在刪除前請創建這些文件的備份副本。)
打開"服務和應用程序",單擊服務,然後打開並啟動 Windows Management
Instrumentation 服務。當服務重新啟動時,將基於以下注冊表項中所提供的信息重新創建這些文件:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\WBEM\\CIMOM\\Autorecover
MOFs
http://www.55188.com/viewthread.php?tid=627383&fpage=1&highlight=
下面我從幾個例子給大家分析:
例一:打開IE瀏覽器或者沒過幾分鍾就會出現"0x70dcf39f"指令引用的"0x00000000"內存。該內存不能為「read」。要終止程序,請單擊「確定」的信息框,單擊「確定」後,又出現「發生內部錯誤,您正在使用的其中一個窗口即將關閉」的信息框,關閉該提示信息後,IE瀏覽器也被關閉。
解決方法:修復或升級IE瀏覽器,同時打上補丁。看過其中一個修復方法是,Win2000自升級,也就是Win2000升級到Win2000,其實這種方法也就是把系統還原到系統初始的狀態下。比如你的IE升級到了6.0,自升級後,會被IE5.0代替。
例二:在windows
xp下雙擊光碟裡面的「AutoRun.exe」文件,顯示「0x77f745cc」指令引用的「0x00000078」內存。該內存不能為「written」,要終止程序,請單擊「確定」,而在Windows
98里運行卻正常。
解決方法:這可能是系統的兼容性問題,winXP的系統,右鍵「AutoRun.exe」文件,屬性,兼容性,把「用兼容模式運行這個程序」項選擇上,並選擇「Windows
98/Me」。win2000如果打了SP的補丁後,只要開始,運行,輸入:regsvr32
c:\\winnt\\apppatch\\slayerui.dll。右鍵,屬性,也會出現兼容性的選項。
例三:RealOne
Gold關閉時出現錯誤,以前一直使用正常,最近卻在每次關閉時出現「0xffffffff」指令引用的「0xffffffff」內存。該內存不能為「read」
的提示。
解決方法:當使用的輸入法為微軟拼音輸入法2003,並且隱藏語言欄時(不隱藏時沒問題)關閉RealOne就會出現這個問題,因此在關閉RealOne之前可以顯示語言欄或者將任意其他輸入法作為當前輸入法來解決這個問題。
例四:我的豪傑超級解霸自從上網後就不能播放了,每次都提示「0x060692f6」(每次變化)指令引用的「0xff000011」內存不能為「read」,終止程序請按確定。
解決方法:試試重裝豪傑超級解霸,如果重裝後還會,到官方網站下載相應版本的補丁試試。還不行,只好換就用別的播放器試試了。
例五:雙擊一個游戲的快捷方式,「0x77f5cd0」指令引用「0xffffffff」內
存,該內存不能為「read」 ,並且提示Client.dat程序錯誤。
解決方法:重裝顯卡的最新驅動程序,然後下載並且安裝DirectX9.0。
例六:一個朋友發信息過來,我的電腦便出現了錯誤信息:「0x772b548f」指令引用的「0x00303033」內存,該內存不能為「written」,然後QQ自動下線,而再打開QQ,發現了他發過來的十幾條的信息。
解決方法:這是對方利用QQ的BUG,發送特殊的代碼,做QQ出錯,只要打上補丁或升級到最新版本,就沒事了。
⑶ 【重獎】請高手幫忙解釋C#內存管理中的2個問題
在解釋第一個問題之前,先說明一下計算機內存管理的中的四個名詞:虛擬內存,虛擬內存地址,物理內存,物理內存地址。
先說說為什麼會有虛擬內存和物理內存的區別。正在運行的一個進程,他所需的內存是有可能大於內存條容量之和的,比如你的內存條是256M,你的程序卻要創建一個2G的數據區,那麼不是所有數據都能一起載入到內存(物理內存)中,勢必有一部分數據要放到其他介質中(比如硬碟),待進程需要訪問那部分數據時,在通過調度進入物理內存。所以,虛擬內存是進程運行時所有內存空間的總和,並且可能有一部分不在物理內存中,而物理內存就是我們平時所了解的內存條。有的地方呢,也叫這個虛擬內存為內存交換區。
那麼,什麼是虛擬內存地址和物理內存地址呢。假設你的計算機是32位,那麼它的地址匯流排是32位的,也就是它可以定址0~0xFFFFFFFF(4G)的地址空間,但如果你的計算機只有256M的物理內存0x~0x0FFFFFFF(256M),同時你的進程產生了一個不在這256M地址空間中的地址,那麼計算機該如何處理呢?回答這個問題前,先說明計算機的內存分頁機制。
計算機會對虛擬內存地址空間(32位為4G)分頁產生頁(page),對物理內存地址空間(假設256M)分頁產生頁幀(page frame),這個頁和頁幀的大小是一樣大的,所以呢,在這里,虛擬內存頁的個數勢必要大於物理內存頁幀的個數。在計算機上有一個頁表(page table),就是映射虛擬內存頁到物理內存頁的,更確切的說是頁號到頁幀號的映射,而且是一對一的映射。但是問題來了,虛擬內存頁的個數 > 物理內存頁幀的個數,豈不是有些虛擬內存頁的地址永遠沒有對應的物理內存地址空間?不是的,操作系統是這樣處理的。操作系統有個頁面失效(page fault)功能。操作系統找到一個最少使用的頁幀,讓他失效,並把它寫入磁碟,隨後把需要訪問的頁放到頁幀中,並修改頁表中的映射,這樣就保證所有的頁都有被調度的可能了。這就是處理虛擬內存地址到物理內存的步驟。
現在來回答什麼是虛擬內存地址和物理內存地址。虛擬內存地址由頁號(與頁表中的頁號關聯)和偏移量組成。頁號就不必解釋了,上面已經說了,頁號對應的映射到一個頁幀。那麼,說說偏移量。偏移量就是我上面說的頁(或者頁幀)的大小,即這個頁(或者頁幀)到底能存多少數據。舉個例子,有一個虛擬地址它的頁號是4,偏移量是20,那麼他的定址過程是這樣的:首先到頁表中找到頁號4對應的頁幀號(比如為8),如果頁不在內存中,則用失效機制調入頁,否則把頁幀號和偏移量傳給MMC(CPU的內存管理單元)組成一個物理上真正存在的地址,接著就是訪問物理內存中的數據了。總結起來說,虛擬內存地址的大小是與地址匯流排位數相關,物理內存地址的大小跟物理內存條的容量相關。
上面就是這4個名詞的簡單解釋。下面來回答你的問題。
1_1、可用的內存地址當然是指虛擬的內存地址,而且可以定址4G(32位)。
1_2、映射到硬體內存中的實際地址是指虛擬內存地址與物理內存地址的映射。硬體內存就是物理內存,也就是我們所說的內存條。
1_3、32為處理器上的每個進程都可以使用4G的內存是指他們可以定址的虛擬內存地址是4G。4G也就是32位地址匯流排的范圍。不是哪來那麼多內存,而是存在虛擬內存地址到物理內存地址的映射,以及失效操作。
1_4、這個是說定址范圍的大小不涉及硬碟和內存的大小,大不了小點硬碟和內存生成的頁少點,生成頁的次數多點而已。
1_5、2^64,也就是64T。
第二個問題,其實你已經說出了問題的答案,只是你自己把自己誤導了。你說對象的引用是存儲在堆棧中的,沒錯,但是這個引用確實不是對象,更不是什麼對象的成員,。本質上它是一個指向對象的內存地址。跟你說的值數據類型(Int)其實沒有太大差別,可以算到值類型的范疇,只是這個命名有點怪而已。
⑷ 操作系統頁面調度
某虛擬存儲器共8個頁面,每頁1024個字,實際主存為4096個字,採用頁表法進行地址映象。映象表的內容如下表1所示。實頁號 裝入位
3 1
1 1
2 0
3 0
2 1
1 0
0 1
0 0
表1 虛頁號 實頁號 裝入位
0 3 1
1 1 1
2 2 0
3 3 0
4 2 1
5 1 0
6 0 1
7 0 0
表2 (1)列出會發生頁面失效的全部虛頁號;
解:根據頁表法列出表2,當裝入位為0時,即為頁面失效,再找出相對應的虛頁號即可。
會發生頁面失效的全部虛頁號為:2,3,5,7
(2)按以下虛地址計算主存實地址:0,3728,1023,1024,2055,7800,4096,6800。
解:虛頁號=│_虛地址/頁面大小_│
實地址=(實頁號*頁面大小)+(虛地址-虛頁號*頁面大小) 虛地址 0 3728 1023 1024 2055 7800 4096 6800
虛頁號 0 3 0 1 2 7 4 6
實頁號 3 3 3 1 2 0 2 0
裝入位 1 0 1 1 0 0 1 1
實地址 3072 3728 4095 1024 2055 632 2048 656
⑸ 虛擬內存重置無效
說明設置的數值不合理。
虛擬內存,讓系統託管最好。如果一定要自己設,建議按微軟推薦的數值設置,即為物理內存的1.5-3倍為宜。
1、隨著現在電腦可用內存的不斷增大,虛擬內存越來越不重要,一般不必管它,讓系統託管是最好。但最好不要關閉,因為一些老版本的軟體設計上就是結合虛擬內存的,關掉後會導致一些軟體工作不正常。
2、虛擬內存通常默認設在C盤,要注意,C盤不要太滿,留一些空間放虛擬內存的頁面文件。
3、虛擬內存不是代替物理內存運行程序的,而是暫時代替物理內存保存數據的。所以,對系統提速是毫無作用的,根本的辦法還是增加物理內存。
虛擬內存別稱虛擬存儲器(Virtual Memory)。電腦中所運行的程序均需經由內存執行,若執行的程序佔用內存很大或很多,則會導致內存消耗殆盡。為解決該問題,Windows中運用了虛擬內存技術,即勻出一部分硬碟空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。若計算機運行程序或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償。它將計算機的RAM和硬碟上的臨時空間組合。當RAM運行速率緩慢時,它便將數據從RAM移動到稱為「分頁文件」的空間中。將數據移入分頁文件可釋放RAM,以便完成工作。
虛擬內存,是代替物理內存的存儲功能,但不能代替物理內存的運行的功能。所以,一般而言,計算機的RAM容量越大,程序運行得越快。若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬內存來進行補償。但是,計算機從RAM讀取數據的速率要比從硬碟讀取數據的速率快,因而擴增RAM容量(可加內存條)是最佳選擇。
虛擬內存一般在C盤的根目錄,文件名為pagefile.sys。
⑹ 在頁式虛擬存貯器中,什麼叫頁面失效什麼叫頁面爭用什麼時候兩者同時發生
頁面失效是該頁未裝入主存,需要從輔存中調頁。頁面爭用(沖突)是兩個以上的虛頁想要進入主存中同一頁面位置的現象。頁面失效不一定發生頁面沖突,頁面爭用一定由頁面失效引起。