Linux 内核代码如何在程序集级别访问内存

Linux 内核代码如何在程序集级别访问内存,linux,linux-kernel,mmu,Linux,Linux Kernel,Mmu,许多文章指出,在32位Linux中,当内核代码访问内存时,MMU将3G以上的线性地址转换为物理地址,physical addr=logical addr-0xc000000 那么内核代码如何在程序集级别访问内存呢?例如,内核有一个名为foo的全局变量,它在C级别是foo=123。那么,在装配级别上是什么呢 是不是movl$123,foo(%0xc000000)?我是否认为地址是ds+0xc000000+foo,这转换为MMU的物理地址是foo?您必须指定架构。特定于x86。代码将在其虚拟地址访问

许多文章指出,在32位Linux中,当内核代码访问内存时,MMU将3G以上的线性地址转换为物理地址,
physical addr=logical addr-0xc000000

那么内核代码如何在程序集级别访问内存呢?例如,内核有一个名为
foo
的全局变量,它在C级别是
foo=123
。那么,在装配级别上是什么呢


是不是
movl$123,foo(%0xc000000)
?我是否认为地址是
ds+0xc000000+foo
,这转换为MMU的物理地址是
foo

您必须指定架构。特定于x86。代码将在其虚拟地址访问变量。MMU会将其转换为物理地址。为什么是“汇编”?C和汇编对于这类事情是非常相似的。程序集没有更多信息,但仍然可以使用虚拟地址。你想要实际地址吗?只需创建一个线性映射所有物理内存的段。许多文章是错误的或过时的。链接到你认为最好的,这样我们可以评论。