博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核学习(3)建立页式内存映射
阅读量:4068 次
发布时间:2019-05-25

本文共 2125 字,大约阅读时间需要 7 分钟。

/*  * Build early 4G boot pagetable  */	/* Initialize Page tables to 0 */	leal	pgtable(%ebx), %edi	xorl	%eax, %eax	movl	$((4096*6)/4), %ecx	rep	stosl	/* Build Level 4 */	leal	pgtable + 0(%ebx), %edi //edi是地址	leal	0x1007 (%edi), %eax //eax是内容, 内容是PDPTE的地址	movl	%eax, 0(%edi)	/* Build Level 3 */	leal	pgtable + 0x1000(%ebx), %edi 	leal	0x1007(%edi), %eax	movl	$4, %ecx	// 需要4个表项1:	movl	%eax, 0x00(%edi)	addl	$0x00001000, %eax 	addl	$8, %edi	decl	%ecx	jnz	1b	/* Build Level 2 */	leal	pgtable + 0x2000(%ebx), %edi	movl	$0x00000183, %eax	movl	$2048, %ecx	// 2048/(2^9) == 4 一共4个页面, 1个PDE页面占用512==(2^9)1:	movl	%eax, 0(%edi)	addl	$0x00200000, %eax	addl	$8, %edi // 每个表项8个字节	decl	%ecx	jnz	1b	/* Enable the boot page tables */	leal	pgtable(%ebx), %eax	movl	%eax, %cr3		/* * Space for page tables (not in .bss so not zeroed) */	.section ".pgtable","a",@nobits	.balign 4096pgtable:	/* 6个页面的原因是4G内存, 	 *	占用1个PML4E表项(1个页面)	 *	占用4个PDPTE表项(1个页面)	 *	占用4个PDE页面	 * 	1+1+4==6	 */	.fill 6*4096, 1, 0

如下图所示

CR3--------------					|	PML4E			|	-------------<---	|			|------------	|			|			|	|			|			|	PML4E占用1个页面, 第一个表项8个字节, 指向第一个PDPTE页面	|			|			|	|... ...	|			|	-------------<----------			|			|------------	PDPTE占用1个页面, 第一个表项8个字节, 指向第一个PDE页面	-------------			|	|			|-----------|----PDPTE第二个表项8个字节, 指向第一个PDE页面	-------------			|	|	|			|-----------|---|----	-------------			|	|	|	|			|-----------|---|---|---	-------------			|	|	|	|	|... ...	|			|	|	|	|	-------------<-----------	|	|	|	|			|				|	|	|	|			|				|	|	|	|			|				|	|	|	|			|				|	|	|	|... ...	|				|	|	|	-------------<---------------	|	|	|			|					|	|	|			|					|	|	|			|					|	|	|			|					|	|	|... ...	|					|	|	-------------<-------------------	|	|			|						|	|			|						|	|			|						|	|			|						|	|... ...	|						|	-------------<----------------------	|			|	|			|	|			|	|			|	|... ...	|	-------------

内核页表成长记

https://blog.csdn.net/RichardYSteven/article/details/60584339

混沌初开--内核启动笔记

https://blog.csdn.net/richardysteven/article/details/52629731

linux临时页表初始化

https://blog.csdn.net/baidu_24256693/article/details/69056090

第一次启动分页管理

https://blog.csdn.net/yunsongice/article/details/6110676

你可能感兴趣的文章
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>