zoukankan      html  css  js  c++  java
  • 内存管理(一)

    UMA计算机(uniform memory access)将可用内存以连续方式组织起来。SMP系统中每个处理器访问各个内存区都是同样快。

    NUMA计算机(non-uniform memory access)总是多处理计算机。系统的各个CPU都有本地内存,可支持特别快速的访问。各个处理器之间通过总线连接起来,以支持对其它CPU的本地内存的访问。

    对于SMP系统,每个处理器对内存区的访问速度都相同,因此NUMA下只有一个Node(UMA), 该Node拥有自己的mem_map数组,同时将这唯一的Node分成几个zone,每个zone再用独立的伙伴系统管理物理页面。

    page cache:读写文件时文件内容的cache,大小为一个页,不一定才固态存储器上连续。

    buffer cache:读写固态存储器时,固态存储器内块内容的cache,buffer cache的内容对应固态存储器上的一个连续的区域,一个buffer cache大小可能从512到一个页。

    swap cache:是page cache的子集。用于多个进程共享的页面被换出到交换区的情况。

    buffer cache缓冲固态存储器块内容,page cache缓冲文件的一页内容。page cache写回固态存储器时会使用临时的buffer cache来写固态存储器。

    注意下kupdate、bdflush、kswapd线程。

    逻辑地址:x86中使用,段:偏移

    线性地址:x86下逻辑地址经过分段单元处理后得到的线性地址;

    物理地址:线性地址经过也表查找后得出物理地址,这个地址将被送到总线上指示所要访问的物理内存单元。

    总线地址:总线寄存器地址、外设总线和内存之间使用(Sparc 架构上有这要的概念)

    内核逻辑地址:常规的内核地址空间,映射了大部分主存,可以当作物理内存使用;内核逻辑地址与相应的物理地址相差一个常数偏移量(对等映射)

    内核虚拟地址:由函数vmalloc 和 kmap_high返回的地址,不能直接对应物理内存,需要内存分配核地址转换才能与物理地址联系起来(页表映射)

    LINUX:避免使用x86的段功能以提高可移植性,使用基址为0的段,使得逻辑地址=线性地址,一般 物理地址 = 总线地址,也可称线性地址为虚拟地址(但是如上所述,仍有差别,只是我看的部分书籍及手册中也没有特别作出区分)

    在buddy system算法上运行的存储器区(memory area)分配算法没有显著的效率:

    1)不同的数据类型用不同的方法分配内存可以提高效率。如需要初始化的数据结构,释放后可以暂存着,再分配时就不必初始化了

    2)内核的函数常常重复使用同一类型的内存区,缓存最近释放的对象可以加快分配和释放

    3)对内存的请求可以按照请求频率来分类,频繁使用的类型使用专门的缓存,很少使用的可以使用取整到2的幂次的通用缓存等算法

    4)使用2的幂次大小的内存区域时,高速缓存冲突的概率较大,可以通过仔细安排内存区域的起始地址来减少高速缓存冲突

    5)缓存一定数量的对象可以减少对buddy系统的调用,从而节省时间,并减少由此引起的高速缓存“污染”

    slab分配器将存储区看作对象(object),它把对象按照类型分组成不同的高速缓存;每个slab由一个或多个连续的页框组成,这些页框中包含已分配的对象,也包含空闲的对象; slab分配器通过伙伴系统分配页框。

  • 相关阅读:
    apache 问题 You don't have permission to access /test.php on this server 解决方法
    setTimeout和setInterval实现定时器的区别
    视图Ext.Viewport和窗口Ext.Window用法
    JavaScript设置Cookie
    布局Layout
    html中select标签刷新后不回到默认值而是保持之前选择值
    设置session失效的几种方法
    面板Ext.Panel使用
    树TreePanel
    让html元素随浏览器的大小自适应垂直居中
  • 原文地址:https://www.cnblogs.com/openix/p/3334026.html
Copyright © 2011-2022 走看看