内核的地址是简单的线性映射这句话怎么理解啊?

发布于 2022-10-03 23:13:48 字数 237 浏览 29 评论 0

对物理地址来说,给定一个虚地址x,其物理地址就是x-page_offset 。
还有这行代码
asm volatile("movl %0,%%cr3"::"r"(_pa(next->pgd)));
说明一个虚地址直接减去位移就得到物理地址了??

那虚地址有1G那么大,物理地址多半没这么大啊?用户空间的地址怎么办?

请哪位大虾指点一下,谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

卸妝后依然美 2022-10-10 23:13:48

在看《内核情景分析》,多看几遍你就明白来,作者说的很清楚的。

软糯酥胸 2022-10-10 23:13:48

我就是看那个啊,看了好几遍了,

不明白这个物理地址指的是哪个地址

如梦初醒的夏天 2022-10-10 23:13:48

老大们指点一下啊

提笔书几行 2022-10-10 23:13:48

Linux内核将这4G字节的空间分为两部分,最高的1G用于内核,称为系统空间。
虽然系统空间占据了每个虚存空间最高的1G字节,但在物理内存中却总是从地址0开始。所以,对内核来说,其地址映射是很简单的线性映射

内核的空间有1G这么多,怎么可能直接就可以映射呢?

漫漫岁月 2022-10-10 23:13:48

  由于计算机系统中所含的实际物理内存容量是有限的。为了能有效地使用这些物理内存,Linux采用了Intel CPU的内存分页管理机制,使用虚拟线性地址与实际物理内存地址映射的方法让所有同时执行的程序共同使用有限的内存。内存分页管理的基本原理是将整个主内存区域划分成4096字节为一页的内存页面。程序申请使用内存时,就以内存页为单位进行分配。
  在使用这种内存分页管理方法时,每个执行中的进程(任务)可以使用比实际内存容量大得多的线性地址空间。对于Intel 80386系统,其CPU可以提供多达4G的线性地址空间。而linux 0.11内核则为每个进程分配了64MB的线性地址空间,见图所示。

  为了使用实际物理内存,每个进程的线性地址通过二级内存页表动态地映射到主内存区域的不同内存页上。因此每个进程最大可用的虚拟内存空间是64MB。
  每个进程的逻辑地址通过加上任务号*64M即可转换为线性地址。不过在注释中,我们通常将进程中的地址简单地称为线性地址。

对于Intel 80386系统,其CPU可以提供多达4G的线性地址空间。对于linux 0.11内核,系统设置全局描述符表GDT中的段描述符项数最大为256,其中2项空闲、2项系统使用,每个进程使用两项。因此,此时系统可以最多容纳 (256-4)/2 + 1=127 个任务,并且虚拟地址范围是 ((256-4)/2)* 64MB 约等于8G。但0.11内核中人工定义最大任务数NR_TASKS = 64个,每个进程虚拟地址(或线性地址)范围是64M,并且各个进程的虚拟地址起始位置是(任务号-1)*64MB。因此所使用的虚拟地址空间范围是 64MB*64 =4G,见图2.7所示。4G正好与CPU的线性地址空间范围或物理地址空间范围相同,因此在0.11内核中比较容易混淆三种地址概念。

淑女气质 2022-10-10 23:13:48

可是,在现在的LINUX版本中,内存管理有变化啊

每个进程都有3G的用户空间,然后共享1G的系统空间。
我不明白的是,为什么系统空间的地址到物理地址只要简单的位移映射呢?

感情旳空白 2022-10-10 23:13:48

顶一下,有人指点吗?

仙女山的月亮 2022-10-10 23:13:48

弱智老人正解

仙气飘飘 2022-10-10 23:13:48

原帖由 menp9999 于 2005-12-5 11:32 发表

从理论上讲,说简单位移映射是没有道理的,完全可以实现系统空间的地址向任何一个物理地址映射(只要这个物理地址没有使用的话),但问题是由虚地址查找物理地址只能依靠查表了,划不来,呵呵,所以大家就 ...

这么说,内核的内存基本在NORMAL zone了。
是不是正是由于这个原因,linux才需要划分出HIMEM zone呢?

这样做有什么优劣?

好处:
简单?高效?

不利:
这样做岂不是限制了对大内存的使用?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文