【问题标题】:Does disabling interrupt automatically disable CPU scheduling?禁用中断会自动禁用 CPU 调度吗?
【发布时间】:2011-04-21 08:54:09
【问题描述】:

大家好,如果禁用中断,是否所有进程/线程调度都将被禁用?我所知道的是中断包括时钟中断和其他中断。 CPU 调度(例如,循环)基于时钟中断。如果它被禁用,调度也被禁用,当前线程继续执行,直到它产生 CPU。如果我错了,请纠正我。

如果是纯基于优先级的调度而不是RR(考虑实时系统),并且低优先级的线程禁用了中断,那么高优先级的线程到达,低优先级的线程会被抢占吗?

这让我想到了操作系统中的保护。如果某些用户故意编写病毒来禁用中断怎么办?可能他在用户模式下无法做到这一点,如果他编写了一个在内核模式下运行的程序并且做了坏事怎么办?他能做到吗?

我不希望所有平台都有一个通用规则。所以请告诉我你知道的平台上的情况,谢谢。

【问题讨论】:

  • 内核模式下的坏东西一般是没有限制的。内核模式下的任何东西都可以破坏控制寄存器(例如:将页表基地址更改为某个垃圾值)。这就是为什么您需要成为管理员才能添加驱动程序。如果有的话,你应该说出你指的是哪个操作系统和架构。
  • 嵌入式系统中常用的处理器将包括一个看门狗定时器。 x86 也有看门狗定时器,连接到 NMI。但是,恶意程序只能禁用看门狗定时器并禁用中断。

标签: operating-system scheduling interrupt


【解决方案1】:

实际上,您的问题的答案取决于架构。让我们假设我们谈论的是 i386 或 x86_64,因为它们是当今最流行的处理器架构。

用户模式程序无法清除中断标志,因为它需要 CPL(当前特权级别)0。用户模式程序永远不会有 CPL 0。例如,在 Linux 中,用户模式程序使用 CPL 2 运行,只有内核使用 CPL 运行0. 因此,您不能编写会禁用中断从而禁用调度的病毒。在 Windows 中,如果我没记错的话,程序使用 CPL 1 运行。

另一方面,在内核中运行代码(在任何操作系统中)都需要管理权限,这允许您做任何您想做的事情,因此在内核模式下禁用中断没有任何意义。

希望这能回答你的问题。

【讨论】:

  • 在内核模式下禁用中断的一件事是保证没有其他线程(例如,一些高优先级的自动病毒线程)可以接管 CPU 并杀死病毒,以便病毒有足够的是时候为所欲为。这有意义吗?
  • 用户模式程序,在 Linux i386 中,以 CPL=3 运行,而不是 2。另一方面,如果用户程序以 root 运行,则可以禁用中断。根进程可以使用 iopl() 系统调用将 IOPL 级别降低到 3,因此 CPL=3 的进程可以使用 CLI 和 STI 指令,这些指令是 IOPL 敏感的,而不是 CPL 敏感的。
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多