gpt4 book ai didi

linux - mmap 和内核内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:08 24 4
gpt4 key购买 nike

我从mmap() internals了解到mmap 读取的工作原理- 导致页面错误- 将文件数据从磁盘复制到内部内核缓冲区- 将内核缓冲区映射到用户空间

我的问题是:

  • 内核映射到缓冲区会怎样?如果它仍然存在,我们这里不会遇到用户应用程序访问内核内存的问题吗?
  • 我们不能用这种方式耗尽物理内存吗?我假设内核需要最小数量的物理内存来提供良好的性能水平,如果我们继续将它的缓冲区分配给映射的用户空间缓冲区,我们最终会耗尽缓冲区。
  • 在写入期间,相关内存是否临时映射到内核缓冲区?如果这是一个共享映射,另一个用户进程可以访问并再次获得对现在内核内存的访问权

谢谢,抱歉,如果这些问题很基本,但我没有找到明确的答案。

最佳答案

无论如何我都不是内核黑客,但这是我收集到的:

  • 当涉及到内核是否“放弃”它到物理内存的映射时,我并不完全确定,因为内核可以访问它喜欢的任何物理内存。但是,如果用户进程也可以访问该内存,那么内核为了自己的目的继续使用该物理内存(例如作为内部管道缓冲区)显然是不允许的,为了用户进程和为了用户进程的内核。内核将简单地将这些页面指定为文件系统缓存的一部分(如果有文件支持),而不会弄乱它们。
  • 是的,任何进程或进程数量都可以通过请求大量资源(如管道)来限制内核的物理内存量。但是,内核会跟踪有多少物理内存可用,并会在剩余物理内存量不足时开始将用户空间内存分页到磁盘。出于包括性能在内的原因,内核内存本身通常不应被分页到磁盘。虽然由文件支持的 mmap()ed 内存的好处在于将页面调出到磁盘是微不足道的;无需分配交换空间。
  • 如果您的意思是写入映射到用户态虚拟地址空间的可用内存(即 memcpy(),而不是 write()),则不是。 mmap() 的全部要点是将用户态虚拟地址空间映射到物理内存,以允许在不诉诸系统调用的情况下进行读写。与磁盘的同步将由内核直接执行,无需额外复制到内核缓冲区。

关于linux - mmap 和内核内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com