• Linux 操作系统原理 — Cache 和 Buffer


    目录

    Cache 和 Buffer 的区别在哪里?

    Cache 和 Buffer 是两个不同的概念,简单的说,Cache 是加速 “读”,而 Buffer 是缓冲 “写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为 buffer/ cache。

    为什么需要缓存?

    在这里插入图片描述

    可以看到,CPU 最快,一个时钟周期是 0.3 纳秒,内存访问需要 120 纳秒,固态硬盘访问需要 50-150 微秒,传统硬盘访问需要 1-10 毫秒, 网络访问最慢,都是几十毫秒。

    如果一个时钟周期如果按 1 秒算:

    • 内存访问就是 6 分钟
    • 固态硬盘是 2-6 天
    • 传统硬盘是 1-12 个月
    • 网络访问就是几年了!

    如果你是 CPU,你会觉得这个世界真是慢死了!从硬盘访问数据得等待 “几天” 甚至 “几个月”!

    在这里插入图片描述
    所以存储器的层级关系出来了,存储器越往上速度越快,但是价格越来越贵, 越往下速度越慢,但是价格越来越便宜。

    Linux 缓存机制

    在 Linux 系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓存区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。

    • buffers 用来缓存 metadata 及 pages,可以理解为系统缓存,例如:vi 打开一个文件。

    • cached 用来给文件做缓存,可以理解为数据块缓存,例如:dd if=/dev/zero of=/tmp/test count=1bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。

    • Swap 是交换分区,即通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到 Swap 中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到 Swap。

    缓存机制优点: 减少系统调用次数,降低 CPU 上下文切换和磁盘访问频率。

    CPU上下文切换: CPU 给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

    查看到系统内存的使用情况:
    在这里插入图片描述
    可以看出,系统内存为 16G,Swap 内存 16G,mem free 虽然显示为 1118,因缓存的存在,不能认为系统目前内剩下这么多内存。而应该把 buffers、cached 的也算上,即 free+cached+buffers=1118+7110+430=8658,总内存再减去 8658=7314,与 buffers/cache 行中对应 free 列的 7312 和 8659 基本一致。

    相关阅读:

  • 相关阅读:
    leetcode[145]Binary Tree Postorder Traversal
    leetcode[146]LRU Cache
    leetcode[147]Insertion Sort List
    leetcode[148]Sort List
    Intro to WebGL with Three.js
    Demo: Camera and Video Control with HTML5
    js ar
    Jingwei Huang
    Tinghui Zhou
    MODS: Fast and Robust Method for Two-View Matching
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309291.html
Copyright © 2020-2023  润新知