【1000个Linux内存知识-016】为什么内存要按页分配?

文章讲述了Linux内核中使用页为单位管理内存的原因,以避免内存碎片。通过固定大小的页分配策略,解决了多进程下内存碎片化的问题。页的大小根据系统需求可配置,如4KB、16KB或64KB。核心目标是通过页和页表结构优化内存管理,确保高效利用资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

linux内核虚拟内存和物理内存都是按照页为单位进行管理的,为什么要这样?需要解决什么问题?

要点

结论先行:核心是为了避免内存碎片

先说按固定大小分配物理页

按固定大小分配前,先说不按固定大小打来什么问题?

多进程,对内存申请释放多轮之后,如果不按照固定大小,就会发现在内存中出现大小不一的各种碎片。某个进程释放内存之后,会空出一块内存,这块内存大小因为比较特殊,后面新分配无法完全使用。
于是相同的问题在不同时间,在不同task进行多轮之后,系统很可能出现各种无法被分配的碎片,甚至都可能无法分配内存出来

为了解决这种问题,如果按照固定大小分配,是解决这个问题的一种方式。固定大小的话,如果某个进程需要比较大就按照这个固定大小对齐分配给他,用完之后也是固定大小,新来的进程分配也能根据固定大小来分配之前进程释放的。由此固定大小分配就一定程度解决了内存碎片问题。

再说按照页分配

前面提到按照固定大小分配能够一定程度解决内存碎片,那么这个固定的大小就叫做一个页。具体一个页多大,比如4KB 16KB 64KB就是根据不同系统或者硬件的需求动态调整。linux常用是按照4KB来作为一页。
无论多大,并不影响前面提的页解决的核心问题。并且虚拟内存和物理内存都按照页以及固定大小的页,又统一了固定虚拟内存和物理内存的问题。

综述

  • 系统按照固定大小内存分配解决内存碎片化
  • 固定大小的内存块就叫做页 page
  • 页的大小可以是4K 16K 64K等可配置
  • 另外1K个页叫做一个page block页块(比如4K页大小的页块就是4MB)
  • 最核心点就是:页是为了解决内存碎片
  • 关于为什么要用多级页表,参考其他文章

后记

先说点子,以后逐渐迭代完善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值