在gvisor的文档中,解释了“哨兵通过调用mmap系统调用将虚拟地址到主机文件的有效映射存储在主机VMA中”,以便容器化的应用程序进程拥有它需要翻译和访问的信息它请求的虚拟地址。
这里的哨兵指的是管理程序进程,它正在跟踪它产生的容器化子应用程序进程。
我的问题是,哨兵究竟是如何要求mmap()
申请流程的?如果它是从自己的进程调用,这不是修改自己的VMA表而不是应用程序进程的VMA表吗?
在gvisor的文档中,解释了“哨兵通过调用mmap系统调用将虚拟地址到主机文件的有效映射存储在主机VMA中”,以便容器化的应用程序进程拥有它需要翻译和访问的信息它请求的虚拟地址。
这里的哨兵指的是管理程序进程,它正在跟踪它产生的容器化子应用程序进程。
我的问题是,哨兵究竟是如何要求mmap()
申请流程的?如果它是从自己的进程调用,这不是修改自己的VMA表而不是应用程序进程的VMA表吗?
Barmar 在上面的评论中是正确的。ptrace
不提供在被跟踪者中进行系统调用的直接机制。gVisor 实现的核心可以在这里找到。我们选择一个跟踪线程,使用 RIP 在 SYSCALL + 陷阱指令的已知位置设置寄存器,并根据需要设置参数寄存器,然后允许执行通过系统调用继续并在陷阱处再次停止。