zoukankan      html  css  js  c++  java
  • Cache Miss

    什么是 Cache Miss

    程序运行的本质是 CPU 读取修改数据,而原始的数据都在磁盘上,你也可以直接在磁盘上执行程序,但是因为硬件原因,速度很慢。
    所以有物理内存这一中介,物理内存的读写速度比磁盘快很多,系统会把当前程序需要的数据载入物理内存中,让 CPU 能更快读取。
    但是依然不够快,于是有 L1/L2/L3 Cache 这类多级缓存,他们的读写速度更快,但是容量也更小。Cache Miss 就是指的从这里的缓存拿不到需要的数据,导致需要向下一级缓存拿数据,这一来一回必然就有了时间消耗,最差的情况就是需要从磁盘拿数据,所以用固态硬盘的机子会比机械硬盘运行程序来的快。
    image

    为什么会 Cache Miss

    因为硬件成本的原因,缓存的容量越大,读写的速度也越慢。CPU Cache 的速度是最快的,容量也最小,因此也没法容纳程序需要的所有数据,一次只会缓存程序的部分数据,那就难免会有某些数据没有缓存到,这就造成了 Cache Miss。

    怎样尽量避免 Cache Miss,提高 Cache Hit

    1. 设计内存连续的数据结构。 因为 Cache 是一串一串(Cache Line)的读取的,就是读取某个数据时,会把周围的数据也读取进来,凑成固定的大小(Cache Line)。如果数据存储是连续的,则很有可能刚好把下次要读取的数据也一起读取进来了。比如数组的遍历。ECS 的内存友好也是因为数据结构是多个连续的数组组成,而不是面向对象那种一个 class 包裹各种数据。

    延展

    什么是缺页中断,内存换页

    缺页中断就是 CPU 访问内存中还未加载的数据,内存需要从磁盘加载数据。
    访问内存-页面不存在-触发缺页中断-进入中断处理程序-os 检查页面分配情况-从磁盘读取交换文件/交换分区-修改页表并刷新页面缓存-恢复线程运行。
    操作系统虚拟内存换页的过程是什么?

    什么是虚拟内存

    虚拟内存是内存管理的一项技术,使得每个应用程序拥有一样大小的连续完整的内存空间地址(逻辑地址/虚拟地址),并且映射到具体的物理地址。相当于一个中间层,使得应用程序不关心内存怎么分配。虚拟(逻辑)内存地址可能指向物理内存,也可能指向磁盘空间。(对于32位进程,其逻辑内存空间位4G)
    虚拟内存

    什么是多级页表

    多级页表是用于虚拟地址映射到物理地址的数据结构。如果一个应用程序有4G的数据,那么虚拟内存也有4G,但通常不会全用上。假如只用一级页表,那么所有的地址映射都要在主存中,这就很浪费。于是采用了多级页表,就跟文档的目录拆分一样,一级页表是大纲,覆盖了所有的内存段。二级页表就是以及页表定义的内存段的继续细分。也因此二级页表不需要一开始就在主存中,只需要当对应的一级页表被使用到是,再动态从磁盘中载入对应的二级页表。(即二级页表可以不存在主存中,甚至不存在)
    操作系统中的多级页表到底是为了解决什么问题?

    什么是内存碎片

    空闲却使用不了的内存。
    外部内存碎片:产生多个不连续的小物理内存,导致新的程序无法装载。
    内部内存碎片:程序所有内存都装载到了物理内存,但有部分不使用。
    20 张图揭开「内存管理」的迷雾,瞬间豁然开朗

  • 相关阅读:
    魔兽世界服务器Trinitycore分析二:auth server的main函数
    白话经典算法系列之七 堆与堆排序
    Opencv学习笔记(六)SURF学习笔记
    sprintf,你知道多少?
    色相环上面的颜色和相邻颜色的关系是什么
    视达配色教程10 绿色的意向是什么
    网页设计实战3 ufo类型的科技网页如何实现
    如何使用echo.js实现图片的懒加载(整理)
    网页设计实战1 如何实现纸叠登录效果
    人为什么要好好努力学习工作
  • 原文地址:https://www.cnblogs.com/nickcan/p/15108189.html
Copyright © 2011-2022 走看看