【问题标题】:Physcial contiguous vs virtually non contiguous in linuxLinux中的物理连续与几乎不连续
【发布时间】:2017-09-19 15:24:25
【问题描述】:

我需要物理上连续的大型视频帧缓冲区。所以我的问题是当内核驱动请求物理contig内存时,内核返回的虚拟地址是连续的还是非连续的?

更新: 抱歉,让我添加更多细节。对于分辨率为 640x480 且每个像素为 1 字节的视频缓冲区,预计总内存为 307200 字节 (640x480)。对于一个在 4KiB 页面上运行的系统,上述缓冲区所需的总页面数将是 75。

现在让我们假设以某种方式请求的这个 307200 内存块在物理上是连续的。但是当内核返回每个页面的虚拟地址时,这些页面是连续的还是不连续的?

【问题讨论】:

  • 如果指向内存区域的虚拟地址不连续......那么它实际上并不指向内存区域
  • "内核返回的虚拟地址是连续的还是非连续的?" -- 和什么连续?您过度考虑了可能性,和/或没有正确推理出这一点。如果(块的)虚拟地址不连续,那么您必须知道这些地址的所有才能访问它们。 IOW 当分配 内存时,只返回块开始的(虚拟)地址,因为该块确实占用了虚拟内存的连续区域。现在这块内存可能与任何其他虚拟内存都不连续。
  • 虚拟地址将是连续的,因为您将只获得相应 phy 内存的虚拟内存的起始地址。

标签: linux linux-kernel linux-device-driver v4l2


【解决方案1】:

连续——内核虚拟地址空间映射一般与物理内存1-1(即V = P + offset)

【讨论】:

    猜你喜欢
    • 2014-03-28
    • 2012-01-08
    • 2021-11-30
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多