社区
Linux_Kernel
帖子详情
为什么linux操作系统内核在虚拟地址空间的3GB处?
avimatrix
2008-01-10 05:28:28
为什么linux操作系统内核在虚拟地址空间的3GB处?
...全文
1917
26
打赏
收藏
为什么linux操作系统内核在虚拟地址空间的3GB处?
为什么linux操作系统内核在虚拟地址空间的3GB处?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ask_qianru
2010-07-26
打赏
举报
回复
其实很简单,就是早先的一个规定,有些系统是在1G以内,而linux规定是3G到4G的范围
carey1986
2010-07-18
打赏
举报
回复
long型,32位上可以用int
[Quote=引用 24 楼 zecard_fu 的回复:]
引用 14 楼 sailor_8318 的回复:
内核在编译时有个默认参数KERNEL_BASE,通常默认为0xc000 0000即3G
也就是说Linux内核虚拟地址3G是可以更改的
问一下表示地址的是 unsigned int 型吗?
[/Quote]
louyong0571
2010-07-08
打赏
举报
回复
就是虚拟地址嘛
zecard_fu
2010-07-08
打赏
举报
回复
[Quote=引用 14 楼 sailor_8318 的回复:]
内核在编译时有个默认参数KERNEL_BASE,通常默认为0xc000 0000即3G
也就是说Linux内核虚拟地址3G是可以更改的
[/Quote]
问一下表示地址的是 unsigned int 型吗?
linkejin
2010-07-07
打赏
举报
回复
说的很深奥啊
火雲邪神
2010-07-04
打赏
举报
回复
http://peter-bochs.googlecode.com
zty598416146
2010-07-03
打赏
举报
回复
这个没啥关系吧 呵呵
Linconglc
2010-05-22
打赏
举报
回复
为了方便用户态和内核态的内存管理,当内存小于896时,内核会把物理地址永久映射在3G开始处,而对于使用前3G的用户态程序来说,如果内核动态分配物理地址到他的线性地址,那用户只能在系统给的区域里活动,超了,他访问不到,也无权访问。
ArtiFly2000
2010-05-21
打赏
举报
回复
没有关系,你一个进程用的不超过4G就成
进程用到哪些内存,就把这些内存映射到该进程的4G地址空间中就可以了
不过以后都64位系统了,那就没有4G地址空间的限制了
[Quote=引用 7 楼 xp4105 的回复:]
如果实际内存超过4G , 那怎么办呢?
如何分配地址 ?
[/Quote]
小新小新小新
2009-03-06
打赏
举报
回复
虚拟地址的开始:大概在3G+一段内核映射空间(最多896M)+8M
结束:4G减去几十K吧
内核映射空间来映射物理内存,其地址和物理地址之间有一固定的偏移3G,8M是防止虚拟地址越界,很多这方面的资料,你查查吧
meiZiNick
2008-05-01
打赏
举报
回复
以后需再关注,现在先帮你顶一下
杨帆_8318
2008-04-12
打赏
举报
回复
内核在编译时有个默认参数KERNEL_BASE,通常默认为0xc000 0000即3G
也就是说Linux内核虚拟地址3G是可以更改的
talent1224
2008-04-02
打赏
举报
回复
看《linux内核完全剖析》里面写得很清楚
Great_qiang
2008-03-12
打赏
举报
回复
在分页内存管理中,如果cpu是32位,那么系统只能管理到4G的内存空间。
虚地址是软件实现 物理地址则是指物理内存。
OstrichFly
2008-02-25
打赏
举报
回复
1: 并不是所有平台都在3G
2:i386没有PAE,并且编译时没有特别指定的时候才在3G
3:在这种情况下,由于地址总线最大只能访问4G的空间,并且为了在切换入内核空间时不需要重新加载内核的页表,使用了一个技巧:让内核与用户空间影射到同一内存段。根据实际需要,给内核保留了1G的内存空间,并且为了让应用程序看起来是从0地址开始的,那么内核的1G内存段就占用了3G~4G的空间。这就回答了你的问题。
4:其实这种方法不是唯一的,比如,可以让内核少占用一些空间,那么就不是3G了。或者,让内核与应用程序不映射到同一个内存空间,那么用户程序可以使用几乎全部的4G空间(有些patch可以做到,但这样的话内核<->用户态切换时代价很大。说几乎4G的原因是:调用syscall时还是需要一段内存传递参数的)。
还有最重要的一点:回答得这么辛苦,LZ下次问问题的时候给点分撒
gogofly_lee
2008-02-18
打赏
举报
回复
由于CPU总线是32位的,所以它最多能够支持2^32=4G的地址空间,在LINUX系统中,把3G以后作为内核空间,1--3G位用户进程空间,如果物理内存大于896M,则需要把多余的内存划分位高端内存,利用1G-896M的内存来映射高端内存,这也是为什么物理内存大于896M而不是1G时就需要高端内存的原因。
对于64位的系统,它的内存空间可以倒2^46,所以不因该有此限制。
DennisRitche
2008-01-29
打赏
举报
回复
虚拟地址 线性地址 物理地址
弄清楚先
windlazio
2008-01-22
打赏
举报
回复
内存可以分为3个部分,最底下的16M是供DMA使用的,1G以下的为正常内存区ZONE_NORMAL,如果内存超过1G,多出来的部分是高端内存区ZONE_HIGH,正常内存区和高端内存区对内存的管理方式不一样
xp4105
2008-01-21
打赏
举报
回复
如果实际内存超过4G , 那怎么办呢?
如何分配地址 ?
crashbluebird
2008-01-18
打赏
举报
回复
4GB是32位系统虚拟内存的上限。即使你只有64m的物理内存也可以有4GB的虚拟内存
一般用户进程在0到2G 操作系统在3到4G
但也不是绝对的,可以通过设置boot.ini使用用户进程空间达到3G的大小。
具体哪个option可以去网上查。
加载更多回复(5)
linux
2.6.1
内核
源码注释
包含
LINUX
内核
同步、信号、内存、调度、文件系统、网络系统、时钟等部分的源码注释。前后历时三年,算是干货。
【003
Linux
内核
】什么是
内核
空间,用户空间?
对 32 位
操作系统
而言,它的寻址空间(
虚拟
地址空间
,或叫线性
地址空间
)为 4G(2的32次方)。也就是说一个进程的最大
地址空间
为 4G。
操作系统
的核心是
内核
(kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。具体的实现方式基本都是由
操作系统
将
虚拟
地址空间
划分为两部分,一部分为
内核
空间,另一部分为用户空间。针对
Linux
操作系统
而言,最高的 1G 字节(从
虚拟
地址 0xC0000000 到 0xFFFFFFFF)由
内核
使用,称为
内核
空间。
Linux
的用户空间与
内核
空间
一. 简介
Linux
操作系统
和驱动程序运行在
内核
空间,应用程序运行在用户空间。两者不能简单地使用指针传递数据,因为
Linux
使用的
虚拟
内存机制,用户空间的数据可能被换出,当
内核
空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而
内核
空间有自己的规则;本文旨在探讨
内核
空间的地址映射。 os分配给每个进程一个独立的、连续的、
虚拟
的地址内存空间,该大小一般是4G(3...
Linux
系统编程---用户空间与
内核
空间
一、基本概念
Linux
操作系统
和驱动程序运行在
内核
空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为
Linux
使用的
虚拟
内存机制,用户空间的数据可能被换出,当
内核
空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而
内核
空间有自己的规则。 (1)
Linux
内核
地址空间
划分 通常32位
Linux
内核
虚拟
地址空间
划分0~
3G
为用户空间,3~4G为
内核
空间(注意,
内核
可以使用的线性地址只有1G)。注意这里是32位
内核
地址空间
...
【
Linux
内核
内存管理】
虚拟
地址空间
布局架构 ① (
虚拟
地址空间
布局架构 | 用户
虚拟
地址空间
划分 )
一、
虚拟
地址空间
布局架构、 二、用户
虚拟
地址空间
划分
Linux_Kernel
4,466
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章