X86实模式和保护模式

X86架构的历史可以追溯到Intel在1978发布的i8086处理器,虽然X86是一个古老的架构,但是直到今日的Intel处理器仍然基于此架构。除了Intel,AMD的CPU也采用X86架构。

当然随着时代的发展X86架构也是在不断进化中,从最开始的只支持实模式(16位处理器)、到出现保护模式(32位处理器),再到现在IA-32e模式(64位处理)。下面简单介绍以下这几种模式的特点和联系。

对于不同模式,它们之间最大的区别在于对内存和对指令权限的管理上。

实模式

根据冯诺依曼结构(目前我们家用计算机的结构,除此之外还有哈弗结构)计算机由输入输出设备、存储器、控制器、计算器组成。控制器和计算器的合体就是CPU。CPU从存储器中读取指令并执行,对于计算机来说存储器主要指的是内存。

原先CPU没有模式的概念,它不加区分的从存储其中获取指令并执行指令,一个有序的指令集合就是一个程序。在实模式下程序使用内存地址直接读写内存,因此程序可以读写内存中的任何位置。这样一来内存对于软件程序来说就是一片无主的荒地,任何人都可以占有这块地的任何位置。程序中的指令也没有任何权限控制,任何程序都可以执行所有的指令。

在这一时期CPU的地址线只有20根,所以CPU最多只能使用1MB的空间(分给内存的就更少了)。因为内存小并且当时使用计算机的都是专业人员,因此对于内存和指令的控制权交给计算机的使用者没有什么不妥。

但随着计算机应用的推广,问题也随之而来。

保护模式

随着计算机在各个领域被应用,越来越多的非专业人士开始使用计算机。让非专业人士像专业人士一样管理内存是不现实的。此外,为了处理更复杂的程序CPU必须支持更大的内存,因此CPU的地址线数量增长到了32根,即可以访问4GB的内存。这么大的内存专业人士也管理不来。因此操作系统应运而生,操作系统负责管理计算机中的资源,协调各种程序协调地运行。

试想一下程序1把程序2占据的内存给改写了,程序2肯定不同意,反之亦然。更严重的问题是程序可能会未经过操作系统同意就执行会导致严重后果的指令。比如正在我编辑此文档的时候某软件执行了关机指令。

为了适应操作系统,CPU发展出了保护模式,在保护模式下内存和指令的访问都受到了严格的保护(限制),只有具备相应的权限才能访问相应的内存,调用相应的指令。程序也不能直接使用地址读写内存了

,在保护模式下CPU将内存分割成了一些独立的区域,这些区域称为段。段有不同的种类。用的段用于保存程序指令,有的用于保存数据,有的用于保存程序的基本信息,等等。同时段也有不同的级别。比如段1保存了程序1的程序指令它的级别是2级。段2保存了程序2的程序指令它的级别是0级(最高级)。此种情况程序1无法调用程序2的功能因为程序2的级别较高。不过程序1可以通过一种叫的段间接调用程序2。门起到了保护程序2的作用,这也就是保护模式名称的由来。

因为有了段,程序想要访问内存只能通过段号加段内的局部地址的方式,因此程序并不知道自己访问的位置对应实际内存的哪个地址。再加上操作系统对段的管理,程序就不能随意访问其他程序的内存了。

为了区分不同的模式将过去的模式称为实模式。保护模式也称为IA-32模式

IA-32e模式

IA-32e模式是对保护模式的扩展,将地址线扩展成了64位,理论上可以访问16EB大小的空间。实际上没有这么大。IA-32e其实是两个模式的总称,64位模式和兼容模式。64位模式可以运行64位操作系统和64位软件。兼容模式可以运行64位操作系统和64位和32位的软件。

除了地址线和内部寄存器扩展到64位之外,其对内存和指令的管理跟保护模式类似。

计算机的启动过程

计算机启动要经过3种模式,首先是实模式,经过软件设置后切换为保护模式,最后再由软件控制切换到IA-32e模式。

今天就介绍到这里欢迎对操作系统和X86编程感兴趣的小伙伴一起学习讨论。

你可能感兴趣的:(X86实模式和保护模式)