+ -
当前位置:首页 → 问答吧 → 请教关于highmem的问题

请教关于highmem的问题

时间:2010-08-23

来源:互联网

按照ULK3,当RAM小雨896MB的时候,所有这些内存将全部被映射到内核页表,也即物理地址A将被映射成虚拟地址A+PAGE_OFFSET。此时如果用户进程申请内存,岂不是没有内存可用了?

谢谢!

作者: rc_hz   发布时间: 2010-08-23

书上讲的这一段是内核的线性地址,又不是用户进程 的地址空间,用户申请,是在用户进程的地址空间中申请的。

用户进程有4GB的线性地址,内核有1GB的线性地址——但是并不是说,用户进程4GB中最后那一个1GB就是内核的地址空间。因为每个程序(包括内核)都有其独立的虚拟地址空间。互不相干!

作者: 独孤九贱   发布时间: 2010-08-23

回复 独孤九贱

谢谢,但还是不解啊!

我的疑惑是这样的:用户进程虚拟地址与物理地址的映射可以是任意的(动态决定的),而内核的虚拟地址与物理地址的映射则是固定的。先假设某个用户进程的某个虚拟地址映射到了物理内存128M处,现假设内核刚好要用到虚拟地址3G+128M,那内核岂不是也要用到物理内存128M吗?

作者: rc_hz   发布时间: 2010-08-23

本帖最后由 独孤九贱 于 2010-08-23 11:41 编辑

线性地址页表最终映射的物理页帧,是由操作系统来管理的,事实上,它并不一定映射到一个具体的物理内存地址,有可能已经被交换到辅助存储器(如硬盘上)了。
像这说这种情况,除非显示的使用mmap做内存共享,否则是不可能发生的。

你读的ULK3那一章,好像是讲内核的线性地址的分布吧,后面有一章专门讲进程的地址空间的。

作者: 独孤九贱   发布时间: 2010-08-23

本帖最后由 tempname2 于 2010-08-23 11:45 编辑


QUOTE:
线性地址页表最终映射的物理页帧,是由操作系统来管理的,事实上,它并不一定映射到一个具体的物理内存地址 ...
独孤九贱 发表于 2010-08-23 11:40



那前端物理空间的分配情况到底是怎么样的呢?是不是内核一开始就占据了所够占据的所有内存?进程要物理内存和内核要物理内存都是通过同一子系统么?内存来源都是混在一起的吗?

作者: tempname2   发布时间: 2010-08-23

回复 rc_hz


    内核知道这个地址分配给了用户空间,那么对它的访问就是对用户空间的访问.
一个程序不会平白无辜的访问一个地址,除非有BUG.

作者: smalloc   发布时间: 2010-08-23

我又想到一个问题,内核所用的页应该不会被换出去,那内核可以使用的内存数岂不一个定值?

作者: tempname2   发布时间: 2010-08-23

回复 tempname2


    1-2个G还不够?

作者: smalloc   发布时间: 2010-08-23



QUOTE:
回复  tempname2


    1-2个G还不够?
smalloc 发表于 2010-08-23 12:02



不是呀,我是说难道内核一开始就把自己的1G 虚拟地址全部映射到物理地址上吗?如果内存只有256M怎么办呢?

作者: tempname2   发布时间: 2010-08-23

回复 tempname2


    这个我觉得内核空间的页并不算就是给内核使用的页,是2个概念

作者: smalloc   发布时间: 2010-08-23



QUOTE:
线性地址页表最终映射的物理页帧,是由操作系统来管理的,事实上,它并不一定映射到一个具体的物理内存地址 ...
独孤九贱 发表于 2010-08-23 11:40



我在看的是第二章关于“内核页表”的那一节。我也知道线性地址并不一定映射到具体的物理内存地址。但我看内核的线性地址映射中(3G ~ 3G+896M),却提供了线性地址与物理地址的一一映射(宏__pa,宏__va),这就相当于是说物理内存0 ~ 896M只能映射到虚拟地址3G ~ 3G+896M啊

作者: rc_hz   发布时间: 2010-08-23



QUOTE:
回复  tempname2


    这个我觉得内核空间的页并不算就是给内核使用的页,是2个概念
smalloc 发表于 2010-08-23 12:11



我看内存这一块已经很久了,一直处于一种极其恐怖的状态:根本不知道自己哪里不懂!!感觉上就是不懂,但问问题都不知道该问什么!!

现在就问一个问题:


QUOTE:
内核地址空间所映射到的低端物理内存是不能被进程使用?

作者: tempname2   发布时间: 2010-08-23

回复 tempname2

同感啊

作者: rc_hz   发布时间: 2010-08-23

回复 tempname2


    什么叫低端内存.如果仅仅是小于896的,那当然是可以的.
只是物理页面还有个是否"脏"的问题.你有用TOP程序看到内存使用率,未使用的就就是干净页面.

作者: smalloc   发布时间: 2010-08-23