免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1443 | 回复: 4
打印 上一主题 下一主题

[学习分享] Linux内核高端内存的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-17 10:45 |只看该作者 |倒序浏览
最近在学习linux的内核,对物理内存的管理存在很大的疑问。
1. 虚拟地址0xc0000000~0xffffffff为内核用,共1G的虚拟地址空间。那如何映射物理内存超过1G的地址呢?虽然后面的100多M虚拟地址空间可进行动态的映射后面的物理内存,但如果某个程序就把这100多M占住不放,那其他的物理内存岂不是无法映射了,那物理内存岂不是浪费了?
2. 假设物理内存小于896M,则在内核中前896M地址空间和物理内存是一一对应映射的。某个进程用物理内存的时候会在进程空间中也对这个物理内存在0~3G空间进行映射,这样岂不是一个物理内存被进程空间和内核空间映射了两遍,这样是不是把虚拟地址空间浪费了?
3. 进程的0~3G虚拟地址空间能否映射超出内核映射的896M物理地址空间。比如某个进程的虚拟地址可不可以直接映射2G的物理地址?
4. 外设的内存在linux如何进行映射,特别是现在显卡的显存都快上G了,这部分空间会映射到虚拟地址空间吗?如果会的话如何映射呢?

感觉内存管理这个地方超级复杂,而且为了各种平台上的移植性做了各种抽象,所以看得特别累,望各位赐教。

论坛徽章:
17
巨蟹座
日期:2014-11-20 23:04:5215-16赛季CBA联赛之北控
日期:2018-08-01 16:08:4015-16赛季CBA联赛之浙江
日期:2017-12-08 11:25:2415-16赛季CBA联赛之四川
日期:2016-11-21 00:16:50操作系统版块每日发帖之星
日期:2016-07-28 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-25 15:36:04操作系统版块每日发帖之星
日期:2016-02-12 06:20:002015亚冠之西悉尼流浪者
日期:2015-08-28 14:48:322015亚冠之平阳省
日期:2015-08-19 14:54:162015亚冠之武里南联
日期:2015-07-07 10:49:112015亚冠之城南
日期:2015-06-22 10:15:002015亚冠之山东鲁能
日期:2015-06-18 18:03:44
2 [报告]
发表于 2015-11-17 12:55 |只看该作者
本帖最后由 yyu0378 于 2015-11-17 12:56 编辑

我也不是很熟,我先声明一下:
1:这个是虚拟内存的高位1G,专门内核使用,也是进程间数据交换用的,一般是不让用户模式进程使用的
2:物理内存应该不是和虚拟内存空间一一映射,虚拟内存本来就是虚拟的,浪费点也没啥吧
3:一般进程不能够修改内核的内存空间,如果程序要求超过物理内存的大小,系统会启用交换内存,也就是将部分内容存放在硬盘上,在linux系统这个一般是swap分区
4:x86是要映射到统一的内存空间,其他平台有分开的,显存很大,但是内核没必要一次性全部映射过来,需要的映射不需要先不映射,和内存分配是同样的道理

论坛徽章:
0
3 [报告]
发表于 2015-11-17 14:16 |只看该作者
回复 2# yyu0378

非常感谢!还是有些疑问:
2:物理内存应该不是和虚拟内存空间一一映射,虚拟内存本来就是虚拟的,浪费点也没啥吧
我是说内核里面只有1G的虚拟地址空间,但如果物理内存很大的话(比如3G)岂不是浪费了物理内存。


3:一般进程不能够修改内核的内存空间,如果程序要求超过物理内存的大小,系统会启用交换内存,也就是将部分内容存放在硬盘上,在linux系统这个一般是swap分区
我想问的是物理内存比较大的情况,像现在动不动2,3G的内存。一个进程的页表可以直接映射896M以外的物理内存吗?


4:x86是要映射到统一的内存空间,其他平台有分开的,显存很大,但是内核没必要一次性全部映射过来,需要的映射不需要先不映射,和内存分配是同样的道理
    如果是要映射显存,是映射到内核的虚拟地址空间还是进程的虚拟地址空间呢?

论坛徽章:
17
巨蟹座
日期:2014-11-20 23:04:5215-16赛季CBA联赛之北控
日期:2018-08-01 16:08:4015-16赛季CBA联赛之浙江
日期:2017-12-08 11:25:2415-16赛季CBA联赛之四川
日期:2016-11-21 00:16:50操作系统版块每日发帖之星
日期:2016-07-28 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-25 15:36:04操作系统版块每日发帖之星
日期:2016-02-12 06:20:002015亚冠之西悉尼流浪者
日期:2015-08-28 14:48:322015亚冠之平阳省
日期:2015-08-19 14:54:162015亚冠之武里南联
日期:2015-07-07 10:49:112015亚冠之城南
日期:2015-06-22 10:15:002015亚冠之山东鲁能
日期:2015-06-18 18:03:44
4 [报告]
发表于 2015-11-17 16:06 |只看该作者
2:内核是占用每个线程的虚拟内存4G的最高的1G,并不是只有1G空间,这个空间是很大的
3:保护模式下,可以访问超过1M的内存空间,最大到4G物理内存(不考虑PAE的情况下)
4:一般是内核的

论坛徽章:
0
5 [报告]
发表于 2015-11-19 09:44 |只看该作者
非常感谢!回复 4# yyu0378


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP