高端内存还是有疑惑,请高手指点!
如果用户进程申请内存,内核给了高端内存,此时在主内核页表中更新页表项.
那么进程页表是如何更新的?
是从主内核页表直接拷贝到进程空间,还是先从主内核页表拷到进程的内核页表再拷贝到进程空间?
具体代码哪里体现?请高手指点.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果用户进程申请内存,内核给了高端内存,此时在主内核页表中更新页表项.
那么进程页表是如何更新的?
是从主内核页表直接拷贝到进程空间,还是先从主内核页表拷到进程的内核页表再拷贝到进程空间?
具体代码哪里体现?请高手指点.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
用户申请内存,系统仅提供虚拟内存,并不映射物理内存,当访问这些新分配的空间的时候,会产生页失败,整个过程由do_pagefault()完成的,你可以参考相关函数代码。另外我不明白你说的拷贝,拷贝什么?
进程页表直接修改就好了,根本不用拷贝来拷贝去吧
LINUX内核是管理 所有的物理内存
进程只关心自己的一亩三分地吧
而且是内核分配好页框 填到 进程的线性地址对应的页表项中
明白了, 应该如大家所说:进程如果申请的是高端内存,内核直接改写其页表,没有所谓拷贝问题.
内核如果申请到高端内存,由于同步问题,才有拷贝.
多谢大家了.
因为主内核页目录的vmalloc部分在初始化时为0,所以进程页面在第一次访问高端内存时会通过页面异常与主内核页目录进行同步所访问地址所对应的vmalloc页目录,而主内核页目录指向了通过vmalloc分配生成的页中间目录。并且vmalloc的页中间目录、页表分配一次后就不释放的,即使释放也只是释放页表项所指向的页面。
在用户空间不能申请高端内存吧,只有内核才能通过vmalloc申请高端内存吧,请高手来说说我的理解对不对