保护模式之概述

moshui Lv2

前言

Real mode, protected mode, virtual 8086 mode, and system management mode.
IA-32架构有4种模式,分别为实模式、保护模式、虚拟8086模式、与系统管理模式。而Intel64架构增加了IA-32e模式(其中包含了兼容模式与64位模式)

概述

保护模式对任务的保护机制划分为任务间保护任务内保护。任务内的保护是指同一任务空间内不同级别的代码不会互相破坏。任务间的保护就是指一个任务不会破坏另一个任务。简单来说,任务间的保护是靠内存映射机制(段映射页映射)实现的,任务内的保护是靠特权级检查实现的。

任务间保护

虚拟内存映射机制来实现。直观的说,每个应用程序有自己的虚拟内存地址
IA-32 CPU提供了两种机制来实现内存映射:段机制页机制

任务内保护

任务内保护主要用于操作系统。

在Windows系统中,操作系统的代码和数据通常被映射到每个进程的高2GB空间中。这意味着操作系统的空间对于应用程序是“可触及的”,应用程序中的指针可以指向操作系统所使用的内存。

任务内保护的核心思想是权限控制,即为代码和数据根据其重要性指定特权级别,高特权级的代码可以执行和访问低特权级的代码和数据,而低特权级的代码不可以直接访问和执行高特权级的代码和数据。

特权级

首先式最简单的r0-r3的特权级划分。
其次理器通过以下3种方式来记录和监控特权级别以实现特权控制

  1. 描述符特权级别(DPL),位于段描述符或门描述符中,用于表示一个段或门的特权级别

  2. 当前特权级别(CPL),位于CS和SS寄存器中,用于表示当前正在执行的程序或任务的特权级别。通常CPL等于当前整被执行的代码段的DPL。当处理器切换到一个不同的DPL时,CPL也会随之变化
    但有一个例外,因为一致代码段可以被特权级别与其相等或更低(数值上大于或等于)的代码所访问,所以当CPU访问DPL大于CPL(数值上)的一致代码段时,CPL保持不变

  3. 请求者特权级别(RPL),用于系统调用的情况,位于保存在栈中的段选择子位0和位1,用来代表请求系统服务的应用程序的特权级别。在判断是否可以访问一个段时,CPU要检查CPL,也要检查RPL。这样做的目的是防止高特权级的代码代替应用程序访问应用程序本来没有权力访问的段
    举例来说,当应用程序调用操作系统服务时,操作系统会检查保存在栈中的来自应用程序的段选择子的RPL,确保它与应用程序代码段的特权级别一致,IA-32 CPU专门设计了一条指令ARPL来辅助这一检查。而后,当系统访问某个段时,系统会检查RPL。此时如果只检查CPL,那么因为正在执行的是操作系统的代码,所以CPL反映的不是真正发起访问者的特权级

参考资料

  1. 《Intel® 64 和 IA-32 架构软件开发人员手册》
  2. 《看雪博客》
  • 标题: 保护模式之概述
  • 作者: moshui
  • 创建于 : 2024-08-07 10:13:44
  • 更新于 : 2024-08-09 12:47:13
  • 链接: https://www.moshui.eu.org/2024/08/07/WinProtect/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论