memory-mapping相关内容

如何从 Linux 中的用户空间访问物理地址?

在运行 Linux 的基于 ARM 的系统上,我有一个内存映射到物理地址的设备.从所有地址都是虚拟的用户空间程序中,我如何从该地址读取内容? 解决方案 您可以使用 mmap(2) 系统调用将设备文件映射到用户进程内存.通常,设备文件是物理内存到文件系统的映射.否则,您必须编写一个内核模块来创建这样的文件或提供一种将所需内存映射到用户进程的方法. 另一种方法是将/dev/mem 的一部 ..
发布时间:2022-01-17 13:23:47 服务器开发

Linux 内核中的 copy_from_user 如何在内部工作?

copy_from_user() 函数在内部究竟是如何工作的?考虑到内核确实有权访问用户内存空间,它是否使用任何缓冲区或是否进行了任何内存映射? 解决方案 copy_from_user() 的实现高度依赖于架构. 在 x86 和 x86-64 上,它只是从用户空间地址直接读取并写入内核空间地址,同时临时禁用 SMAP(管理模式访问保护)(如果已配置).其中棘手的部分是 copy_fr ..
发布时间:2022-01-04 22:11:03 服务器开发

为什么数据和堆栈段是可执行的?

我刚刚注意到我的简单程序的数据和堆栈段是可执行的.我在/proc/[pid]/maps中看到了,简单的代码就证实了. 例如: ;程序集.data 节代码:db 0xCC ;int3节.text全局_start_开始:jmp代码mov rax, 60 ;系统退出移动 rdi, 0系统调用 然后 nasm -f elf64 prog.asmld -o prog prog.o./程序 使 ..
发布时间:2021-12-18 08:58:19 服务器开发

通用寄存器通常是内存映射的吗?

我对内存映射和内存映射 I/O 很困惑.例如,ARM 体系结构 r0、r1 等中的通用寄存器通常是内存映射的吗?请帮忙. 解决方案 不,这些寄存器在实际 CPU(或多核 CPU 的 CPU 内核)内.您无法通过内存访问它们. 内存映射寄存器是您通过地址或指针(在具有指针的语言中)访问的东西.I/O 设备通常具有内存映射寄存器,您可以在其中写入或读取特定地址以设置或获取信息或数据.换句 ..
发布时间:2021-11-17 22:20:34 其他开发

Linux如何从用户空间访问物理地址?

在运行 Linux 的基于 ARM 的系统上,我有一个将内存映射到物理地址的设备.从所有地址都是虚拟的用户空间程序中,如何从该地址读取内容? 解决方案 您可以使用 mmap(2) 系统调用将设备文件映射到用户进程内存.通常,设备文件是物理内存到文件系统的映射.否则,您必须编写一个内核模块来创建这样的文件或提供一种将所需内存映射到用户进程的方法. 另一种方法是将/dev/mem 的部分 ..
发布时间:2021-11-17 21:36:57 服务器开发

在Windows 10驱动程序中将内核空间虚拟地址映射到用户空间虚拟地址

我正在Windows 10(64位)中编写内核模式驱动程序,其主要目的是从DMA读取数据,我想知道是否将内存块从内核空间复制到内存中分配的缓冲区中,而不是复制用户空间,我可以以某种方式向用户空间公开一个地址(当然不是物理地址),并保存在内存复制操作中. 也许是这样的: 分配一块连续的物理内存(并将物理地址映射到内核空间中的虚拟地址). 将内核空间中的虚拟地址映射到用户空间中的虚拟 ..
发布时间:2021-05-03 18:38:08 其他开发

将寄存器作为AVR微控制器中存储器的一部分有什么好处?

更大的内存具有更高的解码延迟;那么为什么寄存器文件是内存的一部分? 这是否仅表示将寄存器“​​映射"到寄存器?存储在微处理器内部的SRAM寄存器? 如果没有,使用寄存器的好处是什么,因为它们不会比访问RAM快得多?此外,它们的用途是什么?我的意思是这些只是内存的一部分,所以我看不出再拥有它们的意义了.拥有它们与引用内存一样昂贵. 图片摘自 Avr微控制器和嵌入式系统:Muhamm ..
发布时间:2021-04-12 20:51:30 其他开发

