操作系统:11、linux存储管理
Buddy内存管理算法
Buddy内存管理算法是经典的内存管理算法,也是运行在linux中的算法。
算法基于计算机处理二进制的优势具有极高的效率。主要是为了解决内存外碎片
的问题。
页内碎片:
已经被分配出去(能明确指出属于哪个进程)的内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片(页内碎片)。
页外碎片:
还没分配出去(不属于任何进程),但是由于大小而无法分配给申请内存空间的新进程的内存空闲块。
Buddy内存管理算法的目的是努力让内存分配与相邻内存合并能快速进行。
Buddy算法内存分配原则:
向上取整为2的幂的大小,比如进程需要79k内存,向上取证就是128K。进程需要666K,那么就会取1024K。
下图中空闲区1和空闲区2相邻,且内存大小一致,所以可以说“空闲区1和空闲区2互为伙伴”
Buddy算法会创建一系列空闲链表,每一种都是2的次幂,比如2KB、4KB、8KB、16KB一直到1MB
Buddy算法分配内存的过程:
如上图,buddy算法若要分配100kb内存,会先向上取整得到需要分配128K内存,然后找是否有符合大小内存,找到后,会判定找到的内存块是否可以继续拆分,直到拆分为刚好符合大小的128KB。
因为计算机处理2的次幂速度是很快的,所以buddy算法非常高效。
Buddy算法回收刚才分配的内存:
总结buddy算法:
buddy算法是经典的内存管理算法;
算法基于计算机处理二进制的优势具有极高的效率;
算法主要是为了解决内存外碎片的问题;
本质上该算法是将内存外碎片问题转为了内存内碎片问题,但是因为一般来说内存外碎片会比内存内碎片大很多,所以还是大大提高了内存利用效率。
linux交换空间
减缓空间(swap)是磁盘的一个分区;linux物理内存满时,会把一些内存交换到Swap空间;
Swap空间是初始化系统时配置的(装linux系统时会提示需不需要交换空间,需要多大的交换空间)。
使用top
命令可以查看到linux交换空间数据:
一般不推荐使用交换空间,因为交换空间是存储在磁盘,磁盘速度比内存满很多。
交换空间用途
冷启动内存依赖:
大型应用启动中需要使用大量内存,这些内存很多时候只是在启动时用一下,后续运行很少会用到这么多的内存,有了交换空间,系统就可以将这部分不怎么使用的内存数据保存在Swap空间中,从而释放更多的内存。提供给系统使用
系统睡眠依赖:
linux系统需要睡眠的时候,把系统里面的所有内存数据都保存在Swap空间中,等下次系统需要启动的时候,才把内存数据重新加载到内存中,这样就可以加快系统启动。
大进程空间依赖:
有些进程确实需要很多内存空间,但是物理内存不够使用,因此需要把进程需要的内存暂时保存到交换空间中去,使得大进程也可以运行的起来。
Swap空间和虚拟内存的对比: