Operating system 什么情况下从内核空间向用户空间读取数据?

Operating system 什么情况下从内核空间向用户空间读取数据?,operating-system,gpu,gpgpu,computer-architecture,Operating System,Gpu,Gpgpu,Computer Architecture,我知道内核空间专用于运行内核,而用户空间专用于用户应用程序 但是在阅读了一篇关于操作系统的文章后,我感到困惑 假设我们有手势识别系统,并且设计将系统分解为四个组件,作为单独的程序实施: catusb:从连接在USB总线上的摄像头捕获图像数据 xform:使用图像处理算法(如噪声过滤和几何变换)变换相机中的图像 屏幕坐标系中点云的透视图 或用户。固有的数据并行 检测:检测点云中的手势,并具有显著的数据并行性 HIDIPUT:接受检测程序找到的手势,并将其作为人机界面发送到操作系统 设备(HID)

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

但是在阅读了一篇关于操作系统的文章后,我感到困惑

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

  • catusb:从连接在USB总线上的摄像头捕获图像数据
  • xform:使用图像处理算法(如噪声过滤和几何变换)变换相机中的图像 屏幕坐标系中点云的透视图 或用户。固有的数据并行
  • 检测:检测点云中的手势,并具有显著的数据并行性
  • HIDIPUT:接受检测程序找到的手势,并将其作为人机界面发送到操作系统 设备(HID)输入
接下来,他们提到了以下执行流程:

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

所以我想知道的是

  • 如果相机缓冲区是内存空间,则在读取时 摄像头数据为什么要从内核空间读取它我不明白,是因为缓冲区本身驻留在内核空间中吗(换句话说,硬件设备的内存映射到RAM是否驻留在内核空间中)

  • 即使相机缓冲区位于相机芯片上 读取是通过内核将缓冲区从相机芯片复制到 直接访问用户空间,对吗?如果是,为什么在 将缓冲区从内核复制到用户空间的段落


操作系统的任务是允许许多组件(包括硬件和软件)彼此友好配合。一般来说,userland程序不能直接操作外围设备,也不能相互干扰。我不熟悉您引用的具体设置,但听起来并不奇怪

USB摄像头通知操作系统它有一个新的帧。当内核(驱动程序)注意到这一点时,它将使用I/O命令将帧复制到RAM中。由于此RAM是由驱动程序分配的,因此由于虚拟内存的原因,userland程序将无法查看或读取它。简而言之,内核中的地址&0x1000和程序中的地址&0x1000实际上是RAM中物理上不同的位置。然后,内核会将该帧复制到任何进程的内存中,该进程需要摄像头的输入,然后通知它(在本例中为catusb

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


这里没有什么不寻常的。我想他们只是在解释,因为手势识别是时间关键的,这样做会有一些开销。

我现在很清楚,但你还说了一件事,“内核中的地址&0x1000和程序中的地址&0x1000实际上是RAM中物理上不同的位置”地址&0x1000不是表示内核或用户区内的offest吗?换句话说,地址&0x1000被添加到基址寄存器以给出物理地址。在这种情况下&0x1000是指绝对地址。它可以是虚拟地址,也可以是物理地址。在您的userland程序中,内存管理单元将把地址的最高有效位转换为页面在内存中的物理位置。地址的最低有效位将用作该物理页内的偏移量。