gpt4 book ai didi

linux - Linux在进行IO时如何管理内存

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:37 24 4
gpt4 key购买 nike

在我看来,当我们通过调用open然后read系统调用来读取文件时,磁盘中的文件内容会首先在内核空间中读取,然后复制到用户空间或进程中,所以,如果文件是1G这样的大文件,读取将占用物理内存中的2G内存,1G映射到内核空间,1G映射到进程。我知道这可能是错的,但我错在哪里? Linux在读取文件等情况下如何管理内存?如果我使用 mmap 而不是 read,那么 Linux 的处理方式有何不同?

最佳答案

If the file is big file like 1G, read will occupy 2G memory in physical memory, 1G maps to kernel space, and 1G maps to the process.

不,这个假设是错误的。

根据文件系统,内核可以读取文件,例如 4K 部分(一页)。

当用户通过read系统调用请求1G字节时,内核可能仅将文件的4K部分复制到用户缓冲区,并返回已读取的字节数。之后,用户可以使用调整后的大小和缓冲区地址重复read系统调用。

If I use mmap instead of read, then how the Linux deal with it differently?

如果使用 mmap,则从文件中读取每个 4K block 可能会延迟,直到用户实际访问该 block 为止。

这遵循对用户内存的一般解释:用户使用虚拟内存进行操作,该内存应映射物理内存仅在访问时

关于linux - Linux在进行IO时如何管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448743/

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