找回密码
 立即加入
搜索

查看: 2417|回复: 7

[技术交流] 概念澄清:32位操作系统并不意味着只能使用4GB内存(摘自网络)

[复制链接]
言冰的夏虫 发表于 2009-10-31 00:45:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转闽南师范大学。

您需要 登录 才可以下载或查看,没有账号?立即加入

×
(更多请参见http://www.xici.net/b680445/d93048457.htm( A+ A. b$ ?( Z% e0 Q$ y/ m; @  h, D/ p
5 ^' }: E, N5 ^, g

" o: a2 Z7 R. U( Q; [% |( Y! l6 v9 G
  从硬件上讲,所谓的计算机位数是指处理器指令的长度,对硬件来说就是通用寄存器(GPR,General Purpose Registers)的宽度,它并不意味着地址总线的宽度,虽然有些情况下它们碰巧也会相等。对于当前的从80386开始算起的大多数x86处理器来说,通用寄存器的长度就是32位,支持x86-64(或者按照更常见的说法:x64)的处理器则可以支持64位的通用寄存器。32位的PowerPC(G5之前)使用32位的通用寄存器,指令长度固定为32位,DEC Alpha64则基于64位通用寄存器,指令为64位。
- m) Y2 h! x" Z. r, p" ]% a7 P
0 D/ X6 ?# P" r# I4 m  L3 E1 F6 d9 TIntel Pentium PRO运行16/32位混合操作系统Windows 95很慢,性能甚至低于运行纯32位操作系统Windows NT
  F" W5 u) R. h! |  32位操作系统指的它的指令们只使用32位宽度的GPR,并不意味着它只能的内存寻址就是32位。实际上,早在Pentium Pro(Pentium Pro是一个纯正的32位处理器)上就采用了36位的地址总线(基于这个原因,PAE有时也被称为PAE-36bit),寻址能力就达到了64GB,这个简单有效的扩展就被称为PAE(Phsical Address Extension,物理地址扩展),可见10多年前,x86处理器就能支持这么多的内存了。一再认为32位系统只能支持4GB内存在硬件上就错了。4 W: _% j( j0 s& \' V8 t/ s$ p, O
5 H/ c1 ?8 _/ \5 V( J% V9 C
32位XP/2003操作系统通过PAE来支持4GB以上的内存,因此具有“物理地址扩展”的字样
8 B) ^1 n) W0 J4 g

1 N# K* w) f, g) W& M) q但是32位Vista/2008内部直接使用64位PTE,因此就没有了PAE相关字样
  在现代操作系统上,如32位的Windows Vista/7,为了实现与64位的兼容(如,为了驱动程序编写的方便),系统使用了64位的PTE(Page Table Entry,分页表)来管理内存,因此它们就和64位版本一样,也能管理和使用更大的内存。
; M) ]1 C" f5 D& I1 j; o既然知道了32位Vista通过ZwQueryLicenseValue函数来决定系统能使用多少内存,而不是通过编写内存管理功能时就加上的限制,那么相对来说,让32位Windows突破(促销产品 主营产品)4GB的限制就比较简单了。
1 W, r6 ~8 `8 _9 ^; H7 M; v5 p  启动时系统在NTKRNLPA.EXE内核文件中使用了这样的代码:
( u1 j& h  [' Y2 B8 o ) ?. @8 y. y/ p/ M
Opcode Bytes
# {7 U! d2 R- b# `- i9 @9 ]  y操作码
Instruction9 K2 r8 l+ V: O. t2 t, u
汇编指令
[pre]7C xx[/pre][pre]jl      default[/pre]
[pre]8B 45 FC[/pre][pre]mov     eax,dword ptr [ebp-4][/pre]
[pre]85 C0[/pre][pre]test    eax,eax[/pre]
[pre]74 yy[/pre][pre]je      default[/pre]
0 ~6 M4 I$ b% }/ @) n% K) o% C
  执行中,eax寄存器中保存了ZwQueryLicenseValue的状态值,在通常情况下,系统跳转到default代码段,不允许使用超过4GB容量内存,通过简单的修改就可以让系统认为ZwQueryLicenseValue返回128GB的可用容量:
4 ?; Z# X8 l" J# h. B( s1 b
Opcode Bytes6 k% ~) s# W* s0 R
操作码
Instruction
% j& J& f' l1 O7 C汇编指令
[pre]B8 00 00 02 00 [/pre][pre]mov     eax,00020000h [/pre]
[pre]90[/pre][pre]nop[/pre]
[pre]90[/pre][pre]nop[/pre]

