关于Linux内存管理原理的知识点

小微 科技关于Linux内存管理原理的知识点已关闭评论138字数 1452阅读模式
摘要本文以32位机器为准,串讲一些内存管理的知识点。1. 虚拟地址、物理地址、逻辑地址、线性地址虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在...

本文以32位机器为准,串讲一些内存管理的知识点。

1. 虚拟地址、物理地址、逻辑地址、线性地址文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

虚拟地址又叫线性地址。linux没有采取分段机制,所以逻辑地址以及虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自无须提。内核的虚拟地址以及物理地址,大部份只差一个线性偏移量。用户空间的虚拟地址以及物理地址则采取了多级页表进行映照,但仍称之为线性地址。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

2. DMA/HIGH_MEM/NROMAL 分区文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

在x86结构中,Linux内核虚拟地址空间划分0~3G为用户空间,3~4G为内核空间。内核虚拟空间(3G~4G)又划分为三种类型的区:文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

ZONE_DMA 3G以后起始的16MB文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

ZONE_NORMAL 16MB~896MB文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

ZONE_HIGHMEM 896MB ~1G文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

因为内核的虚拟以及物理地址只差一个偏移量:物理地址 = 逻辑地址 – 0xC0000000。所以如果1G内核空间完整用来线性映照,显然物理内存也只能走访到1G区间,这显然是不合理的。HIGHMEM就是为了解决这个问题,专门开拓的一块无须线性映照,可以灵便定制映照,以便走访1G以上物理内存的区域。从网上扣来一图,文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

高端内存的划分,又如下图,文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

内核直接映照空间 PAGE_OFFSET~VMALLOC_START,kmalloc以及__get_free_page分配的是这里的页面。两者是借助slab分配器,直接分配物理页再转换为逻辑地址(物理地址连续)。合适分配小段内存。此区域包括了内核镜像、物理页框表mem_map等资源。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2934.html

内核动态映照空间 VMALLOC_START~VMALLOC_END,被vmalloc用到,可表示的空间大。

内核永远映照空间 PKMAP_BASE ~ FIXADDR_START,kmap

内核临时映照空间 FIXADDR_START~FIXADDR_TOP,kmap_atomic

3.火伴算法以及slab分配器

火伴Buddy算法解决了外部碎片问题.内核在每一个zone区管理着可用的页面,按2的幂级(order)大小排成链表队列,寄存在free_area数组。

具体buddy管理基于位图,其分配回收页面的算法描写如下,

buddy算法举例描写:

假定咱们的系统内存只有16个页面RAM。由于RAM只有16个页面,咱们只需用四个级别(orders)的火伴位图(由于最大连续内存大小为16个页面),如下图所示。

order(0)bimap有8个bit位(页面至多16个页面,所以16/2)

order(1)bimap有4个bit位(order(0)bimap有8个bit位,所以8/2);

也就是order(1)第一块由两个页框page1 与page2组成与order(1)第2块由两个页框page3 与page4组成,这两个块之间有一个bit位

order(2)bimap有2个bit位(order(1)bimap有4个bit位,所以4/2)

order(3)bimap有1个bit位(order(2)bimap有4个bit位,所以2/2)

在order(0),第一个bit表示开始的2个页面,第二个bit表示接下来的2个页面,以此类推。由于页面4已分配,而页面5空闲,故第三个bit为1。

一样在order(1)中,bit3是1的缘由是一个火伴完整空闲(页面8以及9),以及它对应的火伴(页面10以及11)却并不是如斯,故

以上就是微观生活(93wg.com)关于“关于Linux内存管理原理的知识点”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/2934.html