对linux地址空间一段话的疑问?

Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟... Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为"用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。
如果实际地址并没有4G这么大的空间,比如X86机器的linux系统,只有2G内存,按上面的描述,内核空间一定会占用1G,那么应用程序空间将只有剩下的1G空间,实际中到底是如何划分的呢?
展开
 我来答
百度网友b9ae3d5
2014-04-12 · TA获得超过232个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:90.3万
展开全部
这个需要了解到操作系统的虚拟内存机制了。操作系统会在硬盘上开辟一块空间,从逻辑上凑够4G的内存地址。内存调度的时候,如果实际的物理内存中没有加载到需要读取的数据块,则会从硬盘上另外开辟的那片swap空间找到,交换进实际物理内存中。
更多追问追答
追问
从逻辑上凑够4G?具体含义是什么?我现在是想明白的是地址空间与实际内存空间及两者在系统启动过程中特定的映射关系。是不是按1:3的比例来分配内核与用户空间啊。
追答
上面所有说的例子,都是建立在32位系统的基础上。32位地址,能访问的最大地址空间是4G。这里所说的逻辑上的4G地址,和实际的4G物理内存空间不太一样。实际的物理内存空间可以理解为,实际物理内存(比如2G)+硬盘上划分出来的虚拟内存占用的磁盘空间(swap,大小需要自己配置)(这个和不一定就是4G,也可能比4G小)。当逻辑上的4G地址指向的数据在内存中找不到的时候,这个地址会映射到swap上,然后从swap拷贝到内存中,再返回。
至于内核空间与用户空间的分配,默认是按照1:3的比例来分配内核与用户空间的。当然,也可以在编译内核的时候修改宏定义去自定义内核空间与用户空间的大小。因此,在32位机器上,内核空间默认1G,而在64位机器上,则是16G了。
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
silmerusse
2014-04-12 · TA获得超过6640个赞
知道大有可为答主
回答量:2919
采纳率:33%
帮助的人:2112万
展开全部
虚拟地址4G是指最多4G
实际分配时才把虚拟地址映射到物理地址
需要多少分配多少 按页分 一个页面4KB
物理页可以在物理内存中 也可能在磁盘上
整个系统的内存(包括swap的)不够分了 分配就会失败 即使应用程序还没用到4G
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式