【发布时间】:2012-03-05 04:42:24
【问题描述】:
我正在执行操作系统分配,即添加一个新的系统调用。称为“dumbfork”的系统调用需要在不使用写时复制策略的情况下分叉一个进程。所以基本上它必须将整个地址空间复制到子进程。
我能够设置和重新编译系统内核。我可以调用我的自定义系统调用,但我不知道如何实际实现哑叉来禁用 COW 功能。其中一个源代码向我展示了sys_vfork 如何调用do_fork。 Dumbfork 应该类似于 sys_vfork。我不知道如何设置do_fork的参数。我试图模仿 sys_fork 是如何实现的,它给了我一个 NULL 指针取消引用错误。任何人都可以在这个问题上启发我。
asmlinkage long sys_dumbfork(struct pt_regs *regs)
{
return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
}
【问题讨论】:
-
sys_vfork与您想要的完全相反! -
是的,没错。 vfork 将标志 CLONE_VM、CLONE_VFORK 和 SIGCHLD 传递给 do_fork 并共享地址空间。无论如何,来自 vfork 的孩子会执行 exec 或 exit,所以这是有道理的。
标签: kernel system-calls copy-on-write