何时分配物理内存

发布于 2022-09-18 17:59:24 字数 666 浏览 9 评论 0

1:如果我们把一个文件映射到进程的地址空间,那以我们会在用户空间调用mmap函数,发出系统调用请求。下面是内核要做的事情:

           内核       :寻找一个VMA,并设置其中成员。插入进程VMA链表中,检查有无必要和相邻的VMA合并。然后调用驱动或者文件系统的mmap.
文件系统或驱动的MMAP:它的主任务是通过remap_pfn_range建立页表。
以上是我的看法,不知道对不对?请高手不吝赐教。

但是有一个问题,那么何时系统才会真正分配物理内存给进程呢,是在建立页表的同时吗?难道会是当我们访问VMA产生缺页时再通过nopage一页一页的分配吗?

2:remap_pfn_range(vma,vma->vm->start,vm->vm_pgoff,vm->vm_end-vm->vm_start,vm->vm_page_prot)
这个函数中的vm->vm_pgoff指的是什么?书上说物理地址页帧号,请问一下,此时页表还没建立,(因为本函数正是建立页表的)如何得知想要的物理地址页帧号?
其实vm->vm_pgoff是我们在用户空间调用mmap的offset参数右移PAGE_SHIFT。请问这到底是怎么回事?

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

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

发布评论

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

评论(1

剧终人散尽 2022-09-25 17:59:24

怎么没人回答偶的问题呢?

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