Linux性能优化从入门到实战:08 内存篇:内存基础

本文详细介绍了Linux内存管理的基础知识,包括内存映射机制,虚拟内存空间分布,内存分配与回收策略。重点讲解了内存映射如何通过页表将虚拟地址映射到物理地址,以及如何通过多级页表和大页优化内存管理。同时,探讨了内存分配的malloc()和mmap()两种方式及其优缺点,以及Linux如何通过伙伴系统和slab分配器管理内存碎片。最后,讨论了内存回收机制,包括LRU、交换分区和OOM保护机制,并提供了查看内存使用情况的命令。
摘要由CSDN通过智能技术生成

内存主要用来存储系统和应用程序的指令、数据、缓存等。

内存映射

物理内存也称为主存,动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。
  Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分。
  在这里插入图片描述
  进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。虽然每个进程的地址空间都包含了内核空间,但这些内核空间,其实关联的都是相同的物理内存,也就是共享动态链接库、共享内存等。当进程切换到内核态后,就可以很方便地访问内核空间内存。
  并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才分配物理内存,并且分配后的物理内存,是通过内存映射来管理的。内存映射,其实就是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系。
  在这里插入图片描述
  页表实际上存储在 CPU 的内存管理单元 MMU 中,这样,正常情况下,处理器就可以直接通过硬件,找出要访问的内存。而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。
  
  CPU 上下文切换中的 TLB(Translation Lookaside Buffer,转译后备缓冲器)是 MMU 中页表的高速缓存。由于进程的虚拟地址空间是独立的,而 TLB 的访问速度又比 MMU 快得多,所以,通过减少进程的上下文切换,减少 TLB 的刷新次数,就可以提高 TLB 缓存的使用率,进而提高 CPU 的内存访问性能。
  MMU 规定了一个内存映射的最小单位,也就是,通常是 4 KB 大小。这样,每一次内存映射,都需要关联 4 KB 或者 4KB 整数倍的内存空间。
  4 KB大小的页,会导致整个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值