Chrome Native Client 进程模型

Chrome Native Client process model

这可能是一个相当基本的问题,但是 none 关于 Chrome Native Client 和 Chromium 的技术文档我到目前为止已经审查过,似乎以直接的方式解决了这个问题:

当Chrome在html页面中遇到带有application/x-pnal类型的<embed>元素时,是否会在同一进程中加载​​Native Client模块space 作为托管当前页面的选项卡?然后,在创建 NaCl 模块和 运行 之后,例如,在 HandleMessage(const pp:Var&) 方法内部,代码 运行 位于与执行页内 [=21] 的线程不同的线程中=]?

Native Client 始终在与 Chrome 不同的进程中运行,这是沙箱设计的一部分,整个地址 space 必须在 NaCl 的控制之下。每个架构都有不同的沙箱实现,例如 on ARM NaCl reserved the bottom 1GiB of the address space to untrusted code (with a guard page towards 0 and the syscall trampolines right after) and the top 3GiB for the trusted code base. x86-32 instead uses segmentation to enforce the address space restrictions, and x86-64 可能正在处理中(有足够的地址 space 因为它只给不受信任的代码 4GiB)但仍然使用自己的进程,因为信号处理之类的东西和系统调用过滤在现有 NaCl 设计中更加安全。

您可能对 how syscalls work 更感兴趣。