复习实模式和保护模式的知识

网上有大量关于实模式和保护模式的文章,而且都写得很好,这里总结下,以自己的理解方式阐述。

参考以下几个博客:

http://blog.csdn.net/kerr1992/article/details/20659901

http://blog.csdn.net/jn1158359135/article/details/7106383

http://blog.csdn.net/syf442/article/details/4383280

要是想面面俱到,难度太大,不明白的时候再去深入了解,这里只讲简单的几个知识点,实模式与保护模式的区别,寻址方式上有什么不同。

实模式,就是实地址模式,逻辑地址==线性地址==物理地址,在这种模式下,无法实现多任务,只有等一个程式关闭后,另一程式才能启动,因为物理内存是独占性的,在这种模式下寻址的方式是段基址*16+偏移地址,形成20位的物理地址,所以把这种寻址方式叫分段寻址方式。

保护模式,顾名思义,就是保护程序的模式,但保护的不是自己,而是除自己之外的其它程序的数据不被非法访问。实现这一功能的就是内存分页机制,除此之外,分页还可实现虚拟内存,从而使多任务成为可能。保护模式下的寻址方式与实模式相比有很大的不同,首先逻辑地址 不等于 线性地址 不等于 物理地址。

逻辑地址:为段选择子+偏移地址,段选择子仍然是16位的,如图所示:


其中GDT表示全局描述述表,LDT表示局部描述符表,表中存储了线性地址的基地址,最终线性地址为 基地址+逻辑地址的偏移地址。而这个线性地址在未启用分页机制的情况下即为物理地址,如果启用了,则需要使用页目录,页表,页表项,来进行物理地址的映射。

首先来了解页框,页框是一个大小为4KB的内存块,为何刚好为4KB呢,官方认为,为一个小程序分配过多的内存页显示浪费,而过小,又会导致数据被分散,读写都需要

更多的时间,也许是通过统计来得出的结论吧。既然为4KB,一个线性地址占用32位,总寻址能力是4GB,那么一共有2^20个页框,于是将线性地址划分如下:


高10位用来作为页目录的偏移地址,页目录的首地址存放于CR3寄存器中,中间10位用于作为页表的偏移地址,页表的首地址即存储在页目录中,剩下的12位,用来作为页框的偏移地址,页框的首地址位于页表中,于是得出了物理地址的计算方式:(页目录首地址+页目录偏移地址)-》页表首地址-》(页表首地址+页表偏移地址)-》页框首地址-》页框首地址+页框偏移地址-》物理地址。

为何说页的级数越多,就越节省内存,如果一个程序很小,小到只需1个页框就足以,这时如果采用一级管理,就需要2^20*4=4M的页目录,这样就显示太过浪费了,可是如果使用二级管理,不也是2^10*2^10*4=4M的页目录和页表吗,内存上没有什么节省呢,貌似还多了4KB的页目录,其实如果只有页目录和第一个页表会在程序初始化的时候创建好,以后如果有新增的页表,还会去申请内存,这样等要用的时候再去申请,当然就节省大量空间了。那是不是级数越多就越好呢,那最终计算物理地址的转化次数也多了起来,所以合适就好,额,64位机上的确是分了页目录,页前目录,页中目录,页表,这四级。

如果查找到的页框刚好不在内存中,会触发缺页异常,把异常的线性地址存在CR2中,然对应的页切换回内存中。

保护体现在了哪?在段选择子,描述符表,页目录,页表,还有CR0~CR3寄存器,这些都体现出访问的控制权限。而正因为分页把线性地址与真实的物理地址通过映射的关系区分开来,实现了多任务的目的,因为虽然几个程序感觉上都在使用同个内存区域,但实际上被映射到了不同的物理内存中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值