如何在execv中获取Os / 161中用户内存地址空间的指针

时间:2009-10-26 11:50:24

标签: exec os161

我在Os/161写了execv(char *program, char **args)来电。

因此,我得到了程序中提供的数据用户副本以及内核空间中的args。 然后我创建了一个全新的地址空间,其中加载了带有args的程序。

问题是如何找到适当的指向用户空间虚拟内存的指针,以便在切换到用户空间之前将数据从内核空间复制到用户空间?

2 个答案:

答案 0 :(得分:2)

使用堆栈,但确保内存已对齐

答案 1 :(得分:2)

我也在研究OS161。我就是这样做的。

在销毁当前地址空间之前,将所有参数复制到内核缓冲区中。然后在创建并激活新的地址空间后,通过as_define_stack获取堆栈指针并将这些参数复制到堆栈中。您需要非常小心地打包它们,否则您的新堆栈将被破坏。另外,正如James所说,所有指针(每个参数字符串的开头)必须与4个字节以及stackptr对齐。在此之后,您需要相应地调整stackptr以为这些参数腾出空间。

以下是a doc offered by Harvard,您可以查看第9页的详细信息。

[编辑]

我写了a blog about os161's execv system call。希望我在那里明确提出问题。

[/编辑]