在保护模式下,我们将见到很多在实模式下没有的新概念,很多都是cpu硬件原生提供,并且要求的东西,也就是说按照cpu的设计,必须有这些东西cpu才能运行。咱们只要了解它们是什么并且怎么用就行了,不用深入到硬件之中挖掘其工作原理,咱们虽然是在做底层开发,但依然是应用型开发,我们能开发出什么样的软件,取决于cpu给咱们提供什么样的功能。就像能做出什么样的动画,主要取决于动画设计软件的功能是否强大,动画设计师的聪明才智虽然是无限的,但其驾驭能力还是很大程度上受限于软件本身的功能。今后大家会见到全局描述符表、中断描述符表、各种门结构等等,所以,大家不用对这些硬件相关的概念感到慌乱,这些是cpu提供给咱们应用的,咱们用好就行了,还记得之前说过的公设吗,这也是。
保护模式强调的是“保护”,它是在intel 80286 cpu中首次出现的,这是继8086之后,intel紧接着推出的一款产品。可见,当时的8086是多么的缺乏安全感。
保护模式中的“保护”体现在哪里?怎么就安全了?这个问题就像幸福的人问什么是幸福一样,还记得以前在百度工作时,我的技术经理李智勇问我:“你幸福吗?”,这时候我的项目经理贺亚涛抢答:“什么是幸福?”,哈哈,玩笑,您懂的。
“想要啥就有啥”并不是真正的幸福,而是发自内心地感恩、珍惜目前所拥有的一切。其实咱们已经被保护很久了,所以咱们才可以自由自在地享受计算机带来的便利。
幸福是比出来的,这一点不假。让我们看看cpu实模式的不幸,大家就清楚保护模式的幸福了。
1.实模式下操作系统和用户程序属于同一特权级,这哥俩平起平坐,没有区别对待。
2.用户程序所引用的地址都是指向真实的物理地址,也就是说逻辑地址等于物理地址,实实在在的指哪打哪。
3.用户程序可以自由修改段基址,可以不亦乐乎的访问所有内存,没人拦得住。
以上三个原因属于安全缺陷,没有安全可言的cpu注定是不可依赖的,这从基因上决定了用户程序乃至操作系统的数据都可以被随意的删改,一旦出事往往都是灾难性的,而且不容易排查。
4.访问超过64k的内存区域时要切换段基址,转来转去容易晕乎。
5.一次只能运行一个程序,无法充分利于计算机资源。
6.共20条地址线,最大可用内存为1M,这即使在过去20年前也不够用。
第4、5条是使用方面的缺陷,似乎当时(20年前)还可以忍受,但第6条简直就是硬伤,随着计算机事业的发展,程序对内存的需求必然是越来越大,如果还是1M内存,真的太束手束脚。
为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问,程序对此一无所知。顺便说一句,地址转换是由处理器和操作系统共同协作完成的:处理器在硬件上提供地址转换部件,操作系统提供转换过程中所需要的页表。