4GB的地址空间够用吗?

snwcwt 2002-08-25 03:27:31
在WINDOWS操作系统中,每个WIN32进程都有4GB的虚拟地址空间,当然进程并用不到这么多的空间,而每个WIN32进程用到的虚拟地址最终都会映射到4GB的物理地址空间中。假设当运行了很多进程而所有的进程用到的虚拟内存总和大于4GB(物理内存+内存映象文件的总和会大于4GB吗?),可32位地址只能寻址4GB的空间,那么多于4GB的虚拟内存将映射到那里呢?
...全文
95 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwanter 2002-08-27
  • 打赏
  • 举报
回复
虽然每个进程的理论地址空间是4G,但实际上每个进程所用的空间不会到4G。楼主的问题关键不在于此,而是当运行很多进程时,每个进程所占用的实际空间总和大于4G怎么办?其实这个不用担心,操作系统会提供磁盘空间用于交换内存中的数据(这就是为什么有时候玩游戏时,硬盘会狂转不停的原因),当某个进程要访问的数据不在内存中,操作系统会发生异常,由异常处理进程将所需页面调入内存,进程继续执行。
紫郢剑侠 2002-08-26
  • 打赏
  • 举报
回复
GZ...
Learning...
giantzz 2002-08-26
  • 打赏
  • 举报
回复
snwcwt 2002-08-26
  • 打赏
  • 举报
回复
to giantzz(牛!是怎么死的。。。) (▃▄▅▆▇█) :
描述符可以描述4GB的段,一个任务需要4GB的空间,所以一个进程就用一个描述符.我想是这样的吧
ameba 2002-08-26
  • 打赏
  • 举报
回复
每个机器的进程使用空间的总和一般不可能大于系统的实际物理内存+虚拟内存,
只要你的虚拟内存>=物理内存就可以了。当物理内存不够时就不会再产生进程(运行程序)了
giantzz 2002-08-25
  • 打赏
  • 举报
回复
to wowocock(机器猫):
你说在保护模式下每个描述符可以描述一个内存段4GB用来存放一个进程的地址空间,你的意思是说描述符是描述一个任务,而不是一个段,是吗,请指教?
wowocock 2002-08-25
  • 打赏
  • 举报
回复
这和WINDOWS操作系统无关,在保护模式下每个描述符可以描述一个内存段4GB用来
存放一个进程的地址空间,而保护模式下有GDT,LDT每个表中可以8192个描述符
所以系统可用的地址空间为2*8192*4GB=64TB,当然实际上也不会有那么多内存
就通过虚拟内存来实现,通过分页机制来实现,要注意的是不同的进程位于不同的地址空间,也许他们的线性地址相同,但由于采用不同的映射机制,所以实际上是
位于不同的物理地址,这就是进程隔离的道理,而共用的部分则采用相同映射机制
从而达到共享的目的。
giantzz 2002-08-25
  • 打赏
  • 举报
回复
你的概念错了,如果说是在WINDOWS下,是不可能多进程的空间超过4GB,操作系统是不允许的,而你说要假设操作系统允许,这就是你概念出错了;但是要说与操作系统无关,一个进程的虚拟空间是64TB
-------------------------------------------
假设操作系统允许,那还真是不够用了,致于WINDOWS是怎么分配描述符的,我还真想了解,哪位了解WINDOWS的高手说说,因为我的方向很少与操作系统相关!
giantzz 2002-08-25
  • 打赏
  • 举报
回复
不要说钻牛角尖了这种话,对于技术必须这样,中国就是少了这样的人
耙子 2002-08-25
  • 打赏
  • 举报
回复
你钻牛角尖了。

win32系统的确允许每个进程使用4G的空间(实际上给进程用的只有2G,另有2G系统用了)

cpu存在一个v86 模式(虚拟86模式),我们所说的多任务也是在这下面的。
cpu是按照优先级分配时间片给每个进程的,在进程的内部,你可以任意寻址0~4G的范围,但是这个范围不是实际物理内存的地址,是进程内部的逻辑地址。他会在实际的物理地址中重新映射,由于物理内存有限,所以不常用的部分就变成了交换文件里面的虚拟内存。
每个机器的进程使用空间的总和不应该大于系统的实际物理内存+虚拟内存,
我们现在的机器 一般都是 256M实际物理内存 + xxxM虚拟内存。所以,如果你的机器真的跑若干了进程,如果占用内存大于了这些,那系统可定会提示内存不足,或者崩溃的。

关键理解 理论上和实际上的区别。
snwcwt 2002-08-25
  • 打赏
  • 举报
回复
我是指如果很多进程,会不会存在物理地址空间会不会够用(能够寻址的物理地址空间只有4GB吧),希望能讲一下进程之间切换时内存映射是怎么改变的,3ks
giantzz 2002-08-25
  • 打赏
  • 举报
回复
很多进程用4GB也能寻到,因为每个进程小于4GB,所以不存在大于4GB的情况

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