首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内核读/写用户空间内存

内核读/写用户空间内存
EN

Stack Overflow用户
提问于 2012-01-17 17:15:13
回答 2查看 1.8K关注 0票数 1

首先,从用户空间malloc一个缓冲区,并用全'A‘填充缓冲区

然后,使用netlink套接字将缓冲区的指针传递给内核,

最后,我可以使用直接从用户空间传递的原始指针来读写缓冲区。

为什么?

为什么允许从内核直接访问用户空间内存?

Linux设备驱动程序,第三版,第415页,说内核不能直接操作没有映射到内核地址空间的内存。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-17 23:30:05

问题的关键在于,在内核中直接访问用户地址只有有时才能正常工作。

只要您尝试在分配用户地址的同一进程的上下文中访问该用户地址,并且该进程已经将其出错,并且您使用的是具有3:1内存映射(与有时使用的4:4映射相反)的内核,并且内核没有换出分配所在的页面,那么访问就会正常工作。

问题是,这些条件并不总是正确的,即使在程序的运行时,它们也可能发生变化。因此,内核驱动程序编写器不需要指望能够访问用户地址。

可能发生的最糟糕的事情是,你假设它可以工作,让它总是在实验室里工作,并让它经常在客户现场崩溃。这就是书中声明的原因。

票数 0
EN

Stack Overflow用户

发布于 2012-01-17 18:39:29

在这本书中,“内核不能直接操作未映射到内核地址空间的内存”是关于物理内存的。换句话说-内核一次只有800-900MB(在x86上)可以映射到物理内存。为了访问整个物理内存,内核需要不断地重新映射这个区域。

Netlink根本不处理物理内存-它是为用户空间<->用户空间或用户空间<->内核空间之间的双向通信而设计的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8892059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档