gpt4 book ai didi

linux - 关于 Linux 内存类型的问题

转载 作者:IT王子 更新时间:2023-10-29 00:36:08 25 4
gpt4 key购买 nike

我有以下关于 Linux 内存的问题:

  1. 我知道事件内存是访问最频繁的内存部分。但是有人可以解释一下 linux 如何考虑将内存位置用于事件内存或非事件内存。

  2. 事件内存由哪些组件组成?磁盘/文件缓存是否被视为事件内存的一部分。

  3. BuffersCached 内存有什么区别?

最佳答案

我试着回答你的问题:

(1)基本上来说,你的想法是正确的。但是页面缓存在Linux Kernel中的实现比较复杂。 Linux 内核使用 LRU(最近最少使用)算法来管理页面缓存列表。在一个Linux系统中可能有不同的内存区域,每个区域维护几个LRU列表,例如LRU_INACTIVE_ANON,LRU_ACTIVE_ANON(这两个列表用于匿名页缓存),LRU_INACTIVE_FILE,LRU_ACTIVE_FILE(这两个列表用于文件页缓存),LRU_UNEVICTABLE。这些列表使用 LRU 算法维护(添加到尾部,从头部删除)。并且页面根据访问频率在事件列表和非事件列表之间转换。只有当页面被访问并且它驻留在非事件列表中时,页面才会被添加到事件列表尾部。如果事件列表变得太大,事件列表头部的页面将被移动到非事件列表尾部。页面回收发生在非事件列表上,从非事件列表的头部开始。

(2) 常规文件读/写、 block 设备文件访问和内存映射文件都可以触发 Linux 内核生成页面缓存,无论是事件的还是非事件的。此外,用户空间进程和用户空间堆栈中使用的 malloc 可以触发 Linux 内核生成页面缓存。

(3) 可能我误解了你的问题,我猜你的意思是buffer cache和page cache的区别:老版本内核同时使用buffer cache和page cache。页面缓存用于文件访问(例如常规文件访问、内存映射文件、 block 设备文件访问),缓冲区缓存用于物理磁盘 block 访问(通常物理磁盘 block 的大小小于一页,所以几个物理磁盘 block 可以填满一页)。虽然新版内核仍然沿用buffer cache的概念,但新内核是基于page cache实现buffer cache。

或者你的意思是内存缓冲区和cpu缓存之间的区别,如果是这样,内存缓冲区是为了加速磁盘/外设访问,而cpu缓存是为了加速内存访问。

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

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