在loader中创建页表,启动分页

上一节创建了全局描述符表,进入了保护模式,接下来继续拓展loader的功能——实现内存分页,实现虚拟地址

Q&A
1、什么是内存分段?为什么要实现内存分段?

分段就是cpu通过基地址+偏移来访问内存,想象有两个程序,编译链接后确定的起始地址是一样的,如果这就是运行时的物理地址,那么它们自然是无法在计算机中同时跑的,内存多大都不行,分段机制就是为了解决这个问题。
CPU采用段基址+偏移的方式访问内存,这样程序就可以通过改变段基址,实现程序的“平移”,这样两个在编译后起始地址相同的程序,通过段基址的不同,访问也不会发生冲突。

2、为什么要实现内存分页?分页和分段的关系?

内存分页是针对另一种情况,如下图:
在这里插入图片描述
此时计算机内存有空余共20+15=35MB,但却不能装载进程D,
因为内存空间被割裂了,35MB不是连续的,不能将进程D整块连续的装进内存。但是如果能实现进程的分块,就可以将进程D分成几块,装载进不连续的内存空间中,这就是进程的分页。
分页机制是在分段机制基础上实现的,x86体系结构访问内存段基址+偏移的形式是无法撼动的,只不过实现分页了以后段部件计算出的不再是物理地址,而是看成虚拟地址了。

3、分页机制的实现?什么是页表?“单位块”为什么是4KB?

分页机制的本质就是将进程拆分成单位大小的块,来进行加载。页表就是存储每个块映射关系的数据结构,存放在内存当中。那么单位大小究竟多大合适?

这取决于对内存块数量和内存块尺寸的权衡。内存块数量 * 内存块大小等于4GB(32位系统)。假设将内存块尺寸定为1字节,每一块的地址都需要用32位4字节来表示,那么一个进程的页表大小就是16GB,计算机不可能只有一个进程,因此需要将进程的块大小调大,最后决定是4MB,那么一个进程的页表的大小就是4MB(一级页表)。

4、为什么要有多级页表?

计算机不可能只有一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值