扫码阅读
手机扫码阅读

Linux 内存管理 pt.3

84 2024-07-20

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Linux 内存管理 pt.3
文章来源:
咸鱼运维杂谈
扫码关注公众号
Linux 内存管理摘要

Linux 内存管理摘要

在本文中,作者继续探讨了Linux内存管理,重点介绍了内存的分配和回收机制。Linux系统中的页通常为4KB,为了解决页表过大的问题,Linux采用了多级页表和大页技术。

内存分配

Linux中的内存分配主要通过malloc()函数实现,该函数会根据需要分配的内存大小调用brk()mmap()系统调用。对于4KB到128KB之间的小块内存,使用brk()分配,其优点是减少缺页异常,提高内存访问效率,但可能导致内存碎片。对于大于128KB的内存,使用mmap()分配,优点是释放时立即归还系统,但频繁分配会导致大量缺页异常。内存分配实际上在进程首次访问时才完成。

Linux伙伴系统

伙伴系统是一种内存分配算法,它允许快速定位并分配适当大小的内存块。MMU(内存管理单元)协同伙伴系统工作,负责虚拟内存和物理内存的映射。

小于4K内存的分配

对于小于4K的内存分配,Linux系统采用伙伴系统和slab分配器两种方法。伙伴系统将整个物理页分割成小块进行分配,而slab分配器为小内存块创建缓存,并在空间用尽时重新分配物理页。Slab分配器也有助于防止内存碎片。

内存回收

为了防止内存泄漏,应用程序需使用free()unmap()释放内存。系统通过LRU算法回收最少使用的页面,将不常用的内存换出到磁盘,或在内存紧张时通过OOM机制杀死占用大量内存的进程。OOM机制根据进程的oom_score评分决定杀死对象。

作者结束文章时鼓励读者支持其创作工作。

想要了解更多内容?

查看原文:Linux 内存管理 pt.3
文章来源:
咸鱼运维杂谈
扫码关注公众号