代码之家  ›  专栏  ›  技术社区  ›  Nagri

手动生成计时器中断

  •  1
  • Nagri  · 技术社区  · 6 年前

    在我的机器上;

    /过程/中断

              CPU0       CPU1       CPU2       CPU3
      0:         54          0          0          0   IO-APIC-edge      timer
      1:         10          0          0          0   IO-APIC-edge      i8042
      6:          2          0          0          0   IO-APIC-edge      floppy
      8:          1          0          0          0   IO-APIC-edge      rtc0
      9:          0          0          0          0   IO-APIC-fasteoi   acpi
     12:         16          0          0          0   IO-APIC-edge      i8042
     14:          0          0          0          0   IO-APIC-edge      ata_piix
     15:    3984107          0          0          0   IO-APIC-edge      ata_piix
     16:          2          0          0          0   IO-APIC-fasteoi   vmwgfx
     17:     980727     939643    1334876     770403   IO-APIC-fasteoi   ioc0
     24:          0          0          0          0   PCI-MSI-edge      PCIe PME, pciehp
     25:          0          0          0          0   PCI-MSI-edge      PCIe PME, pciehp
     26:          0          0          0          0   PCI-MSI-edge      PCIe PME, pciehp
     27:          0          0          0          0   PCI-MSI-edge      PCIe PME, pciehp
     28:          0          0          0          0   PCI-MSI-edge      PCIe PME, pciehp
    

    我了解中断,我想了解定时器中断。 This page 表示,每次发生计时器中断都会触发以下主要活动,如更新系统启动后经过的时间。

    在我的机器上,它只显示54,但机器已从天增加。

    我错过了什么?

    第二个问题是,如何手动生成中断,使计数从54变为55?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Basile Starynkevitch    6 年前

    您不生成计时器 interrupts 。硬件确实如此(可能每秒有数百次中断)。内核配置硬件来实现这一点。

    同时阅读 time(7) ,这是处理用户land Linux应用程序中与时间相关的内容的方法(这可能对您更重要)。

    如果您关心处理中断,那么您可以编写自己的操作系统 kernel scheduler (然后 linux 标记将脱离主题)。看见 Operating systems: Three Easy Pieces (可免费下载)。有关操作系统开发的实用提示,请参阅 OSDEV wiki。

    操作系统在这里隐藏硬件细节,如中断,并管理硬件,并为您提供上面的抽象。 /proc/interrupts 只是一种 查询 操作系统内核状态。它的格式随内核版本和硬件的不同而不同(在我的系统上,输出与您的系统非常不同),并且它对系统管理员非常有用(例如,当某个奇怪的硬件发出大量中断时,作为硬件故障的提示)。看见 proc(5)

    如何手动生成中断

    在Linux系统中, 你不能。

    顺便说一句,Linux也有 signal(7) -s(另请参见 signal-safety(7) …)但这些信号不是中断(即使 一些 中断可能间接触发信号)。和 signals 确实可以“中断”(以非常形象的方式,与硬件中断不同)您的 process

    (有可能在特定的硬件和内核上,大多数“计时器”中断都会进入 ioc0 (行)