1

情况如下:

一个进程有两个页面 vp1 和 vp2。这两个页面映射到交换中的 2 个物理页面或 2 个页面。我们将这些物理(或交换)页面称为 pp1 和 pp2。映射是:

vp1->pp1

vp2->pp2

现在,如果我想将映射更改为:

vp1->pp2

vp2->pp1

这意味着,进程从 vp2 中读取将获得原始在 vp1 中的内容。有没有一种方法可以在不更改 Linux 内核的情况下做到这一点?

4

2 回答 2

2

是的,但你必须先做一些工作。实现此目的的一种方法是创建两个共享内存对象。然后可以在进程地址空间中映射和取消映射共享内存对象。有关详细信息,请参阅系统调用shmatshmdtshmgetshmctl

映射和取消映射可能会花费大量时间,因此与使用某些指针方案来选择进程用于访问数据的地址相比,它可能无法节省时间。

于 2012-10-29T16:04:34.763 回答
0

不。如果您想保持系统正常工作,一般情况下不会。但是,如果您控制映射的创建方式,您可以使用文件的 mmap 或 shm_open 中的对象创建它们,当您需要交换它们时,只需使用 mmap(... MAP_FIXED ...) 覆盖它们。

于 2012-10-29T15:54:04.430 回答