咸鱼白的窝
一些奇奇怪怪的东西
Blanca-OS设计之内存管理(待更新)

内存分布

Blanca-OS假定使用者的内存大于1G,并将1G的内核空间永远映射于地址的3/4高位之上(3GB-4GB),而超出1G内存的部分则被分配为用户空间并映射于地址的低位(0-3GB)。内核空间参考linux的设计分为了3个zone:DMA ZONE(0-1MB),NORMAL ZONE(1-896MB),HIGHMEM ZONE(896MB+)。Blanca-OS目前的内存管理模块主要聚焦于对NORMAL ZONE的管理,其他zone的管理与使用需等待后期的开发。

页管理结构

Blanca-OS对页的管理主要使用了以下的结构:

typedef struct{
	list_node list;
	atomic_t count;
	uint32_t order;
	uint32_t flag;
}page_t;

页管理结构体page_t(见inc/pmm.h):

每一个页管理结构体存储了对应的一个或多个页的信息,包括:list(用于添加至空闲页表以标记每一个或一组空闲页),count(当前页引用计数),order(当前页管理结构体管理的页数为2的order次幂),flag(当前页状态)。

static page_t* p_pages = (page_t*)(uint32_t)KERNEL_END + KERNEL_BASE;

指向页管理结构体数组的指针p_pages(见mm/pmm.c):该页管理结构体数组中记录了NORMAL ZONE中所有页对应的页管理结构体。

static list_node free_list[MAX_ORDER + 1];

空闲页表free_list(见mm/buddy.c):空闲页表记录了每一个order的空闲页集合所对应的链表头,可根据表头查找出一组所需大小空闲页对应的list值并反向确定该组起始空闲页的位置。

页管理算法

选用了伙伴算法: (updating…)


Last modified on 2020-04-12