1 速度不对等 Cpu的速度比cpu之间的互联性能及cpu试图要访问的内存性能,都要快上几个数量级 现代处理器基本都是多核,并且每个cpu都有自己独立的cache,不同cpu共享主内存,然后不同cpu通过总线互联,cpu -> cache -> memory 访问速度成大数量级递减,cpu最快,cache慢一点,memory更慢。 2 MESI协议 cpu从内存中加载数据到自己的cache,当不同的cpu都加载了同样的内存数据的时候,并且对数据进行操作的时候,需要维护数据在不同的cache 中的一致性视图就需要MESI协议,cache里面的缓存行有四种状态分别是Modified,Exclusive,Shared,Invalid。协议在每一个缓存行中维护 一个两位的状态“tag”, 这个“tag”附着在缓存行的物理地址或者数据后 ,标识着缓存行的状态
ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响。
从内核中的伙伴系统,页高速缓存系统,slab内存管理系统,常规内存高速缓存系统,到用户线性区管理,用户动态内存分配malloc/free,最终因时制宜选择自定义内存区管理策略,到底有哪些驱动力? 接下来我们来梳理一下 1.伙伴系统 伙伴系统是内核为解决外碎化问题引入的内存管理机制。在32位体系结构中,虚拟内存空间的第四个GB用来线性的映射物理内存开始的DMA和低端内存管理区。而内存管理的基本单位是页,一个页的大小为4kB。所谓的外碎化指的是多次申请多个页的内存并释放后,会导致内存中存在不间隔的无法集中利用的页,其基本单位仍然是页,只是没有办法找到连续的可用来分配的多个页框。为了应对这样的事情,伙伴系统应运而生。伙伴系统首先将内存分为11个不同的2指数个大小的内存对象集合,每个集合用双向链表表示。分配内存时从小到大选择第一个能够满足大小的内存对象(2的order指数个),在这个过程中,如果没有办法找到适配的块,则对于大块的内存需要分割,分割时候将剩下的2k-2order大小的内存区分别放入到k~order大小的内存对象集合中,如果发现伙伴(相邻的)中有空闲的内存块,则进行合并。释放内存块的时候同理。