何时分配物理内存
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
怎么没人回答偶的问题呢?