C++ 我是否可以将可查找字符设备“/dev/mem_8”映射到内存,并使用x86_64指令访问它?

C++ 我是否可以将可查找字符设备“/dev/mem_8”映射到内存,并使用x86_64指令访问它?,c++,c,linux,x86,mmap,C++,C,Linux,X86,Mmap,如果我有一个可查找的字符设备-/dev/memu 8,允许用户空间程序通过简单的I/O操作随机访问内存阵列,我可以将其映射到进程的虚拟寻址内存,以便通过使用x86_64指令来轻松访问它:MOV、REP MOVS和SSE:MOVNTDQ,MOVNTDQA OS:Linux x86_64 kernel>=2.6一旦您从Linux(用户模式)应用程序内部成功调用了系统调用,您的系统已经更改,并且每个(非特权)机器指令(来自执行mmap的进程)都可以访问它,因为 您可以使用文件系统来查询地址空间,例如使

如果我有一个可查找的字符设备-
/dev/memu 8
,允许用户空间程序通过简单的I/O操作随机访问内存阵列,我可以将其映射到进程的虚拟寻址内存,以便通过使用x86_64指令来轻松访问它:
MOV
REP MOVS
和SSE:
MOVNTDQ
MOVNTDQA


OS:Linux x86_64 kernel>=2.6

一旦您从Linux(用户模式)应用程序内部成功调用了系统调用,您的系统已经更改,并且每个(非特权)机器指令(来自执行
mmap
的进程)都可以访问它,因为

您可以使用文件系统来查询地址空间,例如使用
cat/proc/$PID/maps

如果您的
/dev/mem_8
mmap
可启用的,则应该可以。如果可能的话,也许最好让它成为一个更好的选择。或者提供一个文件系统(在char设备上提供类似块的抽象)

也请阅读


也许是相关的。。。(不确定)。

一旦您成功地从Linux(用户模式)应用程序内部调用了系统调用,您的系统调用已经更改,并且每个(非特权)机器指令(来自执行
mmap
的进程)都可以访问它,因为

您可以使用文件系统来查询地址空间,例如使用
cat/proc/$PID/maps

如果您的
/dev/mem_8
mmap
可启用的,则应该可以。如果可能的话,也许最好让它成为一个更好的选择。或者提供一个文件系统(在char设备上提供类似块的抽象)

也请阅读


也许是相关的。。。(不确定)。

谢谢!但是,在我的例子中,我可以使用
cat/proc/$PID/maps
,为什么将Linux原始字符设备
/dev/mem_8
绑定到块设备并使用块设备更好呢?我不确定您是否完全了解虚拟内存。而
cat/proc/$PID/maps
可能会帮助您理解这一点,并检查您的代码是否具有您想要的地址空间。谢谢!但是,在我的例子中,我可以使用
cat/proc/$PID/maps
,为什么将Linux原始字符设备
/dev/mem_8
绑定到块设备并使用块设备更好呢?我不确定您是否完全了解虚拟内存。而
cat/proc/$PID/maps
可以帮助您理解这一点,并检查您的代码是否具有您想要的地址空间。