当前位置: 首页 > 知识库问答 >
问题:

使用x86 IDT的任务门是处理内核模式(环0)堆栈故障异常的唯一方法吗?

姚子石
2023-03-14

假设内核总是在环0特权级别执行。对于堆栈故障异常(由于堆栈溢出或限制冲突),x86 IDT(中断描述符表)设置的陷阱门、中断门和任务门应使用哪个门?

X86处理器需要堆栈在调用堆栈故障异常处理程序之前将eflags、CS、eip推送到堆栈上。这意味着需要堆栈开关来调用异常处理程序。

使用任务门是执行堆栈切换的唯一方法吗?

使用任务门是为内核堆栈错误编写堆栈错误处理程序的唯一方法吗?

英特尔手动写入-“新tss允许处理程序在处理异常或中断时使用新的特权级别0堆栈。如果当前特权级别0堆栈损坏时发生异常或中断,则通过任务门访问处理程序可以通过向处理程序提供新的特权级别0堆栈来防止系统崩溃”。

提前感谢您的回复。

共有1个答案

苏浩瀚
2023-03-14

据我所知,是的。想象一下它是如何工作的:

  1. 您的堆栈溢出。
  2. GPF处理程序被调用,但它无法执行任何操作,因为R0堆栈已损坏。
  3. 进程尝试调用双重错误处理程序,但无法执行
  4. 这个过程有三个错误

如果您有TSS,则完成以下操作:

  1. 您的堆栈溢出。
 类似资料:
  • 我试图找到一种通用的方法来处理测试中的错误,它使用TestNG作为框架,使用Rest Assured作为库来进行Rest调用。 对于每次迭代,我都有超过30个REST调用要进行,并且使用,因此一个没有自己的try/catch的REST确保失败,然后整个批次都失败。我必须将每一个都包含在try/catch中吗?或者有没有更好的方法来执行“软断言”,这样测试在不单独处理的情况下就不会在我身上爆炸?

  • 本文档介绍 DM 的错误系统及常见故障的处理方法。 DM 错误系统 在 DM 的错误系统中,对于一条特定的错误,通常主要包含以下信息: code:错误码。 同一种错误都使用相同的错误码。错误码不随 DM 版本改变。 在 DM 迭代过程中,部分错误可能会被移除,但错误码不会。新增的错误会使用新的错误码,不会复用已有的错误码。 class:发生错误的类别。 用于标记出现错误的系统子模块。 下表展示所有

  • 有一种方法可以控制作业失败后在Azkaban中发生的事情,我的意思是,如果特定的作业失败,就做特定的事情,假设一个对hive的加载失败了,我想向splank发送错误,这可能吗?或者我应该创建特定的作业来插入并像python那样处理失败 谢谢

  • 3.1 PG 无法达到 CLEAN 状态 创建一个新集群后,PG 的状态一直处于 active , active + remapped 或 active + degraded 状态, 而无法达到 active + clean 状态 ,那很可能是你的配置有问题。 你可能需要检查下集群中有关 Pool 、 PG 和 CRUSH 的配置项,做以适当的调整。 一般来说,你的集群中需要多于 1 个 OSD,

  • 进行 OSD 排障前,先检查一下 monitors 和网络。如果 ceph health 或 ceph -s 返回的是健康状态,这意味着 monitors 形成了法定人数。如果 monitor 还没达到法定人数、或者 monitor 状态错误,要先解决 monitor 的问题。核实下你的网络,确保它在正常运行,因为网络对 OSD 的运行和性能有显著影响。 2.1 收集 OSD 数据 开始 OSD

  • Monitor 维护着 Ceph 集群的信息,如果 Monitor 无法正常提供服务,那整个 Ceph 集群就不可访问。一般来说,在实际运行中,Ceph Monitor的个数是 2n + 1 ( n >= 0) 个,在线上至少3个,只要正常的节点数 >= n+1,Ceph 的 Paxos 算法就能保证系统的正常运行。所以,当 Monitor 出现故障的时候,不要惊慌,冷静下来,一步一步地处理。 1