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

经内存映射的文件每次只读取一页内容,读取后的页保存在页缓存中,利用页缓存,可提高文件的访问速度。如图 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. 刷手机被AI公开点名,比利时议员在议会上不能再「分心」了
  2. centos6.2系统使用扩展源epel报错问题解决方法
  3. 在Java、C#和C++中遍历集合
  4. Scala入门到精通——第八节 包和引入
  5. eclipse中的一个编译错误修正
  6. JavaScript文档对象模型document对象改变Html元素样式属性(5)
  7. python打包,上传包知识点学习
  8. java工程师简历例子_Java开发工程师简历优秀简历(50份)
  9. 国药准字、药品本位码
  10. MATLAB中的数组
  11. Word中公式输入的快捷键
  12. 视频接入AI平台技术方案
  13. IT博客大赛——我的写博历程和拉票方法
  14. 解决.bat文件一闪而过的方法
  15. 禁止网页右键查看源代码
  16. 宽容那些与我们不同的人
  17. E-R图中联系向关系模式的转化
  18. iOS 判断系统版本
  19. 手机如何测光照度_照度测定方法
  20. java calendar 比较大小_关于Java日期加减,并且比较大小的方法

热门文章

  1. Wacom对Blender的设置
  2. UG\NX二次开发 获取曲线长度 UF_CURVE_ask_arc_length
  3. 深入理解Android 之界面构造
  4. 三步搞定专利-专利写作技巧以及流程
  5. 用友r9怎样启动应用服务器,保会通软件接收用友R9数据转换说明
  6. Camera AA工艺
  7. Thrift in python
  8. 四电压比较器LM339的几个典型应用例子
  9. 取消苹果arcade订阅操作步骤
  10. 分布式和集群的区别和联系