什么情况何时从内核空间读取数据到用户空间?

时间:2014-04-25 12:09:03

标签: operating-system gpu gpgpu computer-architecture

我知道内核空间专门用于运行内核,而用户空间专用于用户应用程序。

但在阅读了与OS相关的一篇论文中的以下段落之后我很困惑,

假设我们有手势识别系统,并且该设计将系统分解为四个组件,实现为单独的程序:

  • catusb :从连接在USB总线上的摄像头捕获图像数据。
  • xform :使用图像处理算法(如噪音过滤和几何变换)转换相机中的图像 透视到屏幕坐标系中的点云 或用户。本质上是数据并行的。
  • 检测:检测点云中的手势,并具有重要的数据并行性。
  • hidinput :接受检测程序找到的手势,并将其作为人机界面发送到操作系统 设备(HID)输入。
  

接下来他们提到了以下执行流程:

enter image description here

“从摄像机读取数据需要将图像缓冲区从内核空间复制到用户空间。 写入连接 catusb xform 的管道会导致将相同的缓冲区写回内核空间。要在GPU上运行 xform 系统必须将内核空间中的缓冲区读入用户空间,其中用户模式运行时,例如 CUDA 必须随后将缓冲区写回内核空间并将其传输到GPU并返回。“

  

所以我想知道的是

  • 如果相机缓冲区是一个内存空间驻留在RAM中,那么在阅读时 来自相机的数据为什么要从内核空间读取它我不明白,是因为缓冲区本身位于内核空间换句话说,是硬件设备的内存映射到RAM驻留在内核空间)?,

  • 即使相机缓冲区驻留在相机的芯片上也是如此 读取是通过内核复制缓冲区从相机芯片到 用户空间直接,我是对的?如果是这样,为什么它在提到 将缓冲区从内核复制到用户空间的段落。

1 个答案:

答案 0 :(得分:3)

操作系统的工作是允许很多组件(包括硬件和软件)相互配合。通常,用户程序不能直接操作外围设备,也不能相互干扰。我不熟悉您引用的具体设置,但这听起来并不常见。

USB摄像头通知操作系统它有一个新帧。当内核(驱动程序)注意到它时,会将带有I / O命令的帧复制到RAM中。由于此RAM是由驱动程序分配的,因此用户程序将无法通过虚拟内存查看或读取它。为了快速概括,内核中的地址& 0x1000和程序中的地址& 0x1000实际上是RAM中的物理上不同的位置。然后内核将帧复制到任何期望从摄像机输入的进程的内存中,然后通知它(在这种情况下 catusb )。

同样,由于 xform 检测 hdinput 作为单独的进程存在,因此它们必须使用进程间通信。由于操作系统必须确保程序的隔离,因此每个进程都将利用内核来实现这一目标。

这里没什么不寻常的。我想他们只是把它拼写出来,因为手势识别是时间关键的,这样做有一些开销。