如果我有一个可查找的字符设备 - /dev/mem_8
,允许用户空间程序通过简单的 I/O 操作随机访问内存阵列,我可以将它映射到我的进程的虚拟寻址内存,以便使用 x86_64 指令轻松访问它:MOV
, REP MOVS
, 和 SSE: MOVNTDQ
, MOVNTDQA
... ?
操作系统:Linux x86_64 内核 >= 2.6
一旦您从 Linux(用户模式)应用程序内部成功调用mmap(2)系统调用,您的地址空间就会发生变化,并且每个(非特权)机器指令(来自您的进程mmap
)都可以访问它,因为进程工作在虚拟内存中。
您可以使用proc(5)文件系统来查询地址空间,例如使用cat /proc/$PID/maps
...。
如果你/dev/mem_8
能mmap
,应该没问题。如果可能的话,最好把它做成一个块设备。或者可能提供一个FUSE文件系统(在您的 char 设备上方提供类似块的抽象)......
另请阅读高级 Linux 编程...
也许raw(8)是相关的......(不确定)。