前言
linux内核虚拟内存和物理内存都是按照页为单位进行管理的,为什么要这样?需要解决什么问题?
要点
结论先行:核心是为了避免内存碎片
先说按固定大小分配物理页
按固定大小分配前,先说不按固定大小打来什么问题?
多进程,对内存申请释放多轮之后,如果不按照固定大小,就会发现在内存中出现大小不一的各种碎片。某个进程释放内存之后,会空出一块内存,这块内存大小因为比较特殊,后面新分配无法完全使用。
于是相同的问题在不同时间,在不同task进行多轮之后,系统很可能出现各种无法被分配的碎片,甚至都可能无法分配内存出来
为了解决这种问题,如果按照固定大小分配,是解决这个问题的一种方式。固定大小的话,如果某个进程需要比较大就按照这个固定大小对齐分配给他,用完之后也是固定大小,新来的进程分配也能根据固定大小来分配之前进程释放的。由此固定大小分配就一定程度解决了内存碎片问题。
再说按照页分配
前面提到按照固定大小分配能够一定程度解决内存碎片,那么这个固定的大小就叫做一个页。具体一个页多大,比如4KB 16KB 64KB就是根据不同系统或者硬件的需求动态调整。linux常用是按照4KB来作为一页。
无论多大,并不影响前面提的页解决的核心问题。并且虚拟内存和物理内存都按照页以及固定大小的页,又统一了固定虚拟内存和物理内存的问题。
综述
- 系统按照固定大小内存分配解决内存碎片化
- 固定大小的内存块就叫做页 page
- 页的大小可以是4K 16K 64K等可配置
- 另外1K个页叫做一个page block页块(比如4K页大小的页块就是4MB)
- 最核心点就是:页是为了解决内存碎片
- 关于为什么要用多级页表,参考其他文章
后记
先说点子,以后逐渐迭代完善