孫梅 王超
摘要:實驗室準備批量更新硬件設備,升級到8GB內存。但我們在樣機上安裝了32位的windows7操作系統,發(fā)現可以識別到8G內存,但是只能使用3.5G內存。如此就不能享受大容量內存的優(yōu)勢,更換64位系統肯定能解決這個問題,但是實驗室的某些軟件在64位環(huán)境中卻是異常。為了解決這個矛盾,我們做出下列實踐。
關鍵詞:PAE;32位;64位
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)16-3821-03
Abstract:The PC in ourLaboratory needs to update to 8GB RAM.But The OS of win7 which is 32bit can only use the 3.5GB RAM,although other RAM can be detected. So we can not enjoy the advantage of Mass RAM.It is well-known that 64Bit OS support more than 8GB RAM. But some of our APP can notrun well in 64Bit system . We make research agendason solving the problem.
Key words: PAE;32bit;64bit
半導體器件價格的下降目前還是遵守摩爾定律,大容量、高速內存的普及勢不可擋。但是目前卻出現了類似上世紀的軟件危機的狀況,軟件的應用對大容量內存的使用出現適應困難的局面,雖然出現了64位的操作系統,但是32位的應用程序還是占相當大的比重,完全過渡到64位時代還需要一個過程。如何更快的融合進64位系統就成為了研究的熱點。
1 分析原因
上世紀80年代從386開始,就已經有了32位的CPU,內存地址線是32位,這樣理論上最多可尋址4GB的RAM空間,但是主流的應用程序很長一段時間用不上這么大的內存,新千年后進一步普及到了36條地址線,使得理論尋址空間擴展到了128GB,同時也出現了PAE技術,即Physical Address Extension——物理地址擴展。
這樣在32位的操作系統中,一些應用程序,主要是驅動程序就對“多余”的地址線進行編程,用來尋址廠商自己設備的存儲空間。所以對于一般的用戶,微軟的windows系統,如XP或win7等,在內核級的代碼中對用戶能使用的最大內存數作出了限制,這也是出于安全的考慮,因為如果用戶的應用程序使用的內存空間和特定程序如驅動程序使用的空間沖突,就很容易頻繁發(fā)生一致性錯誤,造成令所有人厭煩的藍屏現象。
2 解決方案
出于安全的考慮,我們最好選擇原生支持大內存的操作系統,例如64位的win7或XP,當然也可以選擇32位的windows服務器產品,該類產品對于PAE的支持良好,而且對用戶使用的最大內存地址沒有限制。對于不玩游戲的用戶,真的很適合采用這類服務器產品,本人就是,但它不符合教學大綱,而且在安裝windowsLive時出現錯誤。
我們也嘗試安裝64位的win7,相對于64位的XP,它的WoW64改進還是蠻大的,WoW64(Windows-on-windows 64-bit)是windows操作系統的一個子系統,理論上它允許我們在所有的64位的windows上執(zhí)行32位的程序。Intel65(AMD64/X64)上的WoW64不需要模擬指令。WoW64子系統只用通過在32位應用程序和64位windows API之間增加一層,來實現32位環(huán)境。 它并不是軟件模擬,所以這層的效率消耗在1%以內。但是經過測試,在運行我們的考試軟件或者本單位的撥號軟件時還是發(fā)生了兼容性的問題,而且暫時找不到這些軟件的64位的版本。其他的主流軟件一般都能找到相應的64位版本,這樣就不能保證以后不出現類似的問題。所以我們又需要尋找其他的解決方式。
32位的操作系統也是支持PAE的,只是被限制了[3],如果能破解這個限制就可同時解決兼容性和應用大容量內存的問題了。通過與windows Server 2008內核類比,我們尋找破解win7系統內核的方法。這種方法難度較大,但帶來的不兼容性則小的多,并且可以完美支持多至 128G 的內存!他的具體做法如下:為避免原始內核被破壞,首先復制系統內核文件 ntkrnlpa.exe,并命名為 ntkr128g.exe,之后的修改都在 ntkr128g.exe 上進行。用 hex 編輯器打開 ntkr128g.exe,查找下列兩個字符串:
特征串1:7C 11 8B 45 FC 85 C0 74 0a
特征串2:7C 10 8B 45 FC 85 C0 74 09
兩個特征串在內核中都出現且只出現一次,雖然特征串內容不同,但修改方式相同:把 0x8B 開始的 7 個字節(jié)修改成:
后7個字節(jié)修改成:B8 00 00 02 00 90 90
對于目前市場上的兩個版本的 Vista 和 Windows 7,修改處的文件偏移地址(即 0x8B 字節(jié)的位置)分別如下:
接下來測試加載修改后的內核。首先需要為修改后的內核重新計算 checksum 和生成數字簽名。在命令行中輸入下面3個命令:
editbin /release ntkr128g.exe
makecert -r -ss my -n "CN=My Own Testing Authority"
signtool sign -s my -n "My Own Testing Authority" ntkr128g.exeendprint
上述簽名過程需要用到三個命令行工具,其中 editbin 在 Visual Studio 中自帶,而 makecert 和 signtool 在 Windows SDK 6.0 中自帶,我們安裝了 Visual Studio 2008,第一個工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后兩個工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以從微軟網站免費下載。
最后在系統啟動菜單中加入一條新的啟動菜單項(需以管理員方式運行命令提示符)
bcdedit /copy {current} /d "Windows 7 With More Than 4GB"
運行成功后,該命令會返回一個 GUID 值,記錄下該 GUID 值,并運行下面三條,用之前返回的 GUID 值替換命令中的 guid,而且命令中包含 guid 的大括號也要輸入:
bcdedit /set {guid} paeForceEnable
bcdedit /set {guid} kernel ntkr128g.exe
bcdedit /set {guid} testsigning on
最后,重啟系統并在啟動菜單中選擇 "Windows 7 With More Than 4GB" 一項即可。由于修改了內核,系統啟動后桌面上會顯示“Test Mode”的提示。
3 衍生問題
不過,這個方法也有限制,一些不規(guī)范的驅動程序不能支持大于4G的內存,會導致系統崩潰。不過這些主要是一些使用大容量緩存的設備驅動,例如集成顯卡或者視頻采集卡,他們的緩存都常常超過1GB了,經過測試,在開啟cpu的集成核心顯卡與獨立顯卡交火時,就很容易藍屏,當把核心顯卡屏蔽時穩(wěn)定性就大為提高,基本杜絕了藍屏,甚至不同品牌內存條的混用也經常成功。而目前需要同時雙顯卡交火應用的程序很少,在實驗室用于教學的軟件就更不需要,況且獨立顯卡的性能就已經很強大了,萬一損壞了也很容易更換。
4 總結
對于單個任務,大容量內存的應用意義不大,因為用戶程序的任務是向操作系統申請內存的,操作系統總要設定一個可以分配的最大值[4],但是還是能支持64位編程定義的數據類型,保證其在分配內存時地址是連續(xù)不被截斷的[1]。對于內存讀寫速度的提升也是沒有幫助的,因為速度受限于內存顆粒設計時鎖定的頻率,且受到主板芯片的影響。但是大容量內存對于操作系統多任務性能的提升卻是很明顯的,在上程序設計課、操作系統或者數據庫等課程時,最多的應用就是IDE如Visual Studio和Eclipse、虛擬機、sqlServer等數據庫,這些都是內存消耗的大戶[2]。從實際測試情況看,這些應用開啟多個實例任務時,四核CPU加上4GB內存還是夠用的,不會發(fā)生死機的現象,但是任務間的切換就不那么流暢了,因為切換的過程中還是會涉及到讀寫硬盤的緩存,主流硬盤又是機械硬盤,隨著使用次數的最多,性能必然會有損耗。
安裝8GB內存條完畢后,打開任務管理器,可以看到8GB物理內存:
8G內存使用后,應該會減少磁盤緩存的讀寫次數。先來看看內存資源使用情況:
此時我們開啟了2個IDE,1個瀏覽器,2個通訊軟件,Windows Live Writer,還有若干小應用程序。已經使用的內存4012M,看來4G內存確實是不夠用的。為什么以前不覺得4G不夠呢?因為以前開啟了這么多程序,頁面文件的使用會明顯增加,而現在頁面文件的使用量查得為147M:
所以物理內存占用更多了。這樣帶來的直接好處就是程序響應更快。即使開啟了多個大內存任務,其使用依然流程,跟僅開啟一個這樣的任務時沒有什么區(qū)別?,F在使用多個IDE,瞬間切換,立即使用,不會有任何延遲。
我們再查看一下內存資源分配圖,其中Standby的內存為3869M。Standby的內存其實就是原來的磁盤緩存數據。接近4G的磁盤緩存,保證了我常用的磁盤文件能以最快的速度讀寫。這個感受最直觀的應該是在游戲中,切換場景的速度明顯加快,磁盤讀取明顯減少,不用長時間等待了。
根據實驗室計算機的使用情況,常常會開機八、九個小時供多個批次的學生參加考試,安裝了大容量內存后,就可以保持內存中的緩存數據,新批次的學生來運行考試相關的程序不用重新加載,操作快速如舊。
能夠保證持續(xù)流暢的使用體驗,是大容量內存的優(yōu)勢。4GB內存對于運行程序和游戲,確實是足夠的。但更多的內存能夠提供更流暢的用戶體驗,可以使PC更像家電,速度體驗始終如一。8GB內存是個新的起點,畢竟只夠提供4G緩存,16G或更多內存也會有明顯效果。配合寫緩存和休眠模式,PC的性能可以不再受限于硬盤。
同時,我們將大容量內存模式配置成可選擇的,若對程序或設備的穩(wěn)定性有特殊的要求,開機時任課教師或學生可以在bootLoader選擇進入普通模式,這樣就和一般的32位win7安裝版無異,只能使用4GB以內的RAM。
參考文獻:
[1] 陳樂,張延園,樊龍.開發(fā)和部署基于windows平臺的64位應用程序微處理機[J].微處理機,2008,29(6):136-142.
[2] 張成,高楊.32位Windows下Oracle使用大內存的方法 科技視界[J].科技視界,2012,(25):188-189.
[3] MICROSOFT.inc TechNet技術資源庫[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.
[4] 韓敬偉,李樹彪.淺析WINDOWS環(huán)境下的內存分頁機制國外電子測量技術[J]. 國外電子測量技術,2008,27(6):35-38.endprint
上述簽名過程需要用到三個命令行工具,其中 editbin 在 Visual Studio 中自帶,而 makecert 和 signtool 在 Windows SDK 6.0 中自帶,我們安裝了 Visual Studio 2008,第一個工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后兩個工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以從微軟網站免費下載。
最后在系統啟動菜單中加入一條新的啟動菜單項(需以管理員方式運行命令提示符)
bcdedit /copy {current} /d "Windows 7 With More Than 4GB"
運行成功后,該命令會返回一個 GUID 值,記錄下該 GUID 值,并運行下面三條,用之前返回的 GUID 值替換命令中的 guid,而且命令中包含 guid 的大括號也要輸入:
bcdedit /set {guid} paeForceEnable
bcdedit /set {guid} kernel ntkr128g.exe
bcdedit /set {guid} testsigning on
最后,重啟系統并在啟動菜單中選擇 "Windows 7 With More Than 4GB" 一項即可。由于修改了內核,系統啟動后桌面上會顯示“Test Mode”的提示。
3 衍生問題
不過,這個方法也有限制,一些不規(guī)范的驅動程序不能支持大于4G的內存,會導致系統崩潰。不過這些主要是一些使用大容量緩存的設備驅動,例如集成顯卡或者視頻采集卡,他們的緩存都常常超過1GB了,經過測試,在開啟cpu的集成核心顯卡與獨立顯卡交火時,就很容易藍屏,當把核心顯卡屏蔽時穩(wěn)定性就大為提高,基本杜絕了藍屏,甚至不同品牌內存條的混用也經常成功。而目前需要同時雙顯卡交火應用的程序很少,在實驗室用于教學的軟件就更不需要,況且獨立顯卡的性能就已經很強大了,萬一損壞了也很容易更換。
4 總結
對于單個任務,大容量內存的應用意義不大,因為用戶程序的任務是向操作系統申請內存的,操作系統總要設定一個可以分配的最大值[4],但是還是能支持64位編程定義的數據類型,保證其在分配內存時地址是連續(xù)不被截斷的[1]。對于內存讀寫速度的提升也是沒有幫助的,因為速度受限于內存顆粒設計時鎖定的頻率,且受到主板芯片的影響。但是大容量內存對于操作系統多任務性能的提升卻是很明顯的,在上程序設計課、操作系統或者數據庫等課程時,最多的應用就是IDE如Visual Studio和Eclipse、虛擬機、sqlServer等數據庫,這些都是內存消耗的大戶[2]。從實際測試情況看,這些應用開啟多個實例任務時,四核CPU加上4GB內存還是夠用的,不會發(fā)生死機的現象,但是任務間的切換就不那么流暢了,因為切換的過程中還是會涉及到讀寫硬盤的緩存,主流硬盤又是機械硬盤,隨著使用次數的最多,性能必然會有損耗。
安裝8GB內存條完畢后,打開任務管理器,可以看到8GB物理內存:
8G內存使用后,應該會減少磁盤緩存的讀寫次數。先來看看內存資源使用情況:
此時我們開啟了2個IDE,1個瀏覽器,2個通訊軟件,Windows Live Writer,還有若干小應用程序。已經使用的內存4012M,看來4G內存確實是不夠用的。為什么以前不覺得4G不夠呢?因為以前開啟了這么多程序,頁面文件的使用會明顯增加,而現在頁面文件的使用量查得為147M:
所以物理內存占用更多了。這樣帶來的直接好處就是程序響應更快。即使開啟了多個大內存任務,其使用依然流程,跟僅開啟一個這樣的任務時沒有什么區(qū)別?,F在使用多個IDE,瞬間切換,立即使用,不會有任何延遲。
我們再查看一下內存資源分配圖,其中Standby的內存為3869M。Standby的內存其實就是原來的磁盤緩存數據。接近4G的磁盤緩存,保證了我常用的磁盤文件能以最快的速度讀寫。這個感受最直觀的應該是在游戲中,切換場景的速度明顯加快,磁盤讀取明顯減少,不用長時間等待了。
根據實驗室計算機的使用情況,常常會開機八、九個小時供多個批次的學生參加考試,安裝了大容量內存后,就可以保持內存中的緩存數據,新批次的學生來運行考試相關的程序不用重新加載,操作快速如舊。
能夠保證持續(xù)流暢的使用體驗,是大容量內存的優(yōu)勢。4GB內存對于運行程序和游戲,確實是足夠的。但更多的內存能夠提供更流暢的用戶體驗,可以使PC更像家電,速度體驗始終如一。8GB內存是個新的起點,畢竟只夠提供4G緩存,16G或更多內存也會有明顯效果。配合寫緩存和休眠模式,PC的性能可以不再受限于硬盤。
同時,我們將大容量內存模式配置成可選擇的,若對程序或設備的穩(wěn)定性有特殊的要求,開機時任課教師或學生可以在bootLoader選擇進入普通模式,這樣就和一般的32位win7安裝版無異,只能使用4GB以內的RAM。
參考文獻:
[1] 陳樂,張延園,樊龍.開發(fā)和部署基于windows平臺的64位應用程序微處理機[J].微處理機,2008,29(6):136-142.
[2] 張成,高楊.32位Windows下Oracle使用大內存的方法 科技視界[J].科技視界,2012,(25):188-189.
[3] MICROSOFT.inc TechNet技術資源庫[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.
[4] 韓敬偉,李樹彪.淺析WINDOWS環(huán)境下的內存分頁機制國外電子測量技術[J]. 國外電子測量技術,2008,27(6):35-38.endprint
上述簽名過程需要用到三個命令行工具,其中 editbin 在 Visual Studio 中自帶,而 makecert 和 signtool 在 Windows SDK 6.0 中自帶,我們安裝了 Visual Studio 2008,第一個工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后兩個工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以從微軟網站免費下載。
最后在系統啟動菜單中加入一條新的啟動菜單項(需以管理員方式運行命令提示符)
bcdedit /copy {current} /d "Windows 7 With More Than 4GB"
運行成功后,該命令會返回一個 GUID 值,記錄下該 GUID 值,并運行下面三條,用之前返回的 GUID 值替換命令中的 guid,而且命令中包含 guid 的大括號也要輸入:
bcdedit /set {guid} paeForceEnable
bcdedit /set {guid} kernel ntkr128g.exe
bcdedit /set {guid} testsigning on
最后,重啟系統并在啟動菜單中選擇 "Windows 7 With More Than 4GB" 一項即可。由于修改了內核,系統啟動后桌面上會顯示“Test Mode”的提示。
3 衍生問題
不過,這個方法也有限制,一些不規(guī)范的驅動程序不能支持大于4G的內存,會導致系統崩潰。不過這些主要是一些使用大容量緩存的設備驅動,例如集成顯卡或者視頻采集卡,他們的緩存都常常超過1GB了,經過測試,在開啟cpu的集成核心顯卡與獨立顯卡交火時,就很容易藍屏,當把核心顯卡屏蔽時穩(wěn)定性就大為提高,基本杜絕了藍屏,甚至不同品牌內存條的混用也經常成功。而目前需要同時雙顯卡交火應用的程序很少,在實驗室用于教學的軟件就更不需要,況且獨立顯卡的性能就已經很強大了,萬一損壞了也很容易更換。
4 總結
對于單個任務,大容量內存的應用意義不大,因為用戶程序的任務是向操作系統申請內存的,操作系統總要設定一個可以分配的最大值[4],但是還是能支持64位編程定義的數據類型,保證其在分配內存時地址是連續(xù)不被截斷的[1]。對于內存讀寫速度的提升也是沒有幫助的,因為速度受限于內存顆粒設計時鎖定的頻率,且受到主板芯片的影響。但是大容量內存對于操作系統多任務性能的提升卻是很明顯的,在上程序設計課、操作系統或者數據庫等課程時,最多的應用就是IDE如Visual Studio和Eclipse、虛擬機、sqlServer等數據庫,這些都是內存消耗的大戶[2]。從實際測試情況看,這些應用開啟多個實例任務時,四核CPU加上4GB內存還是夠用的,不會發(fā)生死機的現象,但是任務間的切換就不那么流暢了,因為切換的過程中還是會涉及到讀寫硬盤的緩存,主流硬盤又是機械硬盤,隨著使用次數的最多,性能必然會有損耗。
安裝8GB內存條完畢后,打開任務管理器,可以看到8GB物理內存:
8G內存使用后,應該會減少磁盤緩存的讀寫次數。先來看看內存資源使用情況:
此時我們開啟了2個IDE,1個瀏覽器,2個通訊軟件,Windows Live Writer,還有若干小應用程序。已經使用的內存4012M,看來4G內存確實是不夠用的。為什么以前不覺得4G不夠呢?因為以前開啟了這么多程序,頁面文件的使用會明顯增加,而現在頁面文件的使用量查得為147M:
所以物理內存占用更多了。這樣帶來的直接好處就是程序響應更快。即使開啟了多個大內存任務,其使用依然流程,跟僅開啟一個這樣的任務時沒有什么區(qū)別。現在使用多個IDE,瞬間切換,立即使用,不會有任何延遲。
我們再查看一下內存資源分配圖,其中Standby的內存為3869M。Standby的內存其實就是原來的磁盤緩存數據。接近4G的磁盤緩存,保證了我常用的磁盤文件能以最快的速度讀寫。這個感受最直觀的應該是在游戲中,切換場景的速度明顯加快,磁盤讀取明顯減少,不用長時間等待了。
根據實驗室計算機的使用情況,常常會開機八、九個小時供多個批次的學生參加考試,安裝了大容量內存后,就可以保持內存中的緩存數據,新批次的學生來運行考試相關的程序不用重新加載,操作快速如舊。
能夠保證持續(xù)流暢的使用體驗,是大容量內存的優(yōu)勢。4GB內存對于運行程序和游戲,確實是足夠的。但更多的內存能夠提供更流暢的用戶體驗,可以使PC更像家電,速度體驗始終如一。8GB內存是個新的起點,畢竟只夠提供4G緩存,16G或更多內存也會有明顯效果。配合寫緩存和休眠模式,PC的性能可以不再受限于硬盤。
同時,我們將大容量內存模式配置成可選擇的,若對程序或設備的穩(wěn)定性有特殊的要求,開機時任課教師或學生可以在bootLoader選擇進入普通模式,這樣就和一般的32位win7安裝版無異,只能使用4GB以內的RAM。
參考文獻:
[1] 陳樂,張延園,樊龍.開發(fā)和部署基于windows平臺的64位應用程序微處理機[J].微處理機,2008,29(6):136-142.
[2] 張成,高楊.32位Windows下Oracle使用大內存的方法 科技視界[J].科技視界,2012,(25):188-189.
[3] MICROSOFT.inc TechNet技術資源庫[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.
[4] 韓敬偉,李樹彪.淺析WINDOWS環(huán)境下的內存分頁機制國外電子測量技術[J]. 國外電子測量技術,2008,27(6):35-38.endprint