【问题标题】:Wait for completion possible in user-space?在用户空间等待完成?
【发布时间】:2015-10-17 18:26:27
【问题描述】:

在 Linux 驱动程序中同步线程时,我非常喜欢几个函数,它们是: wait_for_completion() 及其对应的 complete_and_exit()

用 2 个线程实现这个 api 是否可行,共享一个内存映射,分别是内核中的写入器和用户空间中的读取器?

如果没有,向 C 语言用户空间线程提供 wait_for_completion() 需要付出什么努力?

问候, 赛灵 (法)

【问题讨论】:

  • 当然,为什么不呢?这个功能不正常吗?
  • +Martin:正常但仅限于Kernel,不是吗?

标签: c linux multithreading kernel synchronisation


【解决方案1】:

用户空间进程可以对通过mknod 创建的设备文件使用ioctl() 调用。您的设备驱动程序可以使用来自ioctl 系统调用的参数来为wait_for_completion() 调用提供参数。例如,用户进程可以使用ioctl() 传递一个结构,该结构包含某种代码来识别它想要什么,一个指向用户空间缓冲区的指针,以及一个包含缓冲区大小的大小字段。处理ioctl() 的内核线程可以阻塞wait_for_complete(),然后用数据填充用户空间缓冲区。

查看this web page 以获取ioctl() 处理的示例:

ioctl() 简介

输入/输出控制(ioctl,简称ioctl)是一种常见的操作,或者 系统调用,可在大多数驱动程序类别中使用。它是一个 一刀切的系统调用。如果没有其他系统 满足特定要求的调用,则 ioctl() 是 使用。

实际示例包括音频设备的音量控制、显示器 视频设备的配置、读取设备寄存器等 — 基本上,与设备输入/输出有关的任何事情,或 特定于设备的操作,但功能多样,足以满足任何类型的 操作(例如,通过查询驱动程序数据来调试驱动程序 结构)。

...

【讨论】:

  • 谢谢。将尝试将ioctl 与可以存储完成变量的共享内存混合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2021-03-15
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
相关资源
最近更新 更多