在linux的用户空间,有没有原子操作的函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux的用户空间,有没有原子操作的函数相关的知识,希望对你有一定的参考价值。
有。函数如下:
定义在include/asm/atomic.h中。 用户程序include它,在自己控制CONFIG_SMP定义。
在单处理器时 atomic_inc() 就是incl xxxx
在CONFIG_SMP时, atomic_inc()是 lock incl xxxx
因此incl XXXX在SMP时不是原子的。必须用lock.
atomic_inc()
这两个函数难道不能用么?
文档里面又没写着用户空间的程序不能使用,你可以写个简单的程序测试一下.
如果真的没有的话,只能用临界区了.本回答被提问者和网友采纳 参考技术B open 函数加 O_APPEND 这个标志 那么并发文件操作就是一个原子 , 否则会覆盖。
int open(const char *pathname, int flags);
有没有办法从linux内核模块调用用户空间函数?
想象一下这样的情况:我将从系统调用中获取位于用户空间中的函数指针,并且内核模块调用此函数。 (这个函数在用户空间中运行很重要)kenel模块是否会看到与用户空间应用程序相同的内存地址(获取的函数指针)? (我的意思是用户的虚拟地址空间或线路地址空间)
首先,你试图做错事。如果您需要内核中的自定义代码,则将其作为内核模块提供。
链接副本(Executing a user-space function from the kernel space)中的答案主要是垃圾。只要没有使用系统调用并且没有使用tls /其他任何东西,这将在某些体系结构上“起作用”。事实上,这就是充足的漏洞利用程序。
我将从系统调用中获取位于用户空间中的函数指针,并且内核模块将回调此函数。
听起来你真的想要做一些倒退的事情。如果您需要一个用户空间组件,那就应该拥有所有逻辑。然后你调用内核告诉它该做什么。
(这个函数在用户空间中运行很重要吗?)
你在问谁?我只能声明调用由用户空间种植的函数并不意味着它开始“在用户空间中运行”。切换到用户空间是很多工作,绝对不是通过调用函数来完成的。
内核模块是否会看到与用户空间应用程序相同的内存地址(获取的函数指针)?
取决于架构,通常会。但即使这样,使用这个“功能”的硬件保护也必须明确禁用。
但同样,你不想这样做。我强烈建议你陈述实际问题。
以上是关于在linux的用户空间,有没有原子操作的函数的主要内容,如果未能解决你的问题,请参考以下文章