百科问答小站 logo
百科问答小站 font logo



为何微软不在新的操作系统中让 32 位支持大于 4GB 的内存? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

先给一个参考文献:

The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version

先说结论:

1、PAE允许操作系统在32位模式下使用大于4G的物理内存。

2、不管是否使用PAE,对于单个进程而言,32位系统下可见的地址空间最大只有4G。

3、PAE的优势是可以让不同的进程(在不同的地址空间里)累计使用大于4G的内存,因此而达到使用超过4G内存的目的。

4、WindowsXP系列虽然支持PAE,但实际在使用中最大内存限制在了4G,是人为限制的,原因后面给分析(楼上给出的各种理由都不成立,这里是有技术原因的)。

5、Linux则在开启PAE的模式下能支持在32位系统中使用超过4G的内存。

然后给原因,其实就是我最初给的链接里的内容:

This issue occurs because of a design change in Windows XP SP2 that is also included in Windows Vista. The changes were made to PAE mode behavior to improve driver compatibility.

To reduce driver compatibility issues, Windows Vista and Windows XP Service Pack 2 or a later version include hardware abstraction layer (HAL) changes that mimic the 32-bit HAL DMA behavior. The modified HAL grants unlimited map registers when the computer is running in PAE mode. Additionally, the kernel memory manager ignores any physical address that is more than 4 GB. Any system RAM that is more than the 4 GB barrier would be made unaddressable by Windows and be unusable in the system. By limiting the address space to 4 GB, devices with 32-bit DMA bus master capability will not see a transaction with an address that is more than the 4 GB barrier. Because these changes remove the need to double-buffer the transactions, they avoid a class of bugs in some drivers that is related to the correct implementation of double buffering support.

英文比较长我大概解释一下(以下仅限x86-32/64bit平台,不考虑其它arch):

首先要先科普一下DMA:DMA的意思可以大概理解为:让硬件(比如显卡、声卡、USB、磁盘控制器等)直接操作物理内存,等操作完成以后返回一个中断给操作系统,告诉操作系统说我干完了。

DMA的好处就是:假如我想要往磁盘上写数据,数据已经在内存里了,那么CPU只需要把内存地址告诉磁盘控制器,剩下就不用管了,磁盘控制器完成写操作以后会告诉CPU说写完了,这个期间不耽误CPU做其它的事情。

DMA跟4G内存有什么关系?当然有关系了,因为不是所有内存都是随便都能做DMA的

如果写过64位操作系统的驱动的话,应该会了解到:有一些外设是无法访问超过4G的内存地址的,有些外设做DMA的时候,能访问的地址都是4G以下的地址(如果我没记错,USB-EHCI控制器好像就是这样的)。

因此在64位操作系统里,所有DMA操作都是先专门申请一块专门的DMA内存(4G以下),然后再进行操作。而32位系统里,则一般没有这个限制。

好了,问题就来了:

微软的XP是十几年前的操作系统,在当时的硬件环境里,所有内存都是可以做DMA的。所以在XP的内核API里,没有考虑过内存不能DMA的情况,所以,XP里的各种驱动、软件在写代码的时候,也都没有考虑过内存能不能DMA,只要拿来用就是了。

而十几年间,硬件发生了翻天覆地的变化,而XP由于其强大的兼容性,这方面的API一直都没改进。况且,想改进也不行,因为必须二进制兼容旧代码,并且由于这个兼容性的问题从XP一直延续到了Vista,所以包括Win7在内的各种版本,都必须保持这个兼容性。

二进制兼容这个巨大的包袱使得MS如果真使用了大于4G的内存,那么很有可能出现蓝屏之类的异常情况,因为微软也不知道用户的驱动代码是怎么写的,会不会直接使用内存进行DMA。

所以,微软强行把内存限制在4G以下是为了保持可恨的兼容性。

如果放弃了兼容性可不可以?当然可以了,但那就不是XP而是另一个版本的Windows了。

为什么Server版一直都支持超过4G的内存?因为Server版的驱动跟普通版的不兼容。

所以楼上的所有解释都是不对的,不是市场定位或者照顾用户情绪或者不想让用户这么做,而是因为兼容性无法保证DMA正确执行(微软也解释的很清楚了,但是国内用户似乎没人注意)。

有人提了Ready For 4G,这东西会导致某些程序异常,原因就是这些程序在运行中尝试直接使用物理地址(很多软件就是这么流氓),而代码中获得的物理地址都是32bit的,在某些情况下代码中获得的地址不是实际的物理地址,而导致程序崩溃,说实话,没蓝屏已经很不错了。

