首页 技术 正文
技术 2022年11月16日
0 收藏 388 点赞 4,812 浏览 1654 个字

内核如果给自己分配动态内存

动态内存:RAM的某些部分被永久打分配给内核,用来存放内核代码以及静态内核数据结构;剩余的部分被称为动态内存连续物理内存区管理:页框管理:
1、页大小的选择,通常情况下主存和磁盘之间传输小数据块更高效,所以Linux选择4kb点页框
2、页描述符:page结构,32字节;存放在mem_map数组中;占整个RAM的大概1%空间,即每页框(4kB)一个描述符(32B),1/128.
3、非一致内存访问(NUMA):CPU对不同内存单元的访问时间不相同;因为CPU和内存的相对位置不一样,可能导致访问时间不一样。
4、一致内存访问(UMA)内存区管理:
理想情况,内核对页框对访问没有任何限制,可以任意访问每一个页框。实际上受到硬件限制:
1、ISA总线的直接内存存取(DMA)处理器只能对RAM的前16MB寻址
2、大容量的32位计算机中,CPU不能直接访问所有的物理内存,因为线性地址空间太小。
应对方式,分管理区:
1、ZONE_DMA(16MB)、ZONE_NORMAL(16MB-896MB)、ZONE_HIGHMEM(896MB-)
2、保留页框池:1、满足内存请求时,如果有足够的空闲内存可以使用,请求被立即满足;否则,必须回收一些内存,并且将发出请求的内核控制路径阻塞;
        2、但是有些内核控制路径不能被阻塞,此时这条内核控制路径应当产生原子内存分配请求,原子请求不被阻塞,如果没有空闲页,分配失败。
        3、为避免失败,内核为原子内存分配请求保留了一个页框池,只有在内存不足时使用。
4、根据ZONE_DMA, ZONE_NORMAL大小比例分配保留池
3、伙伴系统算法:1、将空闲页框分11个块链表,每个块链表分别包含大小为1、2、4、8、16、32、64、128、256、512、1024个连续的页框
2、假如申请256个页框,就去256的链表查找,如果没有去512查找,如果有就将512分两半,一半满足请求,一半放到256的链表中。
         3、对不同对管理区使用不同的伙伴系统slab内存分配方法:
1、频繁使用的数据结构也会频繁的分配和释放,应当缓存它们
2、频繁分配和释放内存必然会导致内存碎片。为了避免这种情况,空闲链表的缓存会连续的存放。因为已经释放的数据结构又回放回空闲链表,因此不会导致碎片。
3、回收的对象可以立即投入下一次分配,因此对于频繁的分配和释放,空闲链表能提高其性能。
4、如果分配器能知道对象、页、高速缓存等的大小这样的概念,它会做出更加明智的决策。
5、如果让部分缓存专属于单个处理器,那么,分配和释放就可以在不加SMP锁的情况下进行。
6、如果分配器是与NUMA相关的,它就可以从相同到内存节点为请求者进行分配。
7、对存放的对象进行着色,以防止多个对象映射到相同的高速缓存行。slab层的设计:
1、slab 由一个或者多个物理上连续的页组成,通常为一页。
2、高速缓存(即空闲链表)被分成多个slab
3、slab 存在三种状态:满、半满、空
4、slab负责内存紧缺情况下所有底层点对齐、着色、分配、释放、回收。 栈上道静态分配:
1、内核栈小而且固定,用户栈大而且动态
2、栈大小为4~16KB
3、因为内核没有在管理内核栈上面做足工作,当内核栈溢出时,就可能修改了附近的数据例如thread_info。中断栈:
1、历史上,中断处理程序和被中断的进程使用同一个栈
2、现在中断栈为每个进程提供一个用户处理中断程序的栈非连续物理内存区管理:
1、将内存映射到连续的页框时最好的选择,这样会充分利用高速缓存并获得较低的平均访问时间。
2、如果对内存区的访问不是很频繁,通过连续的线性地址访问非连续多页框就很有意义,优点是避免了外碎片,缺点时打乱内核页表。
3、非连续内存区的大小必须是4k的倍数高端内存的映射:
1、高于896MB的所有物理内存的范围大都是高端内存
2、高端内存不会永久的活着自动地映射到内核地址空间,尽管x86能寻址4GB,开启PAE之后能达到64GB
3、
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731