这个源文件主要讲的是页分配的过程。
enum palloc_flags
{
PAL_ASSERT = 001, /* Panic on failure. */
PAL_ZERO = 002, /* Zero page contents. */
PAL_USER = 004 /* User page. */
};
页分配时可以有三种状态,
PAL_ASSERT:如果页不能被分配,则kernel panics
PAL_ZERO:分配页时清零。
PAL_USER:从user pool中分配页。
前面两种是从kernel pool中分配页。
我们把内存分成两种类型。一种是user pool,一种是kernel pool。
struct pool
{
struct lock lock; /* Mutual exclusion. */
struct bitmap *used_map; /* Bitmap of free pages. */
uint8_t *base; /* Base of pool. */
};
这里我们用bitmap来表明空闲的页。这个和数据库的位图索引等都是差不多的。
lock是为了在寻找bitmap的时候只能是原子的。
void
palloc_init (size_t user_page_limit)
{
/* Free memory starts at 1 MB and runs to the end of RAM. */
uint8_t *free_start = ptov (1024 * 1024); //起始从1MB开始<
palloc.c
最新推荐文章于 2022-09-24 15:58:59 发布