linux0.11初始化内存

348 阅读1分钟

之前也写了关于内存初始化的文章,但是可能是我理解不够透彻,或者写出的文章不容易理解,接下来的几篇中我将配上图片辅助理解,尽量只讲一个知识点。

linux0.11内核默认支持的最大内存容量是16MB,先把1M到16M的地址,也就是15M空间划分成页,一页大小是4KB,15MB的空间就会有15MB >> 4KB 也就是 15*1024*1024 >> 12 个页数量。然后把mem_map数组清零,数组值为0表示该页没有被使用,程序申请就可以获取。


#define LOW_MEM 0x100000  // 内存低端(1MB)
#define PAGING_MEMORY (15*1024*1024) // 分页内存15 MB,主内存区最多15M.
#define PAGING_PAGES (PAGING_MEMORY>>12) // 分页后的物理内存页面数(3840)
#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) // 指定地址映射为页号
#define USED 100 // 页面被占用标志


void mem_init(long start_mem, long end_mem)
{
	int i;
	HIGH_MEMORY = end_mem; // 设置内存最高端(16MB)
	for (i=0 ; i<PAGING_PAGES ; i++)
		mem_map[i] = USED;
        
	i = MAP_NR(start_mem); // 内存地址转页号
	end_mem -= start_mem;
	end_mem >>= 12;   // 主内存区中的总页面数
	while (end_mem-->0)
		mem_map[i++]=0;  // mem_map数组清零
}