(虚拟地址空间是相对磁盘空间到物理内存空间的映射而言来说的).

经内存映射的文件每次只读取一页内容,读取后的页保存在页缓存中,利用页缓存,可提高文件的访问速度。如图 10-6 所示,页缓存由 page_hash_table 组成,它是一个 mem_map_t 数据结构的指针向量。页缓存的结构是 Linux 内核中典型的哈希表结构。众所周知,对计算机内存的线性数组的访问是最快速的访问方法,因为线性数组中的每一个元素的位置都可以利用索引值直接计算得到,而这种计算是简单的线性计算。但是,如果要处理大量数据,有时由于受到存储空间的限制,采用线性结构是不切合实际的。但如果采用链表等非线性结构,则元素的检索性能又会大打折扣。哈希表则是一种折衷的方法,它综合了线性结构和非线性结构的优点,可以在大量数据中进行快速的查找。哈希表的结构有多种,在 Linux 内核中,常见的哈希结构和图 10-6 的结构类似。要在这种哈希表中访问某个数据,首先要利用哈希函数以目标元素的某个特征值作为函数自变量生成哈希值作为索引,然后利用该索引访问哈希表的线性指针向量。哈希线性表中的指针代表一个链表,该链表所包含的所有节点均具有相同的哈希值,在该链表中查找可访问到指定的数据。哈希函数的选择非常重要,不恰当的哈希函数可能导致大量数据映射到同一哈希值,这种情况下,元素的查找将相当耗时。但是,如果选择恰当的哈希函数,则可以在性能和空间上得到均衡效果。

在 Linux 页缓存中,访问 page_hash_table 的索引由文件的 VFS(虚拟文件系统)索引节点 inode 和内存页在文件中的偏移量生成。有关 VFS 索引节点的内容将在第十三章中讲述,在这里,应知道每个文件的 VFS 索引节点 inode 是唯一的。

图 10-6 Linux 页缓存示意图

当系统要从内存映射文件中读取某页时,首先在页缓存中查找,如果发现该页保存在缓存中,则可以免除实际的文件读取,而只需从页缓存中读取,这时,指向 mm_map_t 数据结构的指针被返回到页故障的处理代码;如果该页不在缓存中,则必须从实际的文件系统映象中读取页,Linux 内核首先分配物理页然后从磁盘读取页内容。

如果可能,Linux 还会预先读取文件中下一页内容,这样,如果进程要连续访问页,则下一页的内容不必再次从文件中读取了,而只需从页缓存中读取。

随着映象的读取和执行,页缓存中的内容可能会增多,这时,Linux 可移走不再需要的页。当系统中可用的物理内存量变小时,Linux 也会通过缩小页缓存的大小而释放更多的物理内存页。

linux系统页面缓存,Linux 页缓存相关推荐

  1. linux系统清理内存,Linux实验室:五个清理磁盘空间小妙招

    1删除安装包:清空系统APT缓存 玩儿电脑最怕的就是卡慢,那么电脑卡慢应该怎么解决呢?对于windows系统来说,你可能有各种免费的杀毒软件.全家桶帮你清空系统空间,那么Linux系统怎么办?今天笔者 ...

  2. 连接linux系统的mysql,Linux系统MySQL开启远程连接

    1.远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库.登陆数据库.mysql -uroot -p(密码). 2.创建用户用来远程连接 GRANT ALL PRIVILEGES ...

  3. imx6ull移植Linux系统第二篇——Linux内核的移植

    imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...

  4. Alpine linux 小内存版,Alpine Linux系统-Alpine Linux系统【轻量级Linux】下载v3.11.0 最新版-西西软件下载...

    Alpine Linux系统[轻量级Linux],Alpine Linux其实就是一个清凉版的Linux系统,通过牺牲一些不常用的功能和特性来达到更加轻巧的体积以及更快的响应速度.Alpine Lin ...

  5. linux系统的笔记本,Linux:开源的免费操作系统_笔记本电脑_笔记本评测-中关村在线...

    ■linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议 ...

  6. Linux系统之部署Linux管理面板1Panel

    Linux系统之部署Linux管理面板1Panel 一.1Panel介绍 1.1Panel简介 2.1Panel特点 二.本地环境规划 1.本此实践目的 2.本地环境规划 三.检查本地环境 1.检查操 ...

  7. linux系统页面缓存,Linux缓存机制之页缓存

    内核采用一种通用的地址空间方案,来建立缓存数据与其来源之间的关联. 1)  内存中的页分配到每个地址空间.这些页的内容可以由用户进程或内核本身使用各式各样的方法操作.这些数据表示了缓存中的内容: 2) ...

  8. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)

    文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...

  9. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

最新文章

  1. mysql执行ref_ref:mysql命令大全
  2. 真香!微软将为Edge浏览器带来超好用的全新侧边搜索功能:无需跳转网页
  3. CodeForces - 1355C Count Triangles(数学)
  4. python 全局变量、局部变量
  5. 分割函数python_python strip() 函数和 split() 函数的详解及实例
  6. pyHook pyHook3 区别_一般过去时态和现在完成时态之间到底有什么区别?通过一道语法题,帮你彻底讲清楚!...
  7. 【Android】修改Android 模拟器IMEI
  8. Python __str __()和__repr __()函数
  9. ssh 连接访问被拒绝
  10. 关于table表格头部固定和列固定的方式
  11. 软件测试用例设计八大方法
  12. Cesium:3dtile制作工具
  13. 怎样批量给pdf文件添加水印?
  14. lol 8.21服务器维护,《LOL》8.16版本维护到几点 8月21日更新维护内容汇总
  15. 【UVM基础】虚序列器与虚序列(virtual sequencer与virtual sequence)快速上手指南
  16. 服务器微软whql认证,什么是WHQL认证?
  17. 二十一世纪大学英语读写教程(第二册)学习笔记(原文)——8 - Unwritten Rules(不成文的规矩)
  18. 数据链路层的有那三个基本问题?为什么都必须加以解决?
  19. 讯飞:糖尿病遗传风险预测Coggle挑战赛公开
  20. 用matlab计算线是热率,运用MATLAB计算散热器的散热量

热门文章

  1. 【Web安全从入门到放弃】11_目录遍历和敏感信息泄露漏洞
  2. 秒学swif入门手册
  3. 关于makefile的rules.mk 解读
  4. 用图表说话 麦肯锡 pdf下载_想像麦肯锡公司咨询顾问一样演讲?10分钟学透这23张PPT就够了...
  5. 开发者 App Store 收款的科学姿势(文末有福利)
  6. 德扑入门 进阶读物推荐 - 德州扑克小绿皮书
  7. marc常用工具网址
  8. 机器学习习题(18)
  9. 简单ops manager安装部署使用
  10. 异硫氰酸荧光素(FITC)标记重组灵芝免疫调节蛋白rLz-8,FITC-rLz-8