【操作系统】CPU的保护模式与实模式的区别_实模式和保护模式

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

一.为什么有保护模式

  • 实模式下操作系统与用户/程序拥有同等的权利,也就是说操作系统可以做的,普通用户也可以自己做。
  • 实模式下所使用的地址都是真实的物理地址,实实在在地指哪打哪,毫无安全可言。
  • 实模式下用户可以自由修改段基址,访问全部的内存,没人拦得住。
  • 访问超过64KB的内存区域要切换段基址,运算频繁,效率低。
  • 一次只能运行一个程序,无法充分利用计算机资源。
  • 只有20条地址线,最大可寻址范围为1MB,远远不够用。

总结:实模式就像一个原始社会,无拘无束随心所欲但又资源匮乏技术落后,保护模式相当于有了法律保护的国家,各种资源合理调用,生活在这个国家的用户们都各自拥有属于自己的权利,在法律的约束下行使自己拥有的权利。

二.寄存器的变化

16位的CPU并无保护模式或者实模式可言,保护模式是由32位CPU诞生之后开始的,32位的CPU最大寻址范围可达4GB,且可向下兼容16位的实模式(也就是既可以运行32位的程序,也可以运行16位的程序的意思)。

2.1.保护模式下的寄存器

CPU发展到32位后,地址总线和数据总线也发展到了32位,而为了让寄存器能够访问4GB的空间(原先16位寄存器只能到1MB),需要将寄存器的宽度扩展到32位。寄存器要向下兼容,肯定不能把以前的东西全部推倒重做,只能在原有的基础上扩展,也就是在各16位寄存器的基础上向高位扩展多16位变成32位的寄存器,经过扩展后的寄存器统一在名字面前加e,如图下所示:

2.2.保护模式下的段描述符缓冲寄存器

内存寻址空间扩展到4G之后,原来的寻址方式已经不能满足需求了,按照原来的寻址方式,段基址左移4位与段内偏移地址相加就是实际的物理地址,而在4G的地址空间里,左移4位已经不能满足了,需要左移16位(也就是2的16次方),才能访问到32位的地址空间,这显然是不切实际的。

况且实模式下找到的地址是真实的地址,这相当不利于安全,所以保护模式下的寻址方式根据这些缺点进行做了优化,提高了安全性,优化后的偏移地址还是和实模式一样的,但是段基址则是变成了对内存段的描述信息,由于信息太多,用一个寄存器肯定放不下,所以一个专门用于存放内存段描述信息的数据结构诞生了:全局描述符表

全局描述符表中至少有一个表项,其中每一个表项都称为段描述符,大小为64****个字节,用以描述各个内存段的起始地址、大小、权限等信息。全局描述符表存放在内存中,并于GDTR寄存器指向它。如此,段寄存器中所保存的内容就称之为“选择子(selector)”。选择子类似数组的下标,全局描述符表就相当于数组,用选择子(数组下标)来索引全局描述符表中的段描述符。

由于段描述符存放在内存中,**CPU访问内存速率较低,且段描述符的格式限制导致一个数据需要分开多个地方存放,**CPU整合处理数据也需要一定的时间,如此地耗费时间,CPU可实在等不起,为了提高获取段信息的效率,对段寄存器应用了缓存技术,将段信息用另外一个寄存器来缓存,这个缓冲寄存器就称之为“段描述符缓冲寄存器”。该寄存器对程序员来说是透明的,所以程序员无需关注它具体是怎么运作的。CPU在获取到完成的内存段信息后,将其存入段描述符缓冲寄存器中,以便后续访问相同的段时,可以直接从该寄存器中读取相应的段描述信息。

以下为三种段描述符缓冲寄存器的结构:

此外,段描述符缓冲寄存器除了在保护模式下可用来缓存信息以外,在实模式下也可以用于存放运算结果。在实模式下的内存访问采用段基址左移四位加上逻辑地址转换成实际的物理地址,段基址左移四位的计算量也是挺大,所以在实模式下,将段基址左移四位后的结果存放在段描述符缓冲寄存器中,以后每次引用相同的段时,就可以直接走段描述符缓冲寄存器,直到该寄存器被重新赋值。

2.3.保护模式下的基址寄存器和变址寄存器

在实模式下,每个寄存器都有自己的固定使命,比如在实模式下的内存寻址(基址寻址、变址寻址以及基址变址寻址)中,基址寄存器固定式bx(经常用于访问数据段)和bp(经常用于访问栈),而变址寄存器只能是si和di。

在保护模式中,同样是内存寻址,基址寄存器不再局限于bx和bp,而是所有32位的通用寄存器,变址寄存器也不再是si和di,而是除了esp以外的所有32位通用寄存器,并且还可以用变址寄存器乘以一个比例因子(比例因子只能是1\2\4\8其中一个)。

三.16位和32位运行模式互转

3.1.bits指令

上文中提及过,拥有保护模式的32位CPU也可以向下兼容16位的实模式程序,也就是可以同时支持16位指令和32位指令的意思,但是在编译时,编译器也不知道程序员想要生成16位的还是32位的机器码,为此编译器提供了一个伪指令bits。

Bits伪指令的格式就两个:

【bits 16】:帮我把下面的代码编译成16位的机器码

【bits 32】:帮我把下面的代码编译成32位的机器码

举个例子,有以下这段代码:

        这段代码在编译后的机器码可以翻译为:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-BhihwDyn-1713204780160)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值