如果要让Windows支持超过4G内存,那么几乎所有驱动都要重写一遍,这里还包括操作系统中运行的大量第三方未签名的驱动,这么大的负担显然是谁也承担不了的,因此在32位系统上无法使用4G内存。所以,不是不想,是不能

评论里有人提出,如果专门识别一下驱动,对于非认证的驱动强制限制在4G以下,认证过的驱动允许使用高于4G的地址,这样是否可以?

答案是可以的。问题是这么做代价很大,内核中各个API都要多一条甚至几条检查路径来判断驱动的情况,甚至还要小心驱动代码直接用non-paged内存搞DMA,这么做效率就是一个问题,而且微软是无法拿到所有驱动的源码的,比如显卡厂商一般就只发布binary的驱动,所以,微软无法知道这个驱动里究竟搞了什么小动作。所以不得不把这条路堵死。


user avatar   pansz 网友的相关建议: 
      

都不买,买国债,存结构性存款。通讯录里哪位有钱人要是愿意带带我,我就入个股。100万能买房我早就买了,我好歹月薪上千元人民币,工龄十几年,100万的房子我啃老就买了。买车……工作地点2006年就没有停车场了,班车通常半小时内能把我送到。


user avatar   tim-chen-21 网友的相关建议: 
      

我是一名基层派出所民警。

可以说当今中国警察普遍羡慕美国警察可以采取暴力手段绝对的镇压不法分子。

但是,不得不说,这次这位美国警察,太过分了,不仅是过分,而且我的理解是那已经构成了犯罪行为。那黑人已经制服了就可以正常上拷带走了,没必要一直压着脖子压那么长时间。没能置身其中不知现场那美国警察的所思所想,反正我个人挺不理解他为啥那样干的。

只能说无论什么地方,无论什么行业,只要是人的社会,都有像样的也有操蛋的吧。

_________此处为分割线 _________

以下为统一答复评论中有些人质疑的我所讲的羡慕二字。

能够出现这种质疑在我料想之中,因为中国警察也有过过分的时代,据我所知就是在七十八十九十年代,就如同地痞流氓,看谁不顺眼就能打谁对老百姓而言没王法可讲,那时候的警察说好听点可以说是威风凛凛说难听点儿是横行霸道。

但我想表明的是,时过境迁,现在的中国警察无论是受舆论约束还是因为法治社会建设制度规范都已经变得逐步文明与规范起来,起码我认为从我们现在开始从公安司法院校毕业参加公务员考试考进来的新一代警察已经具备新的面目,当然不可否认的是在这个行业内目前仍然存有历史的顽疾,仍然存在着臭虫,但我已经讲过无论什么行业都有操蛋的吧,这是个人问题,不是群体问题。相比之下,拍拍良心看,现在的整个警察队伍比照曾经确实过分的年代是不是已经是天地之别,问问曾经真正挨过曾经年代老警察欺负的中老年人就知道了。

为何会说起羡慕,因为警察每天面对的人群,大多是三教九流之辈,没有武力加身,很多事情在处理上警察显得软弱无能,说白了,好人谁没事儿上派出所转悠啊都忙着自己的生活呢,警察打人这句话,我们常常听到,但是但凡有点脑袋的人都能想明白,警察会闲着没事儿干把那在家里消停待着的遵纪守法的人抓起来暴揍一顿吗?

以上言辞不免更会有人质疑,请允许我解释,武力,当然不可滥用,我所说的羡慕不是羡慕美国警察的随意滥用武力,而是在合法范围内准许在对方不听从警察指令时动用武力,现在确实有人民警察法赋予了相关权力,但实践中现在的中国警察并不能或者说不敢执行人民警察法里的所有权力。拿防疫工作举例,卡口的工作人员在让出入的人员扫码登记时,就会有不愿意配合的人,然而这些不愿意配合的人可会知道工作人员的所做所为是为了整个社区的稳定安全,因为这整个社区包括了这名不愿意配合的人啊,在这个时候是否应当对其进行武力控制来保障其他居民的安全呢。同理,警察盘查也好,调查也好,总会有那些不愿意配合的人,自我感觉良好认为自己没问题所以警察不必要对其进行盘查所以就不配合,而警察当看到对方不配合时会以什么视角审视,难道要说谢谢您的不配合吗,万一这不愿配合的人真背着案子呢,那便是对更多的人民群众的不负责任。因此,我要说,民众的素质如果真正达到了人人互相敬重路不拾遗夜不闭户的文明程度,要求警察绝对文明不要有暴力举动,一点问题没有,一味强调了警察不该暴力执法而分毫不过问被执法对象自身是否存在问题,是不是看问题的角度些微的片面了些。

