高端内存还是有疑惑,请高手指点!

发布于 2022-10-15 08:00:12 字数 128 浏览 41 评论 0

如果用户进程申请内存,内核给了高端内存,此时在主内核页表中更新页表项.
那么进程页表是如何更新的?
是从主内核页表直接拷贝到进程空间,还是先从主内核页表拷到进程的内核页表再拷贝到进程空间?
具体代码哪里体现?请高手指点.

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

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

发布评论

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

评论(5

╭⌒浅淡时光〆 2022-10-22 08:00:12

用户申请内存,系统仅提供虚拟内存,并不映射物理内存,当访问这些新分配的空间的时候,会产生页失败,整个过程由do_pagefault()完成的,你可以参考相关函数代码。另外我不明白你说的拷贝,拷贝什么?

淡莣 2022-10-22 08:00:12

进程页表直接修改就好了,根本不用拷贝来拷贝去吧

LINUX内核是管理 所有的物理内存

进程只关心自己的一亩三分地吧

而且是内核分配好页框 填到 进程的线性地址对应的页表项中

九八野马 2022-10-22 08:00:12

明白了, 应该如大家所说:进程如果申请的是高端内存,内核直接改写其页表,没有所谓拷贝问题.
内核如果申请到高端内存,由于同步问题,才有拷贝.
多谢大家了.

眼泪淡了忧伤 2022-10-22 08:00:12

因为主内核页目录的vmalloc部分在初始化时为0,所以进程页面在第一次访问高端内存时会通过页面异常与主内核页目录进行同步所访问地址所对应的vmalloc页目录,而主内核页目录指向了通过vmalloc分配生成的页中间目录。并且vmalloc的页中间目录、页表分配一次后就不释放的,即使释放也只是释放页表项所指向的页面。

想挽留 2022-10-22 08:00:12

在用户空间不能申请高端内存吧,只有内核才能通过vmalloc申请高端内存吧,请高手来说说我的理解对不对

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