将数据从32位用户程序传递到64位linux

时间:2014-03-14 13:06:54

标签: linux linux-kernel 32bit-64bit x86-64

如果32位用户程序在64位Linux内核上运行, 并希望将指向用户空间中的数据的指针传递给内核代码。如果 在用户空间和内核空间中定义了相同的结构。 内核空间代码能够正确解码数据吗? 如果是,它是如何完成的?

1 个答案:

答案 0 :(得分:1)

是。您使用的32位地址(或您使用的任何地址,它在64位中相同)是虚拟地址。换句话说,您使用并传递给任何人(包括内核)的任何类型的地址都是"幻想"事情,它不以任何明显的方式对应于真实的地址。除了虚拟地址,你什么都不知道。

为了使这项工作,内核(通常在MMU的帮助下)定期将虚拟地址转换为物理地址。为此,每个进程都有一个表,其中包含对此进程有效的所有页面(由内核管理) 内核将虚拟地址映射并重新映射到几乎每个页面错误的现有或不存在的位置(基本上,所有时间)。

因此,无论何时发生这种情况,内核当然可以对任何传递它的指针进行任何翻译。