什么是保护模式?2025年2月4日 | 阅读 8 分钟 早在1982年,英特尔就将保护模式引入其x86架构。此后,它发展成为所有后续英特尔x86架构的基础。在早期版本中,无法激活保护模式或切换回实模式。尽管如此,可以使用键盘控制器将中断掩码、寄存器和堆栈指针存储在RAM中。后来,具有内置机制退出保护模式的286架构需要复杂的程序来激活保护模式。然而,随着386 CPU的问世,可以轻松激活保护模式。 ![]() 基于英特尔的x86微处理器主要在保护模式下运行,该模式通常被称为保护虚拟地址模式。其显著特点是能够防止一个应用程序的地址空间覆盖另一个程序的地址空间。 硬件强制执行此限制,以允许多个由不同开发人员开发的应用程序在单台计算机上运行。如果没有这种保护措施,恶意或有故障的程序可能会覆盖另一个程序的内存,导致其功能失常或崩溃。因此,将不会生成任何日志来解释第二个程序的故障原因。 英特尔CPU使用分段寻址,这是一种将内存划分为块或段以进行虚拟和物理存储的技术。段寄存器包含一个选择器,用于从描述符数据库中选择一个描述符。描述符包括段的长度、初始地址和访问权限。这些数据在保护模式下用于调节应用程序检索内存的方式。 286最初的保护模式随286一同出现,并被Coherent(始于1982年)、Microsoft Xenix(始于1984年)和Minix等系统使用,但并未被广泛采用。广泛接受受到多种问题的阻碍,包括无法访问BIOS或DOS调用,因为返回实模式需要重置CPU。286仅支持通过其四个段寄存器中的每一个以16位段访问内存,这意味着一次只能读取4*2^16字节,即256千字节。这进一步阻碍了其被接受。 当286启动时,它首先进入实模式,以确保与其前身8086的向后兼容性。由于实模式的运行方式与8086几乎相同,因此大多数现有的8086软件都可以在新的286上运行而无需任何修改。此外,实模式作为一个更基本的模式,允许指定保护模式,从而解决了一种悖论。操作系统会在内存中建立特定的表来处理保护模式下的内存访问,将这些表的地址插入到某些处理器寄存器中,然后将CPU置于保护模式,以利用286的增强能力。这使得CPU能够访问2^24字节的内存,即16MB,这得益于24位寻址。 386随着1985年386的推出,许多阻碍早期保护模式广泛接受的障碍得到了纠正。386最初发布时,其地址总线大小为32位,这意味着它可以访问2^32字节的内存,即4GB。此外,段大小也扩大到32位,允许访问整个4GB地址空间而无需在段之间切换。除了地址总线和段寄存器的容量增加外,还增加了许多其他功能以提高操作的安全性和稳定性。如今,几乎所有利用x86架构的操作系统——包括微软Windows、Linux和许多其他系统——都具有保护模式。 此外,英特尔设计了一种特殊的虚拟8086模式,允许在386上模拟多个虚拟化的8086处理器,以解决286保护模式在满足多用户DOS需求方面的问题。然而,用于虚拟化保护模式本身所需的硬件x86虚拟化又等待了二十年。 386保护模式有了更多的补充。 随着386的到来,在保护模式中实现了进一步的增强。
切换进出保护模式直到386推出之前,保护模式没有提供一种简单的方法来退出保护模式并返回普通模式。IBM设计了一种在IBM AT中实现的解决方案,该方案包括使用键盘控制器来启动CPU的重置。该方法还涉及将中断掩码、堆栈指针和系统寄存器存储在实时时钟芯片的随机存取存储器(RAM)中。因此,BIOS能够在重置前启动指令的执行并将CPU恢复到类似的状态。后来,286 CPU通过三重故障进行重置,这比使用键盘控制器更快、更精确(它适用于任何系统中的任何80286 CPU,并且不需要IBM AT兼容的硬件)。 构建至少包含三个条目——一个空描述符、一个代码段描述符和一个数据段描述符——的全局描述符表(GDT)是进入保护模式的前提。为了确保与为基于Intel 8088的IBM PC和PC/XT平台设计的旧应用程序的兼容性,在加电后只允许使用前20条地址线。因此,对于IBM兼容系统,还必须启用A20线(第21条地址线),以允许使用所有地址线,从而使CPU能够访问超过1MB的内存。在完成这两个过程后,必须在CR0寄存器中设置PE位,并进行一次远跳转以清除预取输入队列。 实模式与保护模式有何区别?英特尔首款用于个人计算机的微处理器8088,其RAM容量为1MB。在随机存取存储器(RAM)内建立了多个区域来存储BIOS数据、显示信号和其他系统数据。操作系统(OS)和应用程序消耗了剩余的640KB连续空间。 80286微处理器引入了保护模式,该模式禁止在保护模式下运行的程序中的任何指令访问未分配给该程序的内存。这为多任务处理提供了可能。大多数应用程序软件和操作系统代码通常在保护模式下运行,以避免意外覆盖重要数据。 然而,计算机在执行一些关键任务时需要访问所有内存区域。实模式是英特尔CPU启动时所处的模式,它使这成为可能。在实模式下的指令可以寻址RAM中任何可用的1MB地址。一个被信任在实模式下运行的程序通常需要读写系统数据。通常,这样的程序包含在操作系统或专门的应用程序子系统中。 CPU进入保护模式,也称为英特尔处理器的原生模式,以运行任何复杂的操作系统,如微软Windows或Linux,这些系统需要更宽的地址空间和多任务处理来同时运行多个程序。 保护模式中的许多功能提高了系统的安全性和稳定性。这些特性是:
现代英特尔CPU还提供哪些额外的工作模式?除了保护模式和实模式外,英特尔CPU还可以在以下两种模式下运行: 系统管理模式(SMM): 在此操作模式下,操作系统和所有其他程序的执行都会暂停,固件以最高权限运行。例如,硬件辅助的调试器通过SMM运行。 虚拟8086模式: 这在严格意义上不是一种操作模式,因为处理器本身仍处于保护模式,同时运行一个或多个实模式应用程序。高级的英特尔处理器,如80386微处理器及更高版本,可以在虚拟8086模式下模拟多个8086/8088处理器。此功能将以实模式运行的应用程序与系统的其余部分隔离开来。 下一个主题计算机硬件体系结构 |
我们请求您订阅我们的新闻通讯以获取最新更新。