关于Linux内存类型的问题

关于Linux内存类型的问题,第1张

概述我有关于 Linux内存的以下问题: >我知道活动内存是最常访问的内存部分.但有人可以解释一下linux如何将内存位置用于活动内存或非活动内存. >活动内存所包含的所有组件是什么?磁盘/文件缓存是否被视为活动内存的一部分. >缓冲区和缓存内存有什么区别? 我试着回答你的问题: (1)基本上,你的想法是正确的.但Linux内核中的页面缓存实现很复杂. Linux内核使用LRU(最近最少使用)算法来管 我有关于 Linux内存的以下问题:

>我知道活动内存是最常访问的内存部分.但有人可以解释一下linux如何将内存位置用于活动内存或非活动内存.
>活动内存所包含的所有组件是什么?磁盘/文件缓存是否被视为活动内存的一部分.
>缓冲区和缓存内存有什么区别?

解决方法 我试着回答你的问题:

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

(2)常规文件读/写,块deivce文件访问和内存映射文件都可以触发linux内核生成页面缓存,活动或非活动.用户空间进程和用户空间堆栈中使用的malloc也可以触发linux内核生成页面缓存.

(3)也许我误解了你的问题,我猜你的意思是缓冲区缓存和页面缓存之间的区别:旧版内核使用缓冲区缓存和页面缓存.页面缓存用于文件访问(例如常规文件访问,内存映射文件,块设备文件访问),缓冲区缓存用于物理磁盘块访问(通常物理磁盘块的大小小于一页,因此有几个物理磁盘块可以填入一页).虽然新版本内核仍在使用缓冲区缓存概念,但新内核基于页面缓存实现缓冲区缓存.

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

总结

以上是内存溢出为你收集整理的关于Linux内存类型的问题全部内容,希望文章能够帮你解决关于Linux内存类型的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存