C ++ 11原子:将它们与内存映射的I/O一起使用是否有意义?

据我了解,C volatile 以及可选的内存防护内联asm已用于在内存映射的I/O之上实现设备驱动程序.在Linux内核中可以找到几个示例. 如果我们忘记了未捕获的异常(如果有的话)的风险,那么用C ++ 11原子替换它们是否有意义?或者,有可能吗? 解决方案 通常,您可以用原子代替内存隔离栅,但不能用 volatile 替换,除非它与专用于隔离栅的一起使用线程间通信. 关于 ..
发布时间:2021-04-12 19:22:46 C/C++开发

通用寄存器是否一般都映射为存储器?

我对“内存映射"和“内存映射的I/O"非常困惑.例如在ARM体系结构r0,r1等中的通用寄存器是否通常进行内存映射?请帮忙. 解决方案 否,这些寄存器位于实际的CPU(或多核CPU的CPU内核)内部.您无法通过内存访问它们. 内存映射寄存器是您可以通过地址或指针(使用具有指针的语言)进行访问的寄存器.I/O设备通常具有内存映射寄存器,您可以在其中写入或读取特定地址来设置或获取信息或数 ..
发布时间:2021-04-09 19:27:44 其他开发

将多个数据数组映射到任意固定内存地址

我正在64位Linux机器上开发一个程序,该程序需要将多个任意长度的数据数组映射到我无法控制的固定内存地址.我以为带有MAP_FIXED和MAP_ANONYMOUS的mmap()是可行的方法,例如: mmap((void *) 0x401000, 0x18e, PROT_NONE, MAP_ANONYMOUS | MAP_FIXED, -1, 0); 但是,每次我调用此函数时,它都会返回 ..
发布时间:2020-05-09 23:55:55 服务器开发

我如何为node.js设计和实现非阻塞内存映射模块

存在用于node.js的mmap模块: https://github.com/bnoordhuis/node-mmap/ 正如作者Ben Noordhuis指出的那样,访问映射内存可能会阻塞,这就是为什么他不再推荐并停止使用它的原因. 所以我想知道如何为node.js设计一个非阻塞内存映射模块?螺纹,纤维,? 显然,这附近引发了一个问题,即是否会在其他地方而不是在请求处理程序中发 ..
发布时间:2020-05-09 23:52:08 其他开发

为什么在mmap中PROT_READ等于PROT_EXEC

我尝试使用mmap函数分配一些具有只读访问权限的内存页.我打印了/proc/self/maps来检查内存保护是否正常工作.即使mmap的保护参数为PROT_READ 7fec0c585000-7fec0c785000 r-xp 00000000 00:00 0 这意味着当我要求内核分配一些只读内存页面时,它也会将它们也标记为可执行. 我做了一些其他的测试,我意识到当我要求一个只写 ..
发布时间:2020-05-01 10:04:43 服务器开发

Linux内核中的copy_from_user如何在内部工作?

copy_from_user()函数在内部如何工作?考虑到内核确实具有访问用户内存空间的特权,它是否使用任何缓冲区还是完成了任何内存映射? 解决方案 copy_from_user()的实现高度依赖于体系结构. 在x86和x86-64上,它只是直接从用户空间地址进行读取并写入内核空间地址,同时如果已配置,则暂时禁用SMAP(超级用户模式访问阻止).它的棘手部分是将copy_from_u ..
发布时间:2020-05-01 08:30:14 服务器开发

如何在Linux中从用户空间访问物理地址?

在运行Linux的基于ARM的系统上,我有一个将内存映射到物理地址的设备.从所有地址都是虚拟的用户空间程序中,如何从该地址读取内容? 解决方案 您可以使用mmap(2)系统调用将设备文件映射到用户进程内存.通常,设备文件是物理内存到文件系统的映射. 否则,您必须编写一个内核模块来创建此类文件或提供一种将所需内存映射到用户进程的方法. 另一种方法是将/dev/mem的部分重新映射到用户 ..
发布时间:2020-05-01 08:00:02 服务器开发