( h% Z7 K8 H: f) b$ M  nop是空操作的意思(no operation),20000h就代表着128GB(16进制值)。以下是上述指令在英文版本Vista上的位置:
0 A( l% p9 s0 Q' N( n8 p
Version
! p  H$ h; A6 c8 g# \+ O7 n版本号
Package
# c6 e2 M+ c7 r" H; D版本
File Offsets
) P6 I8 x# z" c/ I+ T" [文件偏移量
6.0.6000.16386Windows Vista0x003040B1, 0x003040F2
6.0.6001.18000Windows Vista SP10x00309AA3, 0x00309AE4

1 U' I3 R) N. w' ?' B) w为了安全,一般建议,修改后的内核文件名为NTKR128G.EXE2 n$ W6 m, a$ [0 p$ ]
  温馨提示:修改核心文件具有风险,此文仅用于研究用途。% H) k/ h' `1 f, ^+ b! t
8 v. r6 O% J' ^" h; t( I* o; p, @
 虽然知道原理之后还有很多操作,如,数字签名等操作,不过这些都是为人熟知,因此已经有不少的补丁实现了该大内存支持修改理论,有一个国内的圣贤实现的版本:
( V8 W1 J( I( i* ~( [. O
3 S0 E% O$ t4 i4 p
如图,请自行思考如何获得该软件
5 a; _. M6 ^2 q" y' m  p& Q
简单地按下“应用”按钮
/ X7 n/ {! f+ v/ I& X
一个新的核心文件就出炉了
; p3 ]9 ^) W$ m
该补丁还提供了一个自动修改启动选项以应用NTKR128G.EXE的命令行批处理文件

3 _, X! V3 K1 F( `自行进行修改
6 P1 B" k) n# _( @* t4 C0 I' F7 `3 R$ p/ R( Q& R
为了安全,这个补丁默认启动正常的核心文件,需要手动选择加入的新选项才能使用NTKR128G.EXE启动
  以下为可选命令:) t8 J7 X5 r7 d# ]
启动菜单10秒选择时间:
8 w+ t. Z8 w1 ?& w) Mbcdedit -timeout 10
1 V& ~" t3 _( R) Y2 @7 i$ K8 p9 X将指定的GUID代表的启动选项设置为第一项,GUID可以通过bcdedit命令显示出来(resumeobject):9 D- d' Q8 D; u# U1 T$ p; o! z) c
bcdedit -displayorder GUID -addfirst6 E. c0 e' S6 Z# |  G
修改默认启动为GUID代表的启动选项
9 W  Q0 O9 \0 c4 U6 |8 obcdedit -default GUID
) u1 W) n9 ^; N( q

$ F2 E' p0 W$ m1 B9 M. M6GB容量
  成功之后,系统将可以应用超过4GB以上的内存。虽然经过修改,已经解决了大内存支持的问题(顺便也解决了MMIO吃掉内存的问题),然而,在32位环境无法解决的是,进程的地址空间的问题。因为架构的原因,现代的普通32bit操作系统上,每一个用户模式的应用程序可以寻址的通常只有2GB(有一个选项可以让其增大为3GB)。提供多于4GB容量的内存,每一个用户模式的应用程序可以寻址的容量仍然没有改变——尽管不同的应用程序都具有互相独立的的2GB寻址空间可以让大内存电脑同时运行多个不同的程序。
6 g' l+ R/ i7 e! e4 c0 _( b

' ], r9 J* P5 m/ W4 D7 }- s通常,64位的应用程序才可以使用超过2GB的内存;64位应用程序的寻址空间是4TB
图中部的Virtual Size显示了一个程序使用的地址空间,Working Set则是其所有占用的内存(包括映射的系统文件),Private Bytes则是完全由程序自己占用的私有内存
  通常的应用程序就受到了这个限制,例如,在使用如Maxthon这样的多页面浏览器打开70个图片页面的时候,程序的寻址空间就已经到达2GB了,这时虽然其工作集并不大,然而程序已经无法寻址更多的内存;继续打开新的页面只会让Maxthon崩溃。& K  H5 `4 q$ M0 c
7 d. a! L4 D3 o6 Q0 @
  为了让程序突破(促销产品 主营产品)2GB寻址的限制,近代Windows NT核心提供了一个变通的方案:4GB内存调整优化技术,通过这个技术,可以将用户模式的寻址空间扩大至3GB,这样核心寻址空间便被限制为1GB了,需要超大内存容量的应用程序可以从这个特性中获得性能改善,如SQL Server数据库这种类型。要使用这个4GB内存优化技术,用户需要在Windows Server操作系统的启动参数中加入/3GB开关。这个特性同时需要操作系统打开DEP(数据执行保护,其实/3GB开关需要的是PAE的支持)。  m5 `3 m% C' J( w
  对于一个用户进程来说,默认的2GB可能已经足够,然而对于操作系统核心来说——所有的内核模式程序包括内核、驱动程序、系统缓存等都共享着相同的2GB空间(或者1GB;从这点上看,Windows已经不怎么具有微内核的样子了,为了性能,Windows将许多本应该放在用户模式的系统服务都放进了内核),在一个大系统上很容易受到限制。如上图这样,系统的System Cache总不会超过2GB(还要加上核心内存的占用),这样Superfetch也就无法发挥最大的作用。除了破解NTKRNLPA.EXE文件之外,以往还有一个方法来应用超过4GB的内存:RAMDISK,通过启动时装载的内核模式驱动,它也能让超过4GB的内存得到一些应用。显然,破解的方法更为灵活一些,不仅仅是RAMDISK才能使用4GB以上的内存。并且破解之后一样可以使用RAMDISK。
: g! j1 X* `; O! X/ M% }" \# U% o0 p* U/ r! c. _
32位Windows Vista突破(促销产品 主营产品)4GB容量限制(也可以应用于Windows 7)4 W; [8 b6 E1 A6 e
  然而,由于上一页所说的限制,使用64位操作系统仍然是推荐的,不仅仅是为了支持的最大内存容量更大,而是为了更强大的操作系统内部数据结构。
0 v4 {0 K* x; }; O  m
64位系统:系统缓存、分页池和未分页池(较小的系统缓存是因为笔者使用了一个应用软件来限制的缘故)
0 n8 x+ K  [: E% r  系统资源主要有四种:分页池、未分页池、系统分页表和系统缓存,System Cache系统缓存容易理解(用来缓存读取的各种程序/文件),系统分页表则是用来保存所有线程使用到的堆栈(Windows所有的线程都具有自己的堆栈),分页池和未分页池则是所有程序的核心模式组件使用到的内存部分,区别只是未分页池里分配的内存是不能交换到虚拟内存上面的,分页池上的则可以(从而可能保存到磁盘上去,当程序需要这些页面的时候,再读到内存里面来)。例如设备驱动就使用未分页池(假如放到虚拟内存并被交换到磁盘上时可能会发生灾难性的后果)。这些资源短缺的时候系统将会发生不可预料的事情,分页池吃紧的时候系统将会频繁地使用虚拟内存,从而不停读写磁盘减低性能,而未分页池吃紧的时候系统多半已经踏入鬼门关了。/ V' {) P7 Q: g4 C& y$ X/ N
  由于这些资源共同占用着相同的内核模式地址空间,因此在32位条件下很受限制,并且稍有不慎就会导致短缺,在64位环境下,这些资源的上限都可以达到128GB,因此系统运行起来会更加稳定,可以支持更多的进程/线程运行——也就是打开更多的窗口,运行更多的程序(从这点上看,32位的Vista也多少具有这些特征,虽然无法突破4GB的限制,不过系统资源的分配没有太过于固定的限制)。
6 n( c& ~) l9 u  L& w/ o8 M3 Z+ f
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
猴老大 发表于 2009-10-31 00:50:38 | 显示全部楼层
pentium系列的芯片有36根地址总线,这就是问题的答案
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

wwbmyos 发表于 2009-10-31 00:56:47 | 显示全部楼层
好长好长     
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

风中幽灵 发表于 2009-10-31 01:15:34 | 显示全部楼层
高手
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

猴老大 发表于 2009-10-31 01:28:35 | 显示全部楼层
灌水的同志消停下,注意版规
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

woaitun 发表于 2009-10-31 01:58:05 | 显示全部楼层
看的好晕啊  还是没看懂
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

loweny 发表于 2009-10-31 17:18:32 | 显示全部楼层
不是计算机的路过 看得半懂不懂的...
6 ?+ v- V5 x" B/ r( t( L3 I1 {/ ^. F5 g  u" b+ Q' M
话说 要是我把现在的2GB*1变成2GB*2可以吧...?...
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

xiangxiang 发表于 2009-11-1 23:54:54 | 显示全部楼层
以后用得到,未来的主流。。。。
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|龙江曦月 ( 闽ICP备05009150号-1 )闽公安网备35060202000316

GMT+8, 2025-5-26 09:23 , Processed in 0.069143 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表