虚拟内存的好处及多级分页机制的原因

众所周知,在现代计算机系统中都使用了虚拟地址。在一个程序的运行那个过程中,由CPU产生虚拟地址,该虚拟地址经过MMU转换成物理地址,然后使用该物理地址去访问内存。那么虚拟地址存在的原因是什么呢?为何不能由CPU直接产生物理地址呢?

第一,使用虚拟地址可以更加高效的使用物理内存。在计算机系统中物理内存是有限的,对于一般的计算机来说,物理内存一般为4G或者8G. 对于现代多任务的通用系统来说这显然是不够的。试想假如我们需要看一个4G大小以上的视频,这时物理内存就不够了。在存在虚拟地址的情况下,可以为每个程序分配足够大小的虚拟地址空间,但是这些地址空间在一开是并没有真正的对应物理地址,而是在真正使用的时候才去对应。这样在访问后边的地址空间的时候就可以将前边当前没有在访问的物理页释放掉,或者交换到硬盘中。这样这个物理页又可以去对应新的虚拟地址。从而使物理内存可以充分的利用。

第二,使用虚拟地址可以使内存的管理更加便捷。在程序编译的时候就会生成虚拟地址,对于不同的机器或者对于同一台机器的不同时间,该虚拟地址可以对应不同的物理页。试想,如果没有虚拟地址,那么编译时产生的物理地址在某些机器上可能已经被占用而不能访问。从而导致程序需要重新编译。

第三,为了安全性的考虑。在使用虚拟地址的时候,暴露给程序员永远都是虚拟地址,而具体的物理地址在哪里,这个只有系统才了解。这样就提高了系统的封装性。


使用了虚拟地址,那么下一个问题来了,如何将虚拟地址转换成物理地址。在现代计算系统中提供了一个MMU单元,可以将虚拟地址转换成物理地址。具体的转换方式是使用了分页机制。及通过虚拟地址索引页表,通过页表获取真实的物理地址。


但是这样有导致了另外一个问题,在32的系统中,系统分配给每个进程的虚拟地址为4G,对于每个虚拟地址页建立一个记录,这样也需要4G/4k个,假设每条记录大小为4B,这样对于每个进程需要4M的页表,对于一个helloworld程序而言,不足4K的程序需要4M的页表,未免有些浪费。

为了解决这个问题,设计了多级页表机制。


使用多级页表机制,对于第一级的页表如图所示只需4K的空间,用于索引二级页表的地址。还是以helloworld代码为例,可能只需要一个物理页,因此只需要一条记录,故对于第二级的页表也只需要一个页表,对于一级页表中的其他记录可以对应为空。这样只需要8k的空间就可以完成页面的映射。大大节省了页表所占的空间。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值