Skip to content

操作系统中的特权和非特权指令

在操作系统中,CPU执行的指令可以分为特权指令和非特权指令。这些分类帮助操作系统确保安全性、稳定性和有效的资源管理。在本文中,我们将讨论操作系统中的特权和非特权指令。

什么是特权指令?

特权指令是只能由操作系统内核或特权进程(如设备驱动程序)执行的指令。这些指令通常执行需要直接访问硬件或其他特权资源的操作,如设置内存映射或访问I/O设备。只能在内核模式下运行的指令称为特权指令。特权指令具有以下特点:

  • 如果任何尝试在用户模式下执行特权指令,它将不会被执行,并被视为非法指令。硬件将其捕获到操作系统中。
  • 在将控制权转移给任何用户程序之前,操作系统的责任是确保设置了定时器以进行中断。因此,如果定时器中断,则操作系统重新获得控制权。
  • 因此,任何可以修改定时器内容的指令都是特权指令。
  • 操作系统使用特权指令来实现正确的操作。
  • 特权指令的各种示例包括:
    • I/O指令和停机指令
    • 关闭所有中断
    • 设置定时器
    • 上下文切换
    • 清除内存或从内存中移除进程
    • 修改设备状态表中的条目

操作系统在管理特权指令中的作用

  • 访问控制: 操作系统使用访问控制机制来限制对特权指令的访问。这些机制仅限于授权进程或具有提升权限的用户。这保证了特权指令只能由受信任的进程执行,并阻止恶意程序未经授权访问系统资源。
  • 内存保护: 通过部署内存保护技术,操作系统限制进程访问属于它或其他进程的任何内存位置。这有助于防止进程篡改操作系统或其他进程,确保进程不能这样做。此外,它阻止恶意程序导致系统崩溃或危及系统的安全性。
  • 中断处理: 操作系统通过中断处理来执行特权指令,如系统调用或异常,以确保安全性和准确性。因此,当一个进程执行期间发生中断,需要在将控制权转移给合适的处理程序之前保存其状态,然后在完成后恢复它。
  • 虚拟化: 使用虚拟化技术允许操作系统创建一个模拟环境,其中进程可以执行特权指令而无需直接访问底层硬件,从而为特权指令创建一个更安全、更隔离的执行环境,通过限制进程仅访问授权的硬件资源。

img

什么是非特权指令?

非特权指令是任何进程(包括用户级进程)都可以执行的指令。这些指令通常用于执行计算、访问用户级资源(如文件和内存)和管理进程控制。非特权指令在用户模式下执行,它提供对系统资源的有限访问,并确保进程不会相互干扰。只能在用户模式下运行的指令称为非特权指令。

非特权指令的各种示例包括:

  • 读取处理器状态
  • 读取系统时间
  • 生成任何陷阱指令
  • 发送打印机的最终打印输出

同样,重要的是要注意,为了从特权模式更改为非特权模式,我们需要一个不产生任何中断的非特权指令。

特权和非特权指令之间的区别

标准特权指令非特权指令
资源访问直接访问系统资源对系统资源的访问有限
执行模式在内核模式下执行在用户模式下执行
执行权限需要特殊权限才能执行不需要特殊权限即可执行
目的用于执行低级系统操作用于通用计算
风险引起系统崩溃或安全漏洞的风险较高在系统崩溃或安全漏洞方面的风险较小

特权和非特权指令的优点

  • 安全性: 这确保未授权人员不会访问其系统的资源。只有操作系统或其他受信任的进程才能执行特权指令,而用户程序可以运行非特权指令。
  • 性能: 通过允许它们直接访问硬件资源,减少了开销并降低了延迟。
  • 稳定性: 非特权指令在访问系统资源方面的限制,而特权指令只能由受信任的进程执行。用户程序和关键系统功能之间的区别使任何由用户程序造成的伤害远离。
  • 灵活性: 操作系统支持各种应用程序和硬件设备,因为它们具有这两种类型的指令。开发人员发现通过操作系统内定义的接口来创建新的应用程序和硬件更容易,以实现兼容性。
  • 调试: 通过明确区分受信任和不受信任的进程,这使得调试操作系统本身以及在其上运行的应用程序变得更加容易。要解决问题,开发人员首先必须识别它们,这种分离使得识别成为可能。

特权和非特权指令的缺点

  • 开销: 无论是特权还是非特权指令,都可能对开销以及性能下降产生影响。在这两种模式之间,特权和非特权之间的切换可能需要很长时间,导致系统性能下降。
  • 复杂性: 使用具有不同访问级别(特权或非特权)的指令的操作系统变得极其复杂,难以开发和维护。这两种类型的指令的必要性使得设计系统功能并确保系统稳定性更加困难。
  • 兼容性: 特权和非特权指令可能会在不同的硬件平台或操作系统之间带来兼容性问题。特权指令的不同实现使得在各种平台上创建应用程序变得困难。
  • 漏洞: 这些资源是攻击者的目标,他们利用操作系统中的安全漏洞。

结论

特权指令由操作系统内核和特权进程用来执行低级系统操作,而非特权指令由用户级进程用于通用计算。特权与非特权指令之间的区别是确保操作系统安全性和稳定性的重要机制。