gpt4 book ai didi

interrupt - 处理器间中断使用

转载 作者:行者123 更新时间:2023-12-04 21:45:34 26 4
gpt4 key购买 nike

的教育原则是:没有愚蠢的问题。这背后的基本思想是人们通过提问来学习。
我被要求:“你能在编程层面展示和解释如果每个任务都可以执行所有指令会发生什么坏事吗?”

我确实给了代码

    main(){
_asm_("cli;");
while(1);
}

并解释它(系统永久卡住-UP)

然后我被问到:“有没有可能举个例子,让系统即使清除中断也不会卡住?”

我确实修改了前面的例子:

我确实给了代码
    main(){
_asm_("cli;");
i=i/0;
while(1);
}

并解释了它。

简单地说:如果我们有需求分页 i=i/0 导致 首先 一个页面错误(数据页不存在)并且可以安排另一个任务运行在磁盘读取期间启用的中断,然后 被零除将把这个任务永远扔掉。

但答案是基于UP。 SMP呢?我必须说答案是不完整的。
它仍然很容易构建:
    int i;
main(){
for(i=0;i<100;i++)// Suppose we have less than 100 CPUs
if(fork())
{ sleep(5);//The generating task has (most probable) time to do all forks
_asm_("cli;");
while(1);
}
}

这将禁用所有 CPU 的中断,因为每个 CPU 都会运行一个有毒任务。

即使到目前为止,一个愚蠢的问题确实揭示了许多值得初学者学习的东西:特权指令、分页、故障处理、DMA 期间的调度、 fork ......
但是对于在 SMP 上运行的第一个程序仍然存在一个小疑问(我很惭愧)。

一个 CPU 会不会永久失效?
其他 CPU 继续并可以发送 re_schedule() IPI 消息
那会发生什么?
很容易推测卡住的 CPU 不会唤醒,因为中断被禁用。
但要完全确定必须了解更多。

我的问题是:
处理器间中断 (IPI) 是可屏蔽的还是不可屏蔽的?
我的意思是在最常见的“流行”实现中?

原谅我愚蠢的问题。找到答案并不难。我会去找的。
我的意思是中断引脚号(告诉可屏蔽,我 猜测 )。

我自己的答案 - 正确吗?
我研究了这个问题,因为没有其他人喜欢它,得出以下想法:

对于重要的实时应用程序,我们长期以来一直使用看门狗定时器(硬件中断 CPU 以某种方式回答“我还活着”)。
例如我们有主控电脑和备用电脑,如果主电脑宕机了,系统会负责处理。

Linux 呢?
什么样的看门狗——我们有吗?
我们可以在有或没有看门狗的情况下编译 Linux 内核。

Linux 看门狗有什么作用?
在许多( ! )x86/x86-64 类型的硬件上,有一项功能使我们能够生成“看门狗 NMI 中断”。
甚至可以通过向/proc/sys/kernel/nmi_watchdog 写入“0”来在运行时禁用 NMI 看门狗。
如果系统中的任何 CPU 没有执行周期本地定时器中断超过 5 秒,APIC 会尝试通过 不可屏蔽中断 来修复这种情况(cpu 执行处理程序,并杀死进程)!
(SCC Linux 与 NMI 不同。)

我的答案(在原始问题中)基于没有看门狗的系统!
在一般层面上回答并根据某些固定系统举例是有问题的。答案可能正确与否取决于 CPU 和配置和设置。

无论如何,谈论 NMI 确实有意义吗?做到了?

最佳答案

如果 CPU 不限制对某些指令的访问,则很容易意外或故意造成灾难。

push $0
push $0
lidt (%esp)
int $42

此代码序列将重置 x86 处理器。原因如下:
  • 代码将线性地址 0 处的中断描述符表 (IDT) 加载到 IDTR 寄存器,大小为 1 个字节。
  • 引发中断 42,无法工作,因为超出了 IDT 的 1 字节限制。
  • CPU 尝试引发一般保护故障,中断 13。这也失败,因为中断 13 超出了一个字节的限制。
  • CPU 尝试引发双重故障异常,中断 8。这也失败,中断 8 超出了 IDT 的限制。

  • 这被称为三重故障。 CPU 执行关闭总线周期来告诉主板它现在忽略一切并停止执行。主板断言重置,重新启动机器。

    与代码可以做的相比,这实际上可以忽略不计。代码序列可以轻松地完全劫持机器并开始破坏硬盘驱动器上的所有数据,它可以将您的所有文件发送到互联网上的恶意服务器,它可以更改您的密码,启用远程访问,连接到恶意服务器并授予攻击者无限的 shell 访问权限。程序可以做什么是没有限制的。

    处理器具有特权指令的原因有两个,主要目的是保护操作系统免受错误程序的侵害,这些程序可能会意外执行某些操作以关闭或劫持整台机器。第二个目的是限制故意恶意程序做同样的事情。

    关于interrupt - 处理器间中断使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091165/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com