请注意,我说羡慕里的那句话尾巴实际已经表明了,羡慕的是暴力手段对不法分子的镇压,可不是对遵纪守法的百姓也要肆意妄为。例如像给群众办个身份证居住证之类的业务,警察当然应该热心服务。但当面对泼皮无赖时,还要笑脸相迎,得来的只有蹬鼻子上脸,警察都不怕了,您们认为这些无赖还有谁管得了。

列位存有异议的同志们,谢谢您们的教诲。言辞中犀利的同志们,谢谢您们的敦促。

让我知道当警察,需要吾日三省吾身。

还想要质疑甚或是骂的您们,若是能让您舒服,骂两句无妨。我不算您辱骂警察。不过是,道不同不相为谋罢了吧。

_____分割线

2020年6月5日22:53 出警在路上


user avatar   yeswjh 网友的相关建议: 
      

刚发现Wi-Fi6也搞了两个release,和Wi-Fi 5(即802.11ac)时候的wave 1和wave 2差不多。

对于一般Wi-Fi 6的用户影响不大,Wi-Fi主要的PHY的特性,比如高阶调制之类的在release 1里面已经支持,主要的MAC特性,也就是OFDMA也在release 1里面支持的,包含OFDMA的上行和下行传输。还有SRP相关的BSS Color,Adaptive-CCA,Dual-NAV之类的,差不多也在release 1里面。所以基本上大家所关注的一些主要特性都在release 1里面有了。

至于release 2里面目前看介绍主要就是两个部分,一个是上行MU-MIMO,这个理论上能够提升不少速率,毕竟支持多用户同时上行接入了。在MU-MIMO的一开始,也就是802.11ac的时代,这个是不支持的。只不过估计落地成本和技术手段限制,所以release 2才放进去。802.11ax协议里面是没有分release 1和release 2的。可能相比MU-MIMO,在Wi-Fi 6里面OFDMA更重要点,而Release 2里面的上行MU-MIMO更多的是一个锦上添花的功能,如果价格不用添加或者添加很少,那么估计还是受欢迎的,如果价格过高,那么还是看看吧。至于另外一个就是TWT了,TWT技术是从节能手段来做的,其实个人感觉哎,新的802.11ba标准,即wake-up radio的机制可能更适合802.11的节能,而TWT说实在的,有点复杂,而且其节能模式实际上可以理解成基于调度的机制,比如下面一张图可能更好理解些。

Ref:CommScope Ruckus的slide

左边的就是没有启用TWT的,那么所有的节点虽然工作在节能模式下,但是大家还是要互相争抢,这个争抢过程还是要耗能的。右边的就是TWT,其实就是对于每一个节点对象,其节能的时间点进行了调度,一个节点醒了,然后传输,其他节点这个时候还接着睡。其实总体而言,Wi-Fi 6的MAC和传统Wi-Fi 5以前相比,其实就是一个无序到有序控制的过程。下面这张图今天看的,感觉就很直观

Ref:CommScope Ruckus的slide
Ref:CommScope Ruckus的slide

所以实际上TWT看起来还是有效果的,而且属于Wi-Fi 6里面一个主要特性。Release 1版本其实有很多公司都做了,只不过兼容性的问题挺多的,这次release 2的版本不知道能不能彻底解决这个问题。大致就是这些了。




  

相关话题

  “为什么大脑不能像计算机一样有并发性,而每次只能想一件事情?不像计算机一样,可以同时开多个程序。”? 
  Linux下有什么真正断电可靠的文件系统? 
  如何看待鸿蒙os里全是android痕迹? 
  如何看待 Windows 11 硬件要求导致 TPM 2.0 模块价格暴涨 3 倍? 
  国外发达国家码农是真混得好么? 
  请问有哪些法律和计算机领域结合的例子? 
  为什么char *a="xxxxx", *b="xxx"; strcpy(a, b);的用法不行? 
  为什么电脑无系统自带广告,同样价格的手机却要见缝插针植入系统广告? 
  操作系统中到底是谁分配的资源? 
  程序员讲到底就是”增删改查“吗? 

前一个讨论
中英文思维的差别?
下一个讨论
什么是「潜在博弈(potential game)」?





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利