linux内核原理--页高速缓存,回写,页框回收

2024-02-25 11:12

本文主要是介绍linux内核原理--页高速缓存,回写,页框回收,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.页高速缓存
我们主要分析下磁盘文件的页高速缓存

struct address_space {struct inode		*host;	struct radix_tree_root	page_tree;	spinlock_t		tree_lock;unsigned int		i_mmap_writable;struct prio_tree_root	i_mmap;	struct list_head	i_mmap_nonlinear;spinlock_t		i_mmap_lock;	unsigned int		truncate_count;	unsigned long		nrpages;pgoff_t			writeback_index;struct address_space_operations *a_ops;unsigned long		flags;	struct backing_dev_info *backing_dev_info;spinlock_t		private_lock;struct list_head	private_list;	struct address_space	*assoc_mapping;
} __attribute__((aligned(sizeof(long))));

页高速缓存通过上述结构实现.
每个磁盘文件拥有一个address_spacepage_tree是一个页框容器.容器内每个页框均存储了来自关联文件指定偏移下的一页数据.
i_mmap是一个vma容器.容器内每个vma均是针对此文件某个区域的一个vma
i_mmap_nonlinear是一个vma容器.容器内每个vma采用非线性映射的方式和此文件建立映射.
a_ops用于提供一组操作集合.以便实现内存,后备存储器两者间的数据交互.

page_tree是一颗多叉树,叶子节点是代表一个页框的page指针.linux下每个节点一般的分叉数是64
根据文件尺寸,我们可以计算文件页框数.根据文件页框数可以为其构建这样一颗多叉树,来快速定位指定文件指定页框的page对象.
在这里插入图片描述

假设基树的分叉是,那么对于一个文件尺寸在页框[5, 16]之间的文件对象而言,它的基树高度是2.利用基树可快速查找文件指定偏移的页框是否已经存在于基树中.

文件对象页高速缓存中的每个页框均位于文件对象的基树内.对于文件中页高速缓存中没缓存的页框,基树中叶子节点相应槽内容为null.针对节点所有槽均为null的节点,一般节点会直接移除.相应的上层节点对于槽位置将为null
在这里插入图片描述
上述是文件尺寸在页框[5, 16]之间的文件对象只有页框0,1,2,3位于页高速缓存时其基树的情况示意图.

有了页高速缓存,对文件的读,写,均先通过页高速缓存,这有助于减少和磁盘的直接交互次数.提升IO效率.
页高速缓存下,还搭配预读机制,以便进一步提升缓存命中率,提升IO效率.

2.回写
通过文件映射和页高速缓存我们可以读取文件数据,在内存中对其进行修改.
为了保证数据一致性,当文件页在内存被修改后,需要写会磁盘来同步.

linux提供了两种回写机制.
(1). 通过后台线程定时回写
后台线程定期运行,检测存在脏页时,对脏页执行回写处理.
(2). 通过系统调用显式请求数据同步
如通过fsyncfsyncdata来显式请求将文件在内存的脏页刷新到磁盘.

3.页框回收
为了应对物理内存有限下,系统需要分配新的物理内存而可能无法找到可用的空闲物理内存满足分配的场景.
系统需要页框回收机制.

(1). 通过将很少使用的部分物理内存页换出到块设备交换区,我们可以获得更多的空闲内存页.
值的注意的是内核自身使用的物理内存页不会被换出.
(2). 通过将标记为脏的文件映射页执行同步处理,我们可以直接释放这个页框.以便获得更多的空闲内存页.
(3). 通过直接释放非脏的文件映射页,我们可以获得更多的空闲内存页.

linux可以同时支持多个磁盘交换区,每个交换区可以基于硬盘分区实现,也可基于磁盘文件实现.
在交换区和物理页框之间,类似页高速缓存,存在交换高速缓存结构.

当某个属于匿名映射的物理页框由于页框回收需要写入交换区时,先将其加入相应交换区对象的交换高速缓存结构,在写入完毕后,再从交换高速缓存结构移除.

当某个共享的匿名映射页框由于页框回收需要写入交换区时,先将其加入相应交换区对象的交换高速缓存结构,利用反向映射修改每个使用该页框的页表项,使其指向交换区某位置.在写入完毕,且所有相关进程的页表项均修改完毕后,再从交换高速缓存结构移除.此后,某个进程再次访问此交换页,则需分配页框,页框加入交换高速缓存,执行从交换区读取数据填充页框的操作,在填充完成后,修改进程页表使其指向内存页.只有,所有相关进程均再次访问此交换页,且进程页表均被修改指向内存页后,才可将此页从交换高速缓存结构移除.

交换高速缓存存在的意义是:
每当进程访问某个线性地址,通过页表项获知对应页框位于交换区某位置时,可先尝试访问交换区对象的交换高速缓存,如访问到,则无需执行缓慢的磁盘io,直接修改进程页表指向交换缓存中页即可.只有交换缓存结构搜索不到,才需执行分配页框,页框添加到交换缓存,执行磁盘io来填充页框这样的流程.

指的注意的是:
交换区存在的意义在于配合页框回收,逻辑上扩大物理内存.
当换出页位于交换高速缓存期间,页框并未被释放,只有页框换出完成且页框从交换高速缓存结构移除后,页框才能被释放完成回收.

这篇关于linux内核原理--页高速缓存,回写,页框回收的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745295

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

离心萃取机废旧磷酸铁锂电池回收工艺流程

在废旧磷酸铁锂电池的回收工艺流程中,离心萃取机主要应用于萃取除杂的步骤,以提高回收过程中有价金属(如锂)的纯度。以下是结合离心萃取机应用的废旧磷酸铁锂电池回收工艺流程: 电池拆解与预处理 拆解:将废旧磷酸铁锂电池进行拆解,分离出电池壳、正负极片、隔膜等部分。破碎与筛分:将正负极片进行破碎处理,并通过筛分将不同粒径的物料分开,以便后续处理。 浸出与溶解 浸出:采用适当的浸出工艺(如二段式逆